When starting to work on a new project, developers tend to jump straight into programming. And that’s ok — it’s their job after all. But sometimes it might be good idea to jump on the breaks and start with some software designing.
This is the beginning of the article, and I couldn’t agree more with it! Too often software developers start working on a project without thinking about the big picture first, and that always causes problems in a later stage of the software (e.g. major rewrites, not scalable enough, not extensible enough etc).
Probably you have thought multiple times that Slack or Uber or many other apps are very easy to rebuild, and you could do it too in much less time, but as soon as you start working on it you’ll find a lot of problems that you haven’t thought about. If you want to test yourself, try rebuilding some open source projects, like Redis or ElasticSearch, and then compare your features and performance with them, and you’ll find it to be not as easy as you thought, even though you had the full open source code available at your disposal to check.
In this article the author focus on the following topics that you need to think about your software design.
All of these (and many more, but this is a good basis) needs to be thought before you start writing a single line of code, and that will help you understand the complexity of the project that you are going to start, for yourself or even for a client.