Technology & Engineering

An inside look at how we do our thing.

2019-03-31

Our team consists of frontend, backend, and mobile developers working alongside DevOps engineers, designers, a product manager, and an application architect. We deliver launched products built on a scalable and extensible infrastructure.

Our practices and technologies focus on delivering high-quality software that has long term savings rather than long term costs. Our services are modularized, our architecture is serverless, our development is test driven, our code is peer-reviewed, our development/production environments dockerized, and our changes are continually integrated and delivered.


Whaat? Let’s take it one definition at a time.

Depending on how much experience you have in tech the description above either makes sense or needs explanation. Let’s dive into one thing at a time. The goal of these definitions is to have the shared language we need to work together rather than presenting the most technical definition. We want you to understand what we are doing without having to dive too deep into the weeds.


Things we build

Frontend Prototype / Landing Pages

These are web products that are mostly visual, informative, and somewhat interactive. These products (aka websites) might have some functionality / integration, but they are not customized to specific users and have very minimal use of data / algorithms / services.

Technologies: Wix / Squarespace / Vanilla HTML, CSS, and JavaScript / Bootstrap

Complexity: ⭐️ - ⭐️⭐️⭐️

Examples: Most personal / company websites, most government / academic websites, and most blogs.

Team: Design, Frontend, DevOps, Product Manager


Backend Services

The functional and data related aspects of the product can be modularized into services. Including data storage, data analytics, APIs, algorithms, servers, services, messaging, performance, and all the other types of processing.

Technologies: Programming Languages (Javascript, Python), Frameworks (Node.js), Infrastructure (Firebase Google Cloud, AWS), Databases (PostgreSQL, Firebase), and APIs (Stripe for payments, Instagram for social, Plaid for banking data, Google Maps, Fitbit for fitness data, Twilio for class and messaging, etc.).

Complexity: ⭐️⭐️ - ⭐️⭐️⭐️⭐️⭐️

Examples: If you wanted to send someone a text message every time a client submits a payment through Stripe or send yourself an email summarizing the changes in a database over the last week you would create services to support that functionality.

Team: Architect, Backend, DevOps, Product Manager


Web Applications

These are software products that have a frontend and a backend. Most websites that you interact with every day and you could say do something are considered web applications.

Technologies: All of the above + React.js

Complexity: ⭐️⭐️⭐️ - ⭐️⭐️⭐️⭐️⭐️

Examples: You email, banking, messaging, shopping, and every other website out there that knows who you are are good examples.

Team: Design, Architect, Frontend, Backend, DevOps, Product Manager

Note: A mobile / responsive web app is a web app that you can open using your phone’s browser, and it works in the same way as it would on a laptop /desktop by adjusting the frontend to the right screen dimensions. All our web apps and frontend prototypes / landing pages are responsive.


Mobile Applications

A mobile app is one that you download from the app store (Android or iOS). Mobile development is specifically the “frontend” of a mobile app. To build a mobile application, we need mobile development and backend development for supporting services.

Technologies: All of the Backend Technologies + Swift (iOS), React Native (iOS + Android)

Complexity: ⭐️⭐️⭐️⭐️⭐️

Examples: The mobile app version of your email, banking, messaging, shopping, etc.

Team: Design, Frontend (occasionally), Backend, Mobile, DevOps, Product Manager


Things we don’t build:

  • Blockchain Applications
  • VR/AR Applications
  • Internet of Things Applications / Hardware
  • Games


Our Engineering Principles

Not all software is created equal. The term code quality doesn’t mean much on its own, here we go through what makes our software better. We are the only development agency with Stanford, Facebook, and Y Combinator on our resume. Inspired by our experience of writing software in the best academic, corporate tech, and startup organizations we developed our engineering principles.

Modularized - Instead of creating the typical dev-shop-spaghetti-code-mammoths, we create reusable and replaceable services that we can combine to create the software product you need. If you need authentication, we can customize a Facebook, Instagram, Google, or Firebase Authentication module for you. If you need payments, we can customize a Stripe, Braintree, or Venmo module. If you need to enhance or change your product at a later date, you can do so easily because of the modularization, significantly cutting the time it takes to fix bugs and enhance the product while making it less error-prone.

Serverless - When Amazon and Google started selling access to their hardware, creating software companies became a thousand times easier. Now, they allow us to not just skip the hardware part, but also the server creation. With a serverless architecture, we can simply create services that use computing power on the cloud without creating and managing servers. This innovation allows us to create servers only when they are necessary and leverage our ability to integrate services seamlessly to our products, saving hosting costs as well as development time.

Test Driven - If you create tests before writing software, you design your services with usability in mind. This increases development speed, decreases bugs, and guarantees that changes don’t impact past features.

Peer Reviewed - Even the best code can always be better. All our software is reviewed by another team member to make sure we are consistently delivering our best quality work.

CI/CD (Continuous Integration & Delivery) with Dockerized Development & Production Environments - This is a mouthful, but we’ll go one step at a time. The goal of this type of infrastructure is to increase productivity and decrease errors. One of the hardest, most time consuming, and least predictable aspects of development is managing dependencies and testing. To solve this, we create an environment in which:

  • New developers can join the team with minimal setup.
  • Current developers don’t have to update their environments every time a module needs updating.
  • Changes are automatically tested before they are published, and
  • The frontend can be approved by a stakeholder (in a site like testing.yourapp.com) before being published.

These properties work together to increase productivity and decrease mistakes.


Conclusion

Rather than overwhelm you with technicalities or leave you in the dark, our goal is to strike a balance of mutual understanding and ease of collaboration. We are creating products to support businesses that can grow and be profitable. Our choices are based on the assumption that you want to spend less and do more not just for the duration of our initial engagement, but beyond as well. Whether you decide to hire internally, make changes yourself, or grow with our support the decisions we make starting on day one will be in service of your long term goals.



Interested in developing your software product? Check out how we can help.

Not ready, but interested in learning more? Sign up to learn more about what it takes to build great software products.