Since over the conference I overheard several people regretting to have missed the panel (or couldn't get a space), I decided to rework my notes and summarize the most interesting points in the following post. Enjoy!
On the panel: Ipek Ozkaya, Barry Boehm, Alexandra Szynkarski, Judith Bishop, Phillipe Kruchten, Pradeep Kathail
Moderation: Steven Fraser
In the audience: a balanced mix of participants from academia and industry.
What is Technical Debt?
Many questions touched upon the definition of technical debt, which seems to be a straightforward metaphor, yet elusive (maybe another thing it has in common with real debt?). So how should one determine whether something is "just" bad quality or "real" technical debt?Phillipe Kruchten: Technical Debt is not referring to externally visible defects, that's bad quality. Technical Debt is the internal bad quality that slows down the development, not in the face of the customers, but the developers. There are also Technical Debt aspects unrelated to quality, e.g. a "technological gap", technological decisions that turned out bad in retrospective. Maintainability and Evolvability sort of capture Technical Debt. Technical Debt is also different from "things not yet done". Technical Debt occurs when, for getting things done, you start taking bad shortcuts.
Ipek Ozkaya: There is a lot of confusion about Technical Debt. If it is Technical Debt: tell when you will pay it back.
Can Technical Debt be avoided in practice? And how should one ideally proceed when faced with Technical Debt?
Ipek Ozkaya: Sometimes short-time decisions need to be made: track those (which is not happening currently), to make conscious what is happening. Separate Technical Debt from defects and other development tasks that are happening. Improving the visibility of Technical Debt might be really helpful.
Barry Boehm: Parnas on designing software for extensibility: encapsulate sources of change into modules, to avoid Technical Debt
Does Technical Debt materialize itself in code?
It would be practical to have structural measures that correspond with Technical Debt. However, only certain aspects of Technical Debt manifest themselves in the source code. Others are less probable to be detected on the code level.Phillipe Kruchten: Propellation is one of the indicators proposed: When you do changes in one part, what are the effects on other parts? Another metric, proposed on the workshop is betweenness centrality. SIG and others have their own proprietary metric. There are various static analyses, detecting smells.. it is still work in progress and needs to be validated.
Ipek Ozkaya: However, the measurement doesn't necessarily indicate the source of Technical Debt.
Alexandra Szynkarski: We measure changes between snapshots, complexity etc...
How should you (economically) quantify the negative value of Technical Debt for decision makers?
Ipek Ozkaya: If it gets to the decision level, Technical Debt is already causing problems that defect the business value. It therefore has economic consequences that can be communicated. It might even be fine to not touch it; think of the impact on business goals.
Alexandra Szynkarski: Match the message to the audience, managers like $$. Map Technical Debt to the quality goals that are hampered by it.
Phillipe Kruchten: Quantifying Technical Debt is hard, as for other aspects of SE. What is the value of software architecture? Why should we pay expensive people to do that? We know what the cost is, but the value is invisible to the users... another instance of same problem with Technical Debt.
How should Technical Debt be addressed?
The current effort-time dynamic seems to restrict the possibility to remove Technical Debt: development moving to regular release cycles leave little opportunity to adjust the effort dimension. Feature content has impact on release quality.Phillipe Kruchten: In practice, Technical Debt cannot be tackled in isolation due to fixed resources. We need to find balance between bringing new features, fixing externally visible defects, and reducing internal Technical Debt. The question is: How much Technical Debt (and which) do I need to fix to keep new features and bug fixing at a good pace? Technical Debt needs to be kept visible! Developers usually know about it, but it is not propagated up to decision makers.
Judith Bishop: The software world is intensely competitive, keep this in mind! It is necessary to keep features coming to stay alive... figure out if you can afford fixing Technical Debt.
Pradeep Kathail: The industry has accumulated a lot of Technical Debt to enable customers and it sometimes is the right thing to do if it is well understood. The biggest problem is that Technical Debt is not documented. It is difficult at higher hierarchies to plan for Technical Debt fixes. Maybe dedicate one release for removal of Technical Debt can work better.
Ipek Ozkaya: Different measures might be adequate for different Technical Debt items (check Cisco's Technical Debt workshop contribution).
Phillipe Kruchten: There are different strategies for addressing Technical Debt: It is like changing the carpet of this room by sending everyone outside in a coffee break, or changing it row by row, trying to keep the panel running...
A lot of Technical Debt is accumulated in historically grown systems. How should one foster the mindset of individual business units without the immediate benefit being visible?
Pradeep Kathail: At Cisco, many different business units were mucking around the code base, slowing down the company. We figured out what was important to the business units and for the company. The conlusion was: Our goal is to satisfy the customers, cleaning up will help to fulfill this goal better!
Phillipe Kruchten: So far, the focus is on Technical Debt in code, but Technical Debt lies also in the context: the way of building the code, the mindset of people, on the tool level... (connects to social debt?)
Ipek Ozkaya: You can find one instance of this problem in the workshop proceedings: What happens when one team created Technical Debt and another one needs to pay it back? The same problem occurs in product lines: Who pays for the globally created assets?
How do we develop good strategies to partition different Technical Debt and address them accordingly?
Phillipe Kruchten: There are two big blocks: on the code level, Technical Debt can be assessed and drawn out; its presence is usually known. On the other extreme, Technical Debt can occur in the architecture, the technology choices.. This type of is not evident, you might be unaware of it and the interest is unknown; a fact, which breaks the metaphor of debt. A lot depends on what we want to do in the future...
Ipek Ozkaya: With explicit Technical Debt, it is rather easy to make a plan. Implicit Technical Debt needs to be traced down to the origin. Track down what is going on, then devise alternatives to go forward.
Pradeep Kathail: Generally plan for 2,5 times of project time.. a lot of Technical Debt only gets visible when system ships! (Brooks: plan to throw one away, you will anyhow... Mythical Man Month)
Barry Boehm: Beware of one-size-fits-all solutions! A deep contextual understanding is required to make a good decision. (Example: merger between different companies, which entails unifying the respective IT structures. It could not be decided which solution to switch to on a company-wide scale. Instead, decisions had to be taken on a project or division level.)
We looked at many organizations that measure Technical Debt for customers. Nasa has a target team that makes sure Technical Debt is tackled.
Pradeep Kathail: Processes are great, but in industry balance is needed between Technical Debt and speed. We need to find out how to transfer processes without slowing down too much.
Phillipe Kruchten: Some Technical Debt can be completely removed with tools, but other things of Technical Debt (dependent on future) can not be removed with processes.
Barry Boehm: ESA incentivizes contractors on downtime, social motivation to keep Technical Debt down.
What about Technical Capital?
Modern software ecosystem provides enormous technical capital. How does this impact Technical Debt?Phillipe Kruchten: open source software helps to provide value rapidly. Technical Debt as investment a company does, community has not yet really looked into technical capital.
Thanks, Felienne, for your helpful feedback on the post!