TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

Towards an understanding of technical debt

54 点作者 inglesp超过 9 年前

13 条评论

arethuza超过 9 年前
&quot;Hence the paradox: how is it that a team of brilliant senior engineers need 6 months to clean up after that one early programmer’s weekend kludge job?&quot;<p>I don&#x27;t think things happen quite like that - what I have seen happen is that a &quot;weekend kludge job&quot; becomes the foundation for a lot of subsequent work and the &quot;kludge job&quot; sets the so after a year you can have a vital production system that has been extended and &quot;improved&quot; in a completely ad-hoc fashion and it&#x27;s that that takes a lot of effort to reverse engineer and structure properly.<p>In my experience it is <i>really</i> difficult to raise the quality level on a project once it gets going - thing generally only get worse as external things start to impact (timescales, scope creep etc.). The only way things seem to keep high quality is to consciously start high and fight to keep standards high - which can be pretty difficult.
nmalaguti超过 9 年前
I see technical debt differently. Technical debt is something you take on in exchange for moving faster. Maybe you skipped writing unit tests. Maybe you didn&#x27;t respond to all the style feedback, or even do a code review. But at the time you make the choice, you should know that you&#x27;re borrowing time from your future self in order to move faster now.<p>Like real life monetary debt, technical debt has 2 aspects: the principle and the interest. Sometimes the interest ends up being variable rate and backbreaking for your project - you should have written those tests up front and saved yourself a lot of time. Sometimes the whole project dies before you pay back the debt - you go bankrupt but it&#x27;s no big deal, your creditors are friendly. In either case, the principle usually isn&#x27;t smaller when you go to address it. You&#x27;re just delaying payment in favor of speed.<p>What the original artical addresses are several aspects that I might call &quot;technical assets&quot; that have depreciated significantly. That kludge, if it wasn&#x27;t done intentionally, isn&#x27;t debt - it&#x27;s now an asset. If you didn&#x27;t have a plan to pay it off in the future, you&#x27;ve already bought it and now you need to replace it. And the replacement is very expensive. That is a technical investment you&#x27;re deciding to make. You aren&#x27;t just paying off debt at that point, it&#x27;s a whole new capital expense.
dccoolgai超过 9 年前
As en engineer I understand and agree with what the author is saying: technical debt is a loaded term and it feels wrong to throw it around liberally to cover things that should have discrete and distinct meanings. However: the term &quot;technical debt&quot; is not for engineer-to-engineer communication: it is for communicating to management and other non-technical actors - and in that role the term perfectly suits its purpose.<p>To understand why, let&#x27;s consider a normal interaction with a corporate legal team. The content team submits some copy to the legal team for approval and the legal team needs to communicate to the content team that they can&#x27;t make the claim they are trying to make about the product. Now, it&#x27;s more true in the technical sense for legal to say things like &quot;Section 3 paragraph 7 of the Fair Sales Act states that Consumer Entities as defined in Section 1 Paragraph 3 may not represent their products in such a way as to potentially mislead a Purchaser as defined in Section 2 paragaph 9. Furthermore this issue has been thoroughly litigated at both the federal appellate and Supreme Court levels which have reinforced those interpretations unfavorable to the aforementioned Consumer Entity.&quot; But that wouldn&#x27;t be great for either department. It&#x27;s more useful for Legal to just say &quot;You can&#x27;t claim that - we&#x27;ll get sued.&quot; In a similar way, it&#x27;s more useful as a software engineer to just say &quot;that decision will add to our technical debt&quot; than to try and discuss the minutiae of how a certain bad architecture decision will make the system &quot;resistant to change&quot;. As a fellow engineer, I&#x27;d rather have the latter conversation with you and the one about &quot;technical debt&quot; with my business manager.
ejk314超过 9 年前
I feel like this post misses the point of the whole &quot;technical debt&quot; analogy. They way the author talks, it seams like their org. uses it as a catch-all term for complaining about the code base. But that&#x27;s never been the point of the term.<p>&quot;Technical debt&quot; is the justification for process and development decisions that require more time up-front but will save time in the long run (especially as a term to communicate this to non-technical management). It only comes into play when you&#x27;re talking relatively about two or more different choices.<p>Just as an example: when deciding to move ahead with less testing or to move more slowly and write unit tests for every function, you should consider the first to come with more technical debt. That doesn&#x27;t mean it&#x27;s the wrong decision, it just means that it should be a factor in your thought process.
评论 #10894216 未加载
rubidium超过 9 年前
There&#x27;s a lot of ways to parse technical debt. The simplest one I&#x27;ve found, while it has its shortcomings, is this from a Deloitte article:<p>They state, in general, it costs $3.61 technical debt &#x2F; line of code.<p>&quot;Technical debt is a way to understand the cost of code quality and the impacts of architectural issues. For IT to help drive business innovation, managing technical debt is a necessity. Legacy systems can constrain growth because they may not scale; because they may not be extensible into new scenarios like mobile or analytics; or because underlying performance and reliability issues may put the business at risk.&quot; (Tech Trends 2014, Deloitte University Press).<p>It&#x27;s an easy to use metric to weigh the cost of supporting programs, and relatively simple for managers to understand. It has the added benefit of encouraging reducing the size of the code-base when possible.
评论 #10895228 未加载
philbo超过 9 年前
For the best description of technical debt, you can&#x27;t do better than listen to the man who first coined the term. Ward Cunningham explains:<p><a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=pqeJFYwnkjE" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=pqeJFYwnkjE</a>
upofadown超过 9 年前
I assumed that &quot;technical debt&quot; was an analogy to help management people understand that they might have to allot some time to activities other than getting a program to run for the first time.
jerf超过 9 年前
(This is not disagreement with the original post, but further musings.)<p>One of the other problems with the technical debt idea is, debt relative to <i>what</i>? Since I think most people do not consciously instantiate an answer to that question, I think most of us non-purposefully choose by default a comparison to an idealized perfect code base that is somehow perfectly correctly factored, yet also as fast as completely optimized code, completely documented without being overdocumented, simultaneously optimized for all possible future changes, and despite not existing at the moment, also perfectly understood by the original team such that they can do anything they like to it, and such understanding will survive any such refactoring, all accomplished in exactly the same amount of time that it took to write the terribad code that we actually have.<p>OK, but that was never on the table, though. What I described isn&#x27;t even possible to manifest, and even if you back it down to what is at least sort of possible, you don&#x27;t have the resources to manifest it before you simply run out due to lack of customers. You&#x27;re not really taking on &quot;debt&quot; if you fail to manifest that, any more than you are taking on &quot;debt&quot; if you fail to make every possible dollar you could if you perfectly correctly harnessed your skills and made the perfect deals.<p>I think what a lot of people call &quot;debt&quot; is simply the natural state of code. Debt is something somewhat more exceptional than that. There is a core idea of value there, because there definitely is an operation where we deliberately make a short-term choice at the cost of long-term pain, but it requires more thought than I think has traditionally been given to it. The baseline needs to be more carefully defined.<p>As I said at the top, I&#x27;m just musing here; I don&#x27;t have a ready-to-go definition of &quot;baseline quality&quot; here.
评论 #10894416 未加载
jimworm超过 9 年前
I&#x27;m currently on a month-long crusade against what initially was a single small poor code choice (a denormalized model in Rails) from 4 years ago.<p>As it stands, over 5% of the codebase has been deleted so far without reducing functionality. One could argue that a significant part of the application were just hacks to get around the original hack, and hacks to get around those etc.<p>Not sure how to break that down into the categories provided, but given that the problems add up to proportions unimaginable to anybody but IRS, debt as an analogy works well enough for me.
NumberSix超过 9 年前
Technical debt is a very artificial concept. With real financial debt one knows immediately the exact dollar amount, the interest rate, the payment terms and so forth. There is usually no ambiguity or judgment. In contrast, technical debt is based on theories about software development and uncertain predictions about future changes to the software. As the old saying goes: &quot;prediction is hard, especially about the future.&quot;<p>As a business, if I buy a computer on a company credit card, I know immediately that I owe $1200.00 at 23 percent interest per year. In contrast, if I develop a piece of software and decide to use global variables to speed up development, I may immediately gain a mythical man-month in development time BUT I have no idea how much it may slow me down in the future if at all. Sometimes global variables are the way to go and development will be consistently faster for the entire lifetime of the software compared to using local variables. This tends to happen, not surprisingly, when the data in the global variables needs to be used widely throughout the program.
评论 #10896113 未加载
brazzledazzle超过 9 年前
Obviously this is about development but that&#x27;s not the only place where you can accrue technical debt. In operations it&#x27;s shortcuts or bandaids so you can get something done quickly or fix a production issue &quot;ASAP&quot;. While it is a trade off it&#x27;s a crippling one. Without good engineering principals and management support to regularly pay it down you can easily get to a point where the collective fragility has you putting out fires constantly and no one wants to touch anything.<p>Unfortunately management often thinks that they&#x27;re supportive but ask them what project they need to axe or put on the back burner to free up time and the ephemeral promises and deferment to some hazy future date get put on the table.<p>Perhaps it&#x27;s not &quot;real&quot; in development but it is very much a real issue that needs to be thought about by anyone in charge of operations.
makecheck超过 9 年前
I combat this by ensuring that it is perfectly acceptable for a change to consist primarily of <i>deletions</i>.<p>You don&#x27;t want a culture that only adds features, forever growing the pile. Developers need to be free to identify and aggressively throw out old functions, old tests, obsolete documentation or anything else. This means that a list of deprecated items should be expected in most projects, and <i>mean it</i> when you warn other teams that you plan to completely remove those items in 6 months.<p>This freedom to delete doesn&#x27;t mean that total rewrites will be encouraged. Rather, it acknowledges that in an evolving system, some things do become obsolete and mistakes will be found (despite highly competent architects) that ought to be corrected. Ultimately it frees people to easily identify and maintain only what really matters.
评论 #10898551 未加载
gt565k超过 9 年前
Technical debt is usually a result of poor planning, a misunderstanding of requirements or complete lack of requirements, or trying to do too much when you should have built an MVP with limited scope.<p>I think the SE Radio episode on Technical Debt <a href="http:&#x2F;&#x2F;www.se-radio.net&#x2F;2015&#x2F;04&#x2F;episode-224-sven-johann-and-eberhard-wolff-on-technical-debt&#x2F;" rel="nofollow">http:&#x2F;&#x2F;www.se-radio.net&#x2F;2015&#x2F;04&#x2F;episode-224-sven-johann-and-...</a><p>Does a good job of explaining why technical debt occurs, how to avoid it and when technical debt is ok.<p>I strongly recommend everyone listen to this episode. It&#x27;s quite insightful.