←back to thread

873 points belter | 4 comments | | HN request time: 0.332s | source
1. donatj ◴[] No.42948747[source]
> Most programming should be done long before a single line of code is written

This is the only point I strongly disagree with. I have been doing this for twenty years now and every time we've gone into something with a STRONG plan for how it's going to be built, it's ended up an inflexible nightmare when we inevitably end up having to work around things that were not considered in the design phase.

The plan always ends up bumping into unforeseen realities, and you end up with sunk cost around the planning so instead of pivoting you keep on suboptimal course.

You can spend months planning the smallest feature and there will always be something you did not consider.

Rapid prototyping in my experience is the way. Throw something together that works, see how it can be improved, don't be afraid to throw the entire thing out.

replies(3): >>42948976 #>>42949171 #>>42949782 #
2. cardanome ◴[] No.42948976[source]
I feel like exploratory and iterative development is more necessary when requirements are unclear or when there is a lack of domain knowledge. Also obviously things like game dev require an iterative style.

For backend web dev though, I can plan it all in advance. I have done it enough times that there are rarely any surprises and I know the pitfalls. I am really just limited by customers not knowing their own requirements.

I really love the iterative style but the problem is that I never worked in a company that allowed for enough time for large scale refactors. They might promise you that but it will never happen. You have to get it right the first time around or you will have to suffer until the system gets rewritten in a decade or two.

Of course plans can absolutely be too rigid but I generally found that more planning results in better products.

3. nicce ◴[] No.42949171[source]
I would say it depends on your domain expertise and the expertise of the chosen programming language. Of course, for very large projects with multiple unknown integrations this is not the case.

But if you are an expert in both of domain and the technology itself, you can well design it before starting the coding, because you already know the technical issues you are likely facing.

At least I have personally managed to design some projects and implement them without any design changes. But I also read countless blog posts about the limitations of these programming languages every day.

4. bluGill ◴[] No.42949782[source]
There needs to be a balance of course, but eventually you will have code/interfaces that are too painful to change because of all the users. The more core code is the more painful it will be to change and so the more a well thought out strong design is needed. The less core the code is, the less strong the design needs to be - but often the code code will force some design on you.

Of course there will always be something you didn't consider.