Skip to main content

What is technical debt?

Software engineers are very often pushed to implement solution which consumes less effort instead of the right one (clean and well designed). It is short term thinking: now we do it 'quick & dirty' and maybe later we will make proper way, which usually never happens.

Common reasons for this decision are: time to market, nervous customers, release deadline, it is 'mess anyway' or manager's bonus for 'green' excel.

The final result of all these quick hacks and dirty workarounds are accumulated in technical debt, which we would have to pay to make it right.

Critical amount of technical debt is illuminated by classic symptoms:
  • maintainability is very low
  • factoring of code is awful (spaghetti)
  • ownership of code does not exists
  • unit tests are just fake or joke
  • static code analysis is rather turned off
  • CI is unstable and very slow (CD is only dream)
  • adding new features is very time consuming 
  • estimations are just guess from magic ball
  • architecture decisions are not documented
  • number of defects is very high 
  • developers are frustrated
  • managers are ignoring reality
  • customers are unhappy

But not only dirty hacking is cause of technical debt. It is maybe surprise but also doing nothing increasing it: new version of library or framework was released and we did not upgraded to it, our partner provided better service and we did not adjusted to it ...

When we are doing decision which could lead into increasing of technical debt it is necessary to take it into account.

From my perspective it is very important to really control technical debt. This should be strategic decision from C-level followed by middle management and developers. Ignoring it is highway to developer's hell where we are not able to maintain and develop the product anymore.

Comments

Popular posts from this blog

Senior or Junior

Usually companies call young employees Juniors and more experienced Seniors. Sometimes you need to just sit and wait and it will come. Sooner or later. From my point of view it is not enough. I met a lot of old employees they call themselves Seniors but they behave like Juniors. So I defined my point of view on Seniority: professional simple understand what I am doing and understand reason why I am doing it can coach others this is very basic; who can coach others is just fine but who can coach others to became a new coaches is super not genius but have deep knowledge on some specialized parts geniality is overestimated, we do not need "magical guru", to be expert is good enough; if you are "one to go" when there is problem, it is OK big picture overview it is not probably possible to understand a whole system in details but it is necessary to have at least overview know what I know and know what I do not know to see myself in correct light is very

Software Engineer

Recently my company expanded the Software Engineer positions in my team. This leads me to thinking about the skills which are necessary for these positions. So I prepared a list of qualities which I think are important for a good Software Engineer. Abstract concept modelling This is essential and there is no room for discussion on this because this is what we do. Love to code It does not matter if you are 15 or 50 or if you write code 10% or 90% of your time, code writing is crucial. Team player The surgeon style teams (one genius with helpers) are obsolete, I prefer real team players who are able to work towards a common goal and share responsibilities. Communicative Silent geeks siting in the corner with a notebook on their knees are not cool any more, we need to talk to each other, we need to be able explain technical stuff to non technical managers, we need to be able to choose the right phrase at the right time. Take responsibility There is no quali

Anti-Lean Quotes

Set of quotes which usually highlights Anti-Lean behavior Create waste instead of Eliminate waste ' Developer who is not working at least on 4 projects is not properly utilized ' - less is definitely more and only done-done work counts by end of the day, limited work in progress is helping to focus on right priorities ' In case of any network issues please create a ticket on the help desk system at our partner's web-page' - creating catch 22 situations by design is craziness, such a process does not make any sense 'Yes, this is what our customers really need but could we add also this small feature, just in the case?' - extra feature creates an extra complexity, it is better to stay focused on real value and make it great for the users ' I know that you are working on the top priority but I am sure that you can do also this small task till noon' - probably there will be nothing really done by noon, task switching is more expensiv

Scrum rollout

Would you like to start with Scrum in your team? These are few hints from my experience how to make this process smooth, iterative & incremental: get commitment from the management & team define reason: why would you like to do Scrum? what problems it should solve for you? start with simple Kanban in one team: it is easier, you just need to manage 3 lists: backlog (todo), work in progress and done  focus on right priorities of backlog - person who defines the priorities will be 'product owner' setup quick way how to track work in progress and indicate 'impediments' -> daily stand-up; max 15 minutes meeting every day - moderator of the meeting will be 'scrum master', he will be also responsible for solving the 'impediments' focus on dependencies between the tasks to avoid 'impediments' start to put 'discoveries' into the backlog to pre-analyze tasks; discoveries should be done by architect or analyst what is the busi

Agile is not a religion

It is quite annoying to me when argument during discussion is like this:  it must be XY because the book says it. It is kind of: Bible is saying XY so we have to follow = end of discussion.  I am not very happy in such a case because we probably do not understand principles and just trying to blindly imitate something without deep knowledge of the matter. I prefer to admit it or show personal standpoint.