At Pioneer Square Labs, we frequently set up fresh software stacks for new startup companies. This rapid iteration gives us the opportunity to choose the best technology solution for a given prototype, experiment, or MVP. We have the freedom to try new stuff, but we don’t want to choose anything unproven, with too many sharp edges, or that will make it hard to hire engineers.
Of course, we also want the CTO, who may join before or shortly after we start building, to be able to override our decisions. In that vein, a modular architecture is ideal so the CTO can re-build the machine in flight if necessary. For that reason (and because any platform will have pros and cons), delivering a thoughtful software architecture is more important than the particular platform or language. As Ryan Kosai, CTO at Attunely says - “Code is temporary but architecture is forever.”
That having been said, I did a quick check in with the companies in our portfolio to see how their stacks have evolved since they were spun out. Some of the companies are also investments by our venture arm, PSL Ventures, who chose their own architecture. 20 companies responded, spanning from pre-seed to post-Series A, with most on the earlier side.
The majority of the businesses are B2B SaaS web products, but there are some consumer products as well, and many include data pipelines. Here are my observations of the stacks startups they are using in January 2020 based on their responses.
1/ React.js is clearly winning the front-end. Greater than 90% of the companies that responded to my survey are using React. I have theories on why React is great. I think simplified data flow and composability are the primary reasons. React makes it explicit in code that UI is a function of state, which is powerful.
2/ PostgreSQL is the winner for database systems. While schemaless NoSQL is a tempting choice for a startup, at this point - everyone has made that mistake once and come back to tried and true (and rock solid) relational databases. PostgresSQL wins on a well known API, reliability, and a powerful feature set.
Relational databases aren’t the best choice for every scenario, obviously - and there are lots of great options. Others technologies mentioned in this category that companies are using:
3/ There’s still heterogeneity in back end stacks. Django and other Python frameworks are in the lead (8 of the 20 companies), with Node 2nd (4 companies) and Rails 3rd (3 companies).
I would not say that we have a plethora of choices deployed here, thankfully. I do sense a tension between the power and simplicity of a monolithic web stack deployed to a single server, and a microservice approach - likely using a serverless architecture. A monolithic software project (Django or Rails) has simpler code semantics, tighter dependencies, and easier testability. A serverless architecture (Node Lambda functions) has simpler deployment and scaling.
This immediately feels like an oversimplification since you can easily deploy a monolithic app as a microservice using Heroku, or have an entire application behind one Lambda endpoint. That flexibility is partly why my advice to a CTO is just "choose what you know best.”
Lastly, hireability is cited often. Python and Javascript are perceived as more hireable and more broadly known - at least in Seattle startup circles. So, design for the future, use what lets you go fast, and choose something future hires will want to work with.
4/ Hosting is dominated by AWS (9 responding companies are hosted on AWS), followed by Heroku (6 companies). Based on our experience, AWS is most frequently used by Seattle startups, we’ve made an institutional choice to start our companies with their cloud offering. The startup credits Amazon has offered for years have certainly helped here. We’re largely designing using EC2, Lambda Functions, and some Elastic Beanstalk. It would be relatively difficult for a team to move off of AWS, which may explain why so many of the startups are still using it.
I love Heroku because it enforces scalable architectural patterns, while making deployment super easy. One surefire way to ensure that a future CTO tears their hair out is to hand them a complex deployment or devops story when none is required.
We’ve tried Elastic Beanstalk a couple of times as an Heroku replacement (and some companies are still utilizing it), but I would say the experience has been unsatisfying. Slow deploy times, more complicated than Heroku, and Elastic Beanstalk receives less love from Amazon than their container-based solutions.
One final note: We’re keeping a close eye on TypeScript, as we’re hearing lots of buzz about it in the community. I know, I know, it’s not like we’re on the bleeding edge - that’s not the goal and we’ll cover that in a future post.