One thing about your projects that never changes
Writing code is fun and even easy itself - you write some code and it works. Things are getting more complicated when you’re writing a huge app and as long as you enjoy building the project it’s not so bad. But sometimes you are angry, especially when it comes to rewriting some code or part of it. You’re really bad and writing the code for this app is not a fun anymore. You know why it may happen? Because you didn’t recognize the requirements on time or failed to do it right.
"Requirements are the things that you should discover before starting to build your product. Discovering the requirements during construction, or worse, when your client starts using your product, is so expensive and so inefficient, that we will assume that no right-thinking person would do it, and will not mention it again." - Suzanne and James Robertson
I’ve seen this quote on Martin Fowler’s blog and found it very interesting. That’s a fact - you should discover the requirements before start building your project, but is it possible to predict everything before you start writing the code? I don’t think so. The software development process is a never-ending story (at least it should be if you want to keep it alive) and thus planning every single unit that will (or will not?) be used in the future is IMHO not worth spending too much time on it. Of course - it’s obviously better when you know more about your project, but believe me - to save your time you should delay all the possible decisions as much as possible. If you do not need to decide now what to use or what to do - stop thinking about that. Keep it in your mind - it will come back and then you’ll be much better prepared to decide than at the beginning of the project. Of course, you have to make some decisions when starting up and double check these are the best ones. But instead of foretelling what can possibly happen next and what’s the plan for the next year - write the code carefully and make the decisions when it’s the final time to do that.