loader image

Holiday Shoutout to our Technology Benefactors

Knack wouldn’t be possible without open-source and a handful of awesome services and platforms. In less than a year, we built a fully-functional technology platform that includes a mobile app for iOS and Android, a powerful web app used by our recruiters, and a highly scalable backend that does everything from resume parsing and search to automated data ingestion and interview scheduling. We want to give special thanks and recognition to the specific projects that we are most deeply indebted to.

Open-Source

Javascript. When Brendan Eich created Javascript, he couldn’t have had any idea what impact it would have on the world. The concept of event-oriented architecture and asynchronous, non-blocking program execution that was so novel (and even weird) in the early days of the Web has now found a place in almost all aspects of software engineering — especially on the server. We are Javascript evangelists and couldn’t give a shoutout to our tech benefactors without including one to Brendan and the various organizations and teams that have helped make Javascript one of the most widely used languages on Earth. Good luck with Brave and BAT, Brendan! We were among your earliest backers and we use the browser almost exclusively. Also, one of our founders worked directly under your successor (Jack) at Mozilla Research. Your legacy is truly inspiring.

Node.js. In the early days of computing, most applications were “CPU bound”, meaning that the speed of the CPU had the biggest impact on the overall performance of the application. These days, things are a bit different. Most modern apps execute in response to events and integrate with databases, third-party APIs, and other remote resources that would slow the application down if it had to wait for responses from these resources. Ryan Dahl and Joyent created a whole new way to handle this new era of “network bound, event-oriented” applications, leveraging features already present in the Javascript language. Node.js makes it easy to quickly build applications that achieve parallelism in a totally new way. NPM, the defacto package manager for Node.js, makes it equally easy to leverage existing open-source code to accelerate development. Engineers can now develop in the same language in the browser and on the server, going from novice to seasoned expert in a much shorter time than would have ever been possible when we had to learn different languages for front-end vs back-end. Thank you to the Node.js community!

Serverless. Our biggest shoutout goes to the creators of the Serverless Framework. This multi-language, multi-cloud framework has changed the way we build software forever. One of our founders has been working with this framework since it was called JAWS. The Serverless Framework allows developers to build entire backends using “cloud functions” that execute in response to events. This can include APIs (REST or GraphQL), data ingestion pipelines, file processing applications, and all sorts of other neat stuff that would usually require dozens of containers or VMs spinning all the time and eating up money while remaining largely underutilized. All of the complexity around scaling applications just vanishes with Serverless. Function as a Service (FaaS) platforms like AWS Lambda or Google Cloud Functions handle scaling without any explicit configuration. These functions can respond to everything from HTTP requests, file uploads, incoming emails, changes to database tables, IoT events, and just about anything else you can imagine. Our entire backend infrastructure is built in Serverless, defined via simple YAML files. We have zero servers, zero containers, zero VMs. Literally. Incredible work, Serverless team. We are your biggest fans! We also want to recognize the amazing community that is constantly building plugins for the Serverless Framework for just about every problem under the sun.

React. React has changed the front-end development game in more ways than most of us realize. Angular and some of it’s predecessors (remember Polymer) introduced the idea of components to most of us, but React was the first mainstream framework that made it truly practical. React’s unidirectional data flow and virtual DOM make pages render faster and simplify the logic necessary to keep user interfaces synced up with the data being rendered within components. By staying close to ECMAScript syntax, React makes it easy for Javascript engineers to remain in a state of continued learning without marrying themselves too closely to a syntax that may eventually become obsolete if the framework itself dies out. Like Node.js, React powers an entire ecosystem that includes a new way of building web apps, mobile apps (React Native), AR/VR experiences (React 360), and even APIs (see GraphQL below).

