Recently, I have been thinking about these two opposing styles: the hacker style ---rapid prototyping and incremental improvement---, and the Dijkstra (academic?) style ---think hard and get it right the first time---.
Given a problem, the hacker style is to:
1. Suggest a partial solution
2. Improve solution,
add to solution to cover all cases
3. Repeat 2 as necessary.
In contrast the Dijkstra style is to:
1. Think hard to get the RIGHT solution
2. Justify that it is the right method,
if failed throw it away
3. Go to 1 as necessary
4. Build solution using the method.
The hacker style makes you get started and enables you to make steady progress. Even though the resultant system is not always an elegant solution, you are blessed with the advantage of predictability, and always having a more-or-less working product.
Dijkstra style prevents you to commit the sin of over-specialization and to settle with a complex or suboptimal solution when there is an elegant solution that also covers the general case of the problem. The downside is that you may not able to make any progress at all, since you are not to accept a mediocre solution.
I am sure the HN community has a lot of success stories and arguments supporting Hacker style over the Dijkstra style. I am wondering if you had any cases where the Dijkstra style saved you, and I am interested in hearing your arguments/anecdotes supporting the Dijkstra style over the Hacker style.