Software Development is an Heuristic Process

Having read an article from Santiago Ceria in his company blog, it came to my mind something I read before in Steven C. McConnell‘s excellent book “Code Complete, 2nd Edition“: sumarizing, for each job, the right set of tools and techniques.
From its 5th chapter (sample chapter on PDF, on it’s site):

Design Is a Heuristic Process
Because design is nondeterministic, design techniques tend to be heuristics—“rules of
thumb” or “things to try that sometimes work”—rather than repeatable processes that
are guaranteed to produce predictable results. Design involves trial and error. A
design tool or technique that worked well on one job or on one aspect of a job might
not work as well on the next project. No tool is right for everything.

This was also something that Daniel Alonso always tried to make us understand, on his Software Design course, at University, with different Design Approaches for different solutions, and Lateral Thinking.

This also applies to Methodologies, as Santiago states.

In my understanding, the whole Software Development Process is an Heuristic process.

This are just some thoughts, I truly recommend reading Code Complete, that not only involves Coding, but the whole Software Development Process.

Hopefully, you are open enough and professionally involved so that you don´t tie yourself to only one or a few.