React Native. React Native is just badass. How else can it be said. Five years ago, building a mobile app for iOS and Android required knowledge of different languages (Java for Android, Objective C or Swift for iOS), different IDEs depending on the target platform, different build processes, and all sorts of weird intricacies. It usually required different engineers for each platform, or different engineering teams if the app was nontrivial. There were a few “hybrid” mobile frameworks around, including Cordova, PhoneGap, and Sencha, but they were (and still are) pretty impractical for all but the most simple apps. React Native is a game changer. Unlike the hybrids, React doesn’t attempt to force HTML and CSS into mobile development, but it does stay fairly close to them in syntax. As long as you know Javascript and React, you’ll feel comfortable building mobile apps that can easily be built and run on Android and iOS and that have the same look, feel, and performance of “native” apps. All of the goodness of the Javascript community, including many thousands of NPM modules, just work like magic in RN — and with new tools like Expo, developing mobile apps is almost as easy as building applications for the web.

GraphQL. For many years, the only sensible way to build an API was using RESTful concepts. Each new feature required new endpoints and/or routes. There was really no way to specify the shape of the data returned. An API request always returned the same fields, even if they weren’t needed to render the UI. Maintaining such APIs over time can become tedious, and they don’t lend themselves to optimal UI performance since a lot of the data served by the API isn’t required by the UI. GraphQL introduces a new approach. A GraphQL API exposes all functionality through a single endpoint that can be queried like a database. GraphQL queries include a description of the data that should be returned, which helps reduce the size of API responses. All changes to data are performed via “mutations”, and GraphQL even supports pub/sub via “subscriptions”. GraphQL APIs are based on type definitions that describe the data objects that make up your application and resolvers that perform actions required to retrieve those objects. Extending a GraphQL API is as simple as adding new types and resolvers as new features are required. No new endpoints or routes as time progresses. GraphQL APIs are also self-documenting. The schema that defines your API also describes the features of the API and can easily be accessed via tools like GraphQL Playground. This is probably a lot of mumbo-jumbo for almost everyone reading this article, but we are so excited about GraphQL we stopped doing RESTful APIs long ago and handle all of our API needs via GraphQL. Thank you to the GraphQL team and to all of the organizations helping push GraphQL forward — especially Apollo and AWS Amplify!

Expo. Expo is an amazing tool that simplifies mobile app development tremendously. You can use Expo to run an app on an iPhone or Android device during development, without building it. Expo simplifies coding for push notifications, analytics, timezone detection, and all sorts of other things. Expo can also be used within a continuous integration (CI) pipeline to send “over-the-air” updates without re-submitting an app to the app stores. Used in conjuction with Fastlane, it also helps automate the publishing of an app directly to Google Play and the Apple App Store. Shoutout to the Expo team!

Services

Seed. Hands down, Seed is the best CI platform for Serverless deployments out there. If you develop backends using the Serverless Framework, you can simply connect Seed to your Github and AWS accounts and you’re ready to go. No additional YAML file is required for the pipeline to work (although seed does support one for pre/post deployment stuff). Seed uses your existing serverless.yml files to deploy your service(s). Each service can be deployed independently of others. We have always had a preference for using a single CI tool for web, mobile, and API, but Seed is so awesome we decided to use it for our backend while using CircleCI for web and mobile. We couldn’t be happier. Their support is among the best we’ve ever seen, and their software just works.

Branch. One of the most challenging problems to solve when launching a mobile app is how to turn desktop web visitors into mobile app users. Google makes it easy to install a mobile app from the web-based Google Play listing, but this is not a feature offered by Apple. So how do you get a website visitor to the app listing on their phone? Take a look at Branch.io! When a user clicks a Branch link, whether in a mobile browser, desktop web browser, from an email or elsewhere, Branch automatically determines what device the user is on and redirects them accordingly. If the user is on a mobile device, they will land on the appropriate store listing on their device. If a user is on a desktop machine, they land on a page that allows them to text an install link to their phone. Branch also supports more advanced features like deep linking and journeys that help further maximize mobile user engagement and retention.

