Image for post
Image for post
Tulsi Gabbard at the 2016 Democratic National Convention. Photo: Aaron P. Bernstein/Getty Images

I have been paying very close attention to almost all the presidential candidates for months now. I always knew that politics was important, but 2016 taught me that it is also important to get involved early on in the presidential election process. We can’t just wait until the summer to pick from whoever is left standing, the stakes are too high this time for that approach. It is our duty as citizens to become deeply engaged in the vetting process, especially this time. Those that came before us fought too hard for the rights and liberties we enjoy for us to drop the baton on the final lap. …


Today is my 29th birthday. To celebrate I have compiled some advice and wisdom that I would like to share in the form of simple, actionable directives. Hopefully, you find this useful or at least interesting.

First, who am I and why should you listen to me?

My name is Mike Staub and I have been living and working in San Francisco, CA since 2012. Here are some labels I identify with, in no special order:

software engineer, he/him, effective altruist, artist, musician, athlete, entrepreneur, introvert, scientist, gamer, psychonaut, investor, leader

And here are some of my notable accomplishments to help convince you I’m someone worth listening…


I remember the first time I logged into facebook.com. I was 17 years old and the platform just opened to non-college students. My high school friends and I were waiting patiently to join. All of our older siblings with coveted .edu email addresses were already raving to us about how great and different this new social network was. I assumed it was just a slightly better myspace, which my friends and I were already using daily, so I was skeptical at first. I was wrong.

After logging in and seeing my friends’ real names and faces, I was shocked. We were taught by our parents to never personal information online. ( their paranoia doesn’t look so crazy now ) The pre-internet facebook was mostly username and avatar-based, with very little personal data being shared at all. I instantly realized that this was nothing like myspace and that we as a society were entering into a new era, one where our analog and digital lives were going to meld together. …


Image for post
Image for post

Please read Part 6 if you have not.

Congrats on making it this far! Hopefully you found this series useful. There are many simple “getting started with X” blog posts out there, and while useful, I would love to see more posts like this, that dissect a fully functional app from start to finish.

I had a lot of fun with this stack and creating this simple app. I hope that people actually use it to form new connections.

Share it with your slack teams!

Feedback

I developed this app alone, ( generally not a good way to write software ) and I am sure there are bugs and problems in the implementation. I chose to open source it anyways to promote a discussion around what could be improved. If you have ideas or questions, please post them in the github issues. Also, if you want to help me further develop this application that would be great! I will be shifting focus to the peapods.com project, as I find that to be more important, but this project will be actively maintained indefinitely. …


Image for post
Image for post

Please read Part 5 if you have not.

This part is an overview of this pull request.

Now that we have our backend API, and frontend React app deployed we can gather user data. Great. Now comes the final piece, a new lambda function to email all those users their weekly lunch match!

Matcher Function

The matcher function should be a simple function that is invoked on a chron (which serverless supports easily). Its important that this service (and any other service our backend provides in the future) performs NO MUTATIONS of its own. This is an opinionated approach. The idea is that ALL mutations (ie side effects) which affect external systems (databases, emails, APIs, etc) must be performed in the GraphQL API. This restriction, along with the restriction that all GraphQL mutations must be fully tested, gives us a very strong assurance that our system does what is supposed to. As soon as you allow arbitrary lambda functions to send emails, mutate the db, etc — you open up a can of worms. …


Image for post
Image for post

Please read Part 4 if you have not.

This part is an overview of this pull request.

I am a huge advocate of not just software testing, but TDD (Test Driven Development). To me, good testing is not only required before shipping code to production, but adopting TDD is actually a boost to productivity.

TDD

I will not go into too much detail about the merits of TDD here, as there are many articles that cover this topic. TDD at first feels like it is slowing you down, after all your users don’t care about your nice test suite, they want features! Well I am of the opinion that it is better to ship working software slowly, than buggy software quickly. The idea of rapid iteration, moving fast and breaking things, and other developer / deadline prioritization philosophies has landed us in the current quagmire we find ourselves today. With security breaches, privacy leaks, hacked systems, broken apps, and buggy software in general.


Image for post
Image for post

Please read Part 3 if you have not.

This part is an overview of this pull request.

Now that we have our backend deployed, let’s deploy our react frontend to our custom domain.

AWS Deployment

The frontend app will be statically hosted in S3 / CloudFront under a custom domain. All of this is configured already in the CloudFormation template. The React app will interact with the GraphQL API we deploy in Part 3 for all of its data needs. We do not actually send full GraphQL queries, but rather just the query name and variables. This approach is fairly common, and helps prevent API abuse as well as reduces data transmission size. For private APIs which are tightly coupled to the app UI / features, this is an acceptable design. …


Image for post
Image for post

Please read Part 2 if you have not.

This part is an overview of this pull request. It is the most important part of the series.

One of the books I started reading during my sabbatical was Domain Driven Design: Tackling Complexity in the Heart of Software, by Eric Evans. I wanted to start learning more about Software Architecture and higher level design principles. The books is full of useful, actionable insights and I highly recommend it (though it is quite long). The main goal of the book, is to help the reader understand how to build the right models and abstractions for their given business domain, and use succinct but precise language in describing those models and their business rules / interactions. …


Image for post
Image for post

Please read Part 1 if you have not.

This part is an overview of the this pull request.

3rd Party Setup

We will be using Amazon Web Services exclusively. I have tried almost all the other providers and too be frank, they are generally not as good yet. Their free tier is very generous as well, which is great for small fish like us. This stack costs about $10 per month to run.

All the necessary accounts are listed here in Step 1 in the README.

Docker, Eslint, Stylelint, Flow, Prettier, and App Secrets

We will use Docker for repeatable dev and testing environments.

Eslint, Stylelint, Prettier, and Flow Type are awesome tools. They are pretty much required for any serious javascript project, though you could use Typescript instead of Flow if you like. I prefer Flow because it is incrementally adoptable and well supported by other Facebook tools (React, GraphQL). …


Introduction

Are you interested in learning about React, GraphQL, Serverless, and Graph Databases? Did you know that these technologies can be combined to create a world-class developer experience, that let’s you move fast while being highly scalable as well? If this sounds interesting to you, this blog series is well worth your time. So get comfortable, and follow me as I walk you through my most recent side project…

Recently, I was lucky enough to enjoy a much-needed sabbatical. I planned to spend my time relaxing, reading, traveling, spending time with loved ones, and of course — learning new tech. I wanted to create something, simple, useful, and fun. I am a huge believer in side projects, and there is one of mine in particular that has been in my mind for far too long. Peapods.com is the app that I wish existed when I first moved to San Francisco in 2012. The idea of an event-based social network is not new, but I do not believe any product has successfully executed a vision that unlocks its true potential yet. But before I started working on such an ambitious side project, I wanted to build something on a much smaller scale, to prototype the tech stack and practice shipping an actual service. …

About

Michael Staub

Engineer. Investor. Founder peapods.com

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store