To start anything, we should have a plan. And to execute the plan, we should have a system in place. However, sometimes we start with a plan but we find ourselves in a mess after a while. This mess happens not because our plan was bad, it was because we did not have a system in place that could have helped in easy execution of the tasks.
The same is true with software engineering or working on a research project. For example, suppose we want to work in an area and want to publish something. We create a plan, that includes reading several papers, experimenting with the idea, changing it and coming up with a new idea, experimenting with it and then publishing the good results. The plan is fantastic, but the ground reality is that it will almost always never work unless we have figured out a system to execute is easy. Here, the system would be to gain enough knowledge before reading a paper, setting up the code base where we want to experiment, determining our criteria of a “good” result, and figuring out a met