Segment. Segment.io is a pretty awesome way to keep analytics code out of your application. You integrate your app with Segment.io, and then integrate every other destination for your event and user data via the Segment.io web interface. If you decide to use Google Analytics, Mixpanel, or any of a number of other analytics services, you simply configure them as destinations in Segment and you’re done. No additional code needs to be added to your app for each service. The same goes for AdRoll, Facebook Lookalike Audiences, various email platforms, and numerous other services. Event tracking and user profile creation is handled in a standardized way that just works without any hassle. Thanks Segment!

FullContact. We have a pretty powerful applicant tracking system (ATS) hidden behind our mobile app. Our internal ATS parses incoming resumes, extracting all sorts of useful information that we use to create candidate profiles and score candidates based on their skills, education, and work history. Resume parsing is challenging, however, as is any machine learning task that involves understanding unstructured or semi-structured text. To overcome some of these challenges, we needed a little assistance from our friends at FullContact. FullContact has a profile enrichment API that can be queried with phone number and/or email to get back rich user profiles compiled from numerous sources. Depending on your needs, FullContact has a number of “data packs” that can be added to your plan to obtain educational history, work history, gender, and a lot of other data that is helpful in understanding and profiling your users. One of our founders met the creators of FullContact a few years back (soon after their launch) at Collision Conference in New Orleans. We’ve tracked them ever since and we’ve been amazed at their progress and the rapid pace with which their data offerings have grown. Amazing product that is easy to integrate with. Thanks FullContact!

Platforms

AWS. We love AWS! Even half a decade ago, it would have been impossible to build and deploy what we’ve created in such a short time, using physical servers, VMs, or even Docker containers. Amazon has become the new pioneer of “serverless” computing, and we were an early adopter. Over the last few years, we’ve stretched the limits of serverless architecture for everything from APIs and web crawling to data ingestion, search, machine learning and all sorts of other applications. It is truly amazing to look back on the last 25+ years and see how Amazon has evolved from a Web 1.0 bookseller into the leader of cloud computing that it is today. Cudos to Amazon for introducing us to the age of cloud computing and, more recently, making serverless architecture truly practical in production.

Apple. Where would we be without Apple? Apple isn’t just a technology company. It is a force of nature that has had such an impact on this world it may have very well affected our entire evolutionary trajectory in some way we don’t even understand yet (much like the other companies in this section). We are grateful to Apple for the amazing MacBook Pros we create beautiful experiences on everyday and equally grateful for the iOS platform that allows us to reach so many people. The rigorous testing the Apple team did during our app submission helped us diagnose and fix issues we weren’t even aware of. The foundation of excellence upon which Steve Jobs built Apple is still alive and well.

Google. Google has done so many things to transform this world, it’s almost impossible to find a starting point for expressing our gratitude. Our main shoutout to Google is for the V8 Javascript engine, Chrome (our development browser of choice, aside from Brave), and the Android operating system. We are a Javascript startup with deep roots in Node.js. V8 is the backbone of Node.js and the innovation that finally made server-side Javascript a reality. Android is equally awesome and makes it super-easy to publish and test mobile apps written in React. Very few hoops to jump through to get up and running.

Facebook. Everyone loves to hate Facebook these days due to concerns over privacy, political speech, and dozens of other things, but Facebook has made some important contributions to software engineering that deserve recognition. React, React Native, and GraphQL are three innovations that have completely transformed the way we build software. React has taken components and re-usability to a whole new level over the last few years. React Native is one of the first JS-based frameworks for building mobile apps that actually doesn’t suck (if you’ve ever tried PhoneGap or some of the earlier hybrid frameworks, you catch my drift). GraphQL is just amazing and makes it easy to query databases in a way that was never possible with REST. Thank you Facebook!

Knack uses dozens of open-source NPM modules, UI components and libraries, and other tools and that aren’t mentioned here. We appreciate everyone who devotes their time and energy to contribute to the vast body of knowledge represented by open-source software and we intend give back to that community over time.

Happy Holidays and thank you!

Comments are closed.

© 2020 Knack Enterprises, Inc.