¹ For example, here: http://blog.codinghorror.com/revisiting-the-facts-and-fallac...
¹ For example, here: http://blog.codinghorror.com/revisiting-the-facts-and-fallac...
Hmm, doesn't this conflict with the idea of "rapid prototyping", where new requirements are thrown in whenever necessary?
But instead, if there are big red Xs and so on in the UI, then it becomes clear "oh this is a prototype/demo/".
I disagree with that conclusion. Prototypes help in both clarifying requirements as well as eliciting requirements. However, for the latter, a prototype may be necessary but not sufficient.
Only a half joke, too: it's easier to critique and improve something concrete, even if it's objectively rubbish, than to go from 0 to 100% from just abstract discussion.
They will also avoid allocating time/resources to fix modules that are known to carry significant technical debt. Only until said technical debt begins to cause severe problems any official attempt to address the issue will be done.
In the mean time, savvy senior engineers will fight a guerrilla war to keep technical debt at bay. They will require, incremental improvements to be carried out in parallel with bug fixes and new feature development, typically whenever you touch a file/function known to be in a bad shape. This is more or less OK, but can result in an irrational fear in the team to change stuff for any non-essential reason, eventually defeating its own purpose.
At the end, I always assume that whatever code, no matter how crappy, I get to commit into the source control system, will eventually find its way to our customer's machines. No matter what claims of temporarility are made by people, if it gets out of your localhost, it will be promoted to officialdom in no time.
Then we had a calm discussion about how long it would take to productize it (usually weeks or a couple of months). It might not seem like that big of a coup but attempting to ship 2x as much as you actually can is a sure way to be absolutely miserable by version 2.1 or 2.2 of the product.
Maybe it is possible to marshal user expectations by carefully controlling how much of the GUI is produced. Not make any pages/windows until the underlying business logic is production ready... it's a wild guess, but might work
* Having small, self-contained, loosely-coupled modules.
* Having an extensive test suite for each module.
* Having small (or zero) amount of technical debt.
* Talking to your customers constantly, preferably before you commit a lot of resources into a new development.
Easier said than done, but definitely not impossible.
"COBOL is a very bad language, but all the others are so much worse."