Monthly Archives: February 2021

Enabling small software teams

A fundamental way in which the software industry differs from other industries is that, by leveraging open source, occasionally someone builds a software stack that allows a single person, or a small team, with limited knowledge, to build something commercially useful.

Here are two examples.

  • Ruby on Rails in the mid-2000s looked like magic.  Suddenly a single person, knowing a bit of Ruby but no SQL or HTML, could build a functioning database-backed website in a few hours or even minutes.  It did this through code generation and some simplifying assumptions about what the creator wanted to build.  It had limitations on performance and flexibility, but those very features enabled skeleton teams with limited programming chops to build large businesses by launching on Rails.  Canonical example: Twitter
  • In the 2010s, the best analog might be Node.js and similar JavaScript engines.  Suddenly you could build a whole application, front to back, including sophisticated client-side behavior, knowing only a single language.

The benefit of small teams is to minimize coordination issues, allowing extreme agility, and thereby faster innovation.  But the typical barrier to small teams is the fixed cost to learn multiple software stacks;  it’s rare to find one or two people that understand disparate enabling tech well enough to build a complete commercial solution.

The solution to that is to make a few simplifying assumptions about what people want to build, and then consolidate everything needed to build those things into a single language or framework.

Over time, the magic of these consolidated platforms ebbs.  To build a commercial Rails app today, you need to know a whole pile of non-Ruby stuff.  Presumably it’s the same with Node.js, though I haven’t worked with it.

What will the next consolidated platform be?