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.
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.
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!
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!
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.
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!