Chris Hiszpanski

home · github · grafana · haiku · resume · email (🔑)

Crafting vs Sculpting Software

October 12, 2021

Sculptors are different from painters. While painters start with a blank canvas to which they add, sculptors start with a block of clay or stone from which they subtract.

Software development similarly has additive and subtractive approaches, each with their challenges.

The additive approach has a purity and elegance to it, as most any green pasture does. It is first principles based — nothing gets added that isn’t needed. The developer’s mental model of the codebase grows with it, creating a comforting and empowering sense of understanding. Features are conceptually easier to add and bugs are easier to find. IP is created. Wheels are reinvented, with better integration into the whole. The project is a badge of honor and joy to engineer — code Tetris. It is a pain to keep on schedule. Barring a few dependencies, most everything is developed from scratch — there are no shoulders to stand on. This makes it often prohibitive for all but open-source efforts without deadlines and the largest companies.

The subtractive approach gets you started quickly. It starts with sample code, a template, a framework, a tutorial, a demo, an open-source project, or similar. It can be compelling when you’re under time pressure (most anyone working for a company) — get up and running in minutes! It looks impressive at first glance — so many lines of code committed so quickly, so much productivity! It also can help in getting through inefficient code review processes more quickly — the justification “{third-party | vendor | sample | SDK | framework} code” can serve as a tempting shortcut to reduce the scope of a code review, reducing the diff reviewers push back on. However, these gains are often short-lived. No one on the team has a mental model of the code or how is works. No IP is created. Bugs are more difficult to address, features more difficult to add. Developers hack fixes as best as they can in the time they are given. Stakeholders get frustrated by the deceleration of progress.

Sound familiar? Please share your stories of which approach has worked best for you.