Hacker News new | past | comments | ask | show | jobs | submit login

Isn’t after too late though?



It's really hard to design code before it exists!

Once it's working, you know enormously more than when you started, and all you have to do is refactor the mediocre design you happened to build into something better, without breaking the functionality.

With good test suites and solid refactoring skills, that is actually both very doable and often a lot of fun!


Wish I could upvote more.

Similarly, I always like to say you should plan to write (at least) two versions/iterations of everything. The first one bottom up, to discover what problem you're solving, and the second top down, once you know the problem.


Or, as Fred Brooks wrote in "The Mythical Man Month" (1976): "plan to throw one away; you will, anyhow."[0]

[0] https://en.wikiquote.org/wiki/Fred_Brooks

[1] https://wiki.c2.com/?PlanToThrowOneAway


That’s great if you have the time for it but a bit impractical to write, architect, then refactor.


That is actually how Donald Knuth describes it in The Art of Computer Programming. The first program is merely written to understand the problem domain.


How have I never heard that?

Knuth continues to retroactively impress me!


I feel like architecture has almost nothing to do with the low level task of coding, and more to do with organizing the order of operations which stem from the business level requirements, and identifying the services that will be used. Architecture is also useful for documenting how things work in a system, and then passing that understanding to anyone that is interested in the future.




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: