I remember when I was a sucker…
I recently watched this exact cycle. Don’t repeat it yourself.
1. Hmm, this product is exciting. It would be so great if it did X. Add that.
2. Oh, man this isn’t working. Let’s put a button for Y there.
3. People don’t seem to know they can do Z. Ok add that.
4. Repeat.
That’s featurecreep. We ended up with a festooned christmas tree of features.
Next:
1. Oh you are having this performance problem? Well you have to understand that you are not a typical user. My account works just fine.
2. Oh you are having it on your new accounts too? Look we can’t spend all our time debugging your account. Just delete that test account.
3. Ah, I see the problem now. It’s all this spaghetti code. We are going to refactor it and the new approach will be really awesome.
4. It’s getting worse? We aren’t done re-factoring yet, we are actually only halfway through. Give us some time so we can do it properly please. Enough of this hacking.
5. Oh darn, this package in our new design is buggy. Hang on.
6. Oh! Wow! You made a simple change and it totally fixed the speed issue. OK, back to finishing that re-factoring…
This is the second-system problem (see Mythical Man Month). You want to do it all perfect this time so you never ship.
Third:
1. Why do we need all this complexity in our development process? Let’s simplify it!
2….
Ah forget it. It’s too painful to go back through one’s own mistakes. Just accept that you should have dev, QA, staging, and production environments or some facsimile thereof since different people touch stuff –> devs, testers, time itself, and end-users. So for each actor you have an environment.