You see, it doesn’t matter who you are developing for – yourself, your company, a client, a friend – as development of an application (or product, or relationship) continues, things change. The goals may not shift much, although often they come into clearer focus, it’s just that the human mind is a threaded beast. By that I mean if you start thinking about one thing, it leads you through various related subjects and eventually you land on something completely new. Let me give you an example:
I’m thinking about a banana. Mmmm, I like bananas. I like them best squashed in white crusty bread. Wow, crusty bread, that’s one of my favourite things in the world. I remember having some lovely crusty bread up a mountain in Andorra. It was baking hot, but I was dangling my feet in a clear, cool lake. I love mountain lakes.
From bananas to mountain lakes in one train of thought. A strange example, you may think, but how much different is that from this:
I’m really pleased with the uploading functionality, it works great and people are using it. But I want to make it a bit more open, so that I can store documents from around the system all in the same place. We’ll then be able to search through all documents, no matter where they have been added or what they are attached to. That would be cool – we could add some download statistics as well. And how about a viewer to be able to preview image files? Yep, and let’s make a general all-purpose document storage area called ‘The Store’ where people can store any documents they want. But they’ll have to be stored in categories. And tagged.
Yes, that is a real example from a piece of software I’m currently developing. And who is the client? Why, I am. That whole train of thought happened in a split second, and I found myself saying “Yes! Let’s do it!” to everything. Bad idea. Scope creep slays another victim. Before I knew it, that split-second thought-thread had turned into weeks of development and I was wishing I had left everything as it was.
However, some wise people think scope creep is not just inevitable, but necessary. I’m not sure I agree with them. After all, scope creep is (generally) about adding to an existing requirements set, not tweaking the requests to give them better clarity. I’m all for incremental changes as development progresses; an inflexible developer is an out-of-work developer. But that isn’t the same as saying ‘yes’ to everything.
So learn to say ‘no’. At the very least learn to say ‘not yet’, or ‘we’ll think about it’. If not, you’ll be storing up plenty of trouble for the future.