Hello World

Max Beatty
Ansaro Engineering
Published in
4 min readFeb 20, 2018

Welcome to the Ansaro Engineering publication! We’ll be sharing our learnings from building a new product from scratch and the engineering decision-making process behind important features. Follow our main publication to learn about people analytics and how data science can help with workforce decisions. Machine learning will be a common topic for both publications, but here you can expect deeper technical and operational insights.

“Two gray pencils on a yellow surface” by Joanna Kosinska on Unsplash

What are we building?

Ansaro’s first product will help organizations bring structure to their interview process. We are aiming to make recruiters more efficient and teams more coordinated all while collecting data that will power predictions about applicants and allow executives to see how their groups are performing. From an engineering perspective, we are building the foundational pieces that future features will rely on. It’s the most exciting time for a startup!

We know there is a lot of growth ahead. Based on our product roadmap and sales strategy, we’re preparing for growth in complexity and not for overnight, chart-topping App Store popularity. Here is the stack we’re using to build this first product with the future in mind.

Our Backend

Our backend can be summed up as a GraphQL API written in Go with a Postgres database.

Postgres

Our data will initially be very relational making Postgres a safe choice. If we need to start storing unstructured data, their JSON data types will be waiting for us. A major theme for the engineering team early on will be finding managed services to ease operations, and there are many capable vendors who will host Postgres for us. Driver support is robust and ORMs are fine-tuned making us even more confident in our choice.

Go

Go is as powerful as it is approachable. We get static typing, testing, and even formatting right out of the box. I’m especially excited about the progress of dep as an official dependency manager. With the help of several community resources, we have laid out a monolithic API that can easily be broken apart into independent services later. While we won’t have any performance challenges on day one, we know Go’s concurrency patterns will be there for us in the future.

GraphQL

I was an early adopter of GraphQL after living through the pains of maintaining a few REST-ish APIs. It’s a great choice for us because of the known growth we have ahead. We can define a User like this today:

type User implements Node {
id: ID!
firstName: String
lastName: String
email: String!
}

And then quickly evolve our schema in the future:

type User implements Node {
id: ID!
firstName: String
lastName: String
email: String!
phone: String
role: Role
interviews(date: Date!): [Interview]!
}

Go’s static typing pairs very well with GraphQL’s type system. We’ve been quite happy with neelance/graphql-go and the ability to separate concerns.

This feels like a good time to mention we’re hiring

I made a conscious decision when defining our hiring plan with Sam and Matt to have distinct roles for frontend and backend. My intention is for each team member to own their part of the stack and have the deep technical knowledge to help others who may be contributing to an unfamiliar place in an unfamiliar language.

Our Frontend

Our frontend can be summed up as a Next.js app decorated with Flow depending on Relay to interact with our GraphQL API.

Next.js

Next.js is a minimalistic framework for server-rendered React applications.

We get automatic transpilation and bundling (with webpack and babel), hot code reloading, and automatic code splitting right out of the box. That means a great developer experience and production optimizations without having to configure anything.

Flow

Rollbar, the error tracking service, recently published Top 10 JavaScript errors from 1000+ projects and 7 were related to TypeError. This reinforced my decision to use a static type checker like Flow. Now we have type safety at every level of our stack (database, API, and UI).

Relay

Like React allows us to declare views, Relay allows us to declare our data requirements for individual components. Relay Modern is a major improvement on its Classic predecessor and does all of the heavy lifting to create efficient network requests. A complete component using React, Flow, and Relay ends up looking like this:

You can follow our evolving stack on StackShare. We are stoked to keep sharing our technical tidbits along with how we’re building not only our product but company!

If you are interested in building a great product using Go and GraphQL, please email me (max.beatty@ansaro.ai) or find me as @maxbeatty most places.

--

--

Max Beatty
Ansaro Engineering

Designs & builds products for the web. @maxbeatty most places.