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.