Suffering-oriented Programming

This excellent article by Nathan Marz from 2012 articulates one of my most important programming practices. Choice quotes:

When encountering a problem domain with which you’re unfamiliar, it’s a mistake to try to build a “general” or “extensible” solution right off the bat. You just don’t understand the problem domain well enough to anticipate what your needs will be in the future. You’ll make things generic that needn’t be, adding complexity and wasting time.

I bet you’ve encountered this in your career, right? Martin Fowler calls it YAGNI (You Ain’t Gonna Need It).

Suffering-oriented programming rejects that you can effectively anticipate needs you don’t currently have. It recognizes that attempts to make things generic without a deep understanding of the problem domain will lead to complexity and waste. Designs must always be driven by real, tangible use cases.

Highly recommended reading if you’re finding yourself committing one of the highest sins of programming at a startup: wasting time.

Image taken from Martin Fowler.


Little-known fact about 37signals

From Bootstrappers Paradox:

It wasn’t without temptation or struggle to stay like this. Especially in the early years, before our bombastic views on venture capital, the IPO rat-race, and other ills of funding were known. We had, I think, close to 50 different VCs get in contact.

Ironically, part of what did give us the confidence to turn down that whole world was a small sale of equity to Jeff Bezos. That gave our personal bank accounts just enough ballast that the big numbers touted by VCs and acquisition hunters lost their lure.

37signals, the poster child of the bootstrapped world, took investment two years after they launched the product.

Jason and David were able to hedge their bets. That Bezos investment removed a lot of the stress and risk that comes from bootstrapping a product.