In today’s post I want to talk about topic, that is not 100% technical, so I encourage to read it not only by programmers.
When you start doing a new project, you want to do it quickly. After all, time is money. But not everyone knows how to do project quickly.
How NOT to do
When I was a beginner in programming everything was clear and simple: I start making a first feature, I try to do it as quickly as I can, and then start a next feature. I don’t waste time for improve something, that works. I don’t waste time for keeping a clean code.
With this mindset at the beginning of project a progress in work is very noticeable. But problem is, that every new features is somewhat connected with these, that was written previously. If we have left a mess in code, now we need to work in this mess.
We add new features, project grows, it is more and more complicated. We start to get lost. It is easy to remember what code written yesterday do, but after couple of months you start to forget. We spent more and more time to understanding code written earlier. It happens more and more, that while we are making new feature, we broke old one (because we aren’t aware how some thinks works).
At the beginning of project work progresses fast, but after this it only slows down.

How to do
1st: thinking about future
Programmers must know about project everything they can: what it is supposed to do, how it will be used, what features are foreseen for future upgrowth. While writing code, programmers should think about what will write in future.
But you could ask: is this against an Agile? I anwear: no. An Agile implies, that reacting on changes is more important, that sticking to the plan, but it doesn’t imply, that you should work without any plan. Working with Agile you shouldn’t think about how software will work, but why.
2nd: no hurry
Developers shouldn’t be hustled. Hurry can speed up current part of project, but will make you problems in the long run. It even has it’s own name: technical debt – because it is like taking a load: now you have more money (working features), but in future you will need to pay interests.
But obviously there is a problem: how can client (that is not a programmer) can see, if developer work slowly because he work carefully, or if he is lazy? It is even bigger problem, when client pays to a software house hourly rate (because in this scenario faster = cheaper). In this scenario client could supervise developers, which implies hustling, what makes whole project made slower, so more expensive. Alternative approach is to trust software house, but then there is risk, that workers will spend payd hours on facebook (this is my personal experience, and I have to mention, that although I tried to be honest in registering work hours, it is hard to focus when I see on screen next to me scrolling of memes) and in worse scenario cheating in calculating work-hours (I worked in company that do that).
Personally I don’t see better solution that to avoid contracts, in which client pays developer for hours.
3rd: refactoring
You need to carry about quality of source code, by making refactorization on a regular basis. What can be seen as a waste of time, in big projects it is really a good idea. And i want to note words “on a regular basis”. If you start refactorization after years, you can find problems, that are no longer solvable.
4th: experience
To make big project you need experienced programmer (at least one in team). Freshman (junior developer) even if want to write clean code prepared for future development, will not know how to do this.
Beginner programmer can quickly learn how to do something, that work (he always has access to uncle Google), but only an experienced one knows how not to make troubles for future (if client/boss allows it – see previous points).
Summary
When I write this text I have over 5 years in commercial programming experience (I don’t include hobbyist programing). When I have been working, I allways tried to think how to optimize my work, bot most of people I met don’t think this way. Most of people assume, that hour of work of developer is hour of work of developer and that’s about it.
The longer I work in the industry, the more I realize, how bad this approach is. In this moment I work in project, which already took 15 000 work-hours. I think, it could take 1500-2000 work-hours, if it was done as it should be from the beginning. But in this moment there is nothing you can do to stop wasting time and money, other that leaving project.
So before starting next big project, think about organization of work, to avoid wasting tens of thousands dollars.
