Go back to the articles list

Stop shipping prototypes

crea: 23/04/2026 / upd: 17/05/2026

stop shipping prototypes

developer build feature

developer think:

architecture good
abstraction smart
future-proof system

developer wrong.

first version of feature almost always prototype.

not because developer stupid.

because developer not know problem yet.

cannot design correct system before discovering real system.


first implementation is discovery

before writing code:

developer think system simple.

then implementation begin.

suddenly:

this normal.

first implementation not failure.

first implementation purpose is learning.

prototype produce knowledge.


prototype code and production code not same thing

prototype code optimize for:

production code optimize for:

these goals conflict.

problem happen when team pretend prototype code already production architecture.


shipping prototype forever

this where suffering start.

team say:

we clean later

later never come.

then:

codebase become fossilized prototype.

pile of preserved assumptions.


second pass is where real architecture appear

after first implementation:

now developer finally understand problem.

this often moment where feature/module/service should be rebuilt properly.

not entire project.

small targeted rewrite.

local reconstruction using real knowledge instead of guesses.


rewrite not failure

many developers hear "rewrite" and panic.

because giant rewrites usually disaster.

correct.

rewriting entire system from scratch because engineer bored is stupid.

but refusing to rewrite obviously exploratory code also stupid.

small rewrite after learning often cheaper than years of incremental patching.

first implementation teach what second implementation should have been.


smart developer

smart developer not person who write perfect architecture first try.

smart developer know:

smart developer recognize prototype when they see it.

and know when it time stop patching it.


first code solve mystery
second code solve problem