Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

This leads to analysis paralysis. Building things helps you think clearer.


I’ve learned at Amazon that writing about what you want to build, and why, and why not do something else - in a way that others can clearly comprehend, and before ever touching a line of code - helps you think even more clearly.


While I disagree with this approach in general - manually executing a task and following the data flow is the best way to understand a new system - I will say that with the rise of LLMs, writing documentation, stubs and comments first may be the fastest way to bootstrap a new project.


Maybe it does for some people but based on all of the functional specifications I've implemented over the years, they are by far the exception. Maybe designing and documenting first is OK if it's done by people who've already learned how systems work by building and maintaining a lot of them, though.


The documents used in Amazon at that lifecycle stage aren't functional specifications. The point is to justify launching a few project to management. You should be able to clearly explain why it's worth expending resources.


I am interested, is there some public material about this method?



It's basically just writing a design document; Google has a similar culture.

I suppose if you're not actually showing it to anybody it becomes rubber ducking via design document.


It really doesn't, unless you've already implemented a variation of the thing before.

There is a time for reflection and planning/thinking about a given software problem, but you're mostly wasting time doing so in-depth before you've done/looked through a rudimentary implementation.

Your planned architecture will be worse then the one from the person that interated several times while introspecting the resulting code, discovering misconceptions on the way.

Do note that this initial implementation is only there to learn the domain of the software, basically.

The phase can be skipped if you're not really changing anything and mostly just reimplement something you've done before. At that point, you're not doing something new however.


> initial implementation is only there to learn the domain

I've been trying to do a kind of documentation-driven development, where I write a fairly detailed README file before I write a single line of code. It hasn't gone as smoothly as I imagined, I think it takes practice to get more effective - similar to test-driven dev. And it made me realize my usual approach is "to think by coding", and to explore the problem space with a rough draft of a program.

It must be a common approach, as I've heard people say "Throw away the first draft." Not only in programming but about writing in general. Ah, there's even a term for it:

Throwaway prototyping - https://en.wikipedia.org/wiki/Software_prototyping#Throwaway...


Designing does. Building and using it is for confirming or revoking any prior assumptions you had about the initial design to improve it.

Most of the thinking should be put into designing and then revising the design, the "building" should be the simplest part.


You don't have to save everything you build. Many times I've implemented a feature and felt unsatisfied with it, reverted, and built the same thing again.


You can build a ton of things and not put them in production (to then pay the price of what you built). Practice makes perfect then.


Not necessarily. You might end up just building things on top of things spiral which reduces the ability to think clearly.




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

Search: