TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Technical Debt: Why it'll ruin your software

204 pointsby yannikyeoover 4 years ago

42 comments

SkyPuncherover 4 years ago
I&#x27;m being a bit blunt here. It&#x27;s easy to say Technical Debt will ruin your software when you pick a contrived thing and label it as Technical Debt.<p>&gt; John knew his code had a few bugs. But nearing the deadline, another project appeared and it took a lot of John’s time, so he couldn’t go back and fix the problems.<p>This is a problem, but this is not inherently technical debt. That&#x27;s just delivering a bad&#x2F;incomplete feature (Not necessarily John&#x27;s fault if he&#x27;s been asked to make changes). Code with Technical debt works or mostly works, but relies on non-maintainable or less ideal than patterns.<p>Simplified example. Adding a &quot;Cancel&quot; Button to a form. This button involves adding a new &quot;secondary&quot; class style to the button.<p>* Technical Debt - Button is in place. Works correctly. Instead of a &lt;Button&gt; component and tweaking it to handle the new &quot;secondary&quot; class. John simply copies and pastes the &lt;Button&gt; code directly into the implementation.<p>* Bug&#x2F;Bad Feature - John references the button correctly, but fails to handle certain state resets properly when the form is cancelled.<p>-----<p>The prior is technical debt because it works correctly, but doesn&#x27;t follow a good pattern or does something unexpected (refactoring that button will be much, much harder). The latter is likely just bad code.<p>The case where the latter is not bad code is if the company has made an intentional decision to not handle cancel edge cases. Even here, I would argue that is product debt - not technical debt.<p>----<p>Every software product in the world has debt. Just like every software product in the world has bugs. You need to account for your debt as you grow. Otherwise it will eat you.
评论 #24872233 未加载
评论 #24872240 未加载
评论 #24872409 未加载
评论 #24873167 未加载
评论 #24877159 未加载
评论 #24874871 未加载
评论 #24875975 未加载
评论 #24877815 未加载
评论 #24875891 未加载
solomatovover 4 years ago
In my experience, I have seen much more problems because of over engineering by well meaning people than because of technical debt.<p>Simple but under engineered systems are much easier to rewrite than to simplify over engineered ones.
评论 #24871883 未加载
评论 #24872042 未加载
评论 #24871824 未加载
评论 #24871810 未加载
评论 #24871819 未加载
评论 #24872356 未加载
评论 #24872078 未加载
评论 #24871978 未加载
评论 #24872068 未加载
评论 #24872772 未加载
评论 #24872805 未加载
评论 #24872504 未加载
评论 #24872501 未加载
评论 #24872075 未加载
评论 #24871923 未加载
hardwaregeekover 4 years ago
I&#x27;ve become skeptical of people talking about technical debt and clean code and all the standard Fowler&#x2F;Uncle Bob&#x2F;PragProg-isms. Not because they&#x27;re wrong. If anything they&#x27;re all right, but in a rather vacuous, well-yeah way. Yes technical debt is bad. Yes we should start with a design. Yes we should do refactoring. But using the analogy of the author, that&#x27;s like telling someone who&#x27;s overweight and eating a lot of junk food that they should &quot;eat healthier and exercise&quot;. Well yeah. They probably knew that already.<p>And so many people try to make it a dichotomy. Like that diagram of a project with a design versus without. That&#x27;s not a fair comparison. What does a design even mean? Wireframes? A written document of features? How do we change this design? What&#x27;s the way in which we get feedback? And what sort of projects are we talking here? A programming language is very different from a website. And what even counts as no design?<p>Some other notes:<p><pre><code> - I&#x27;m not sure the author correctly used the Pareto principle. It&#x27;s not just a generic &quot;split things into 80&#x2F;20&quot; but a specific observation on how 20% of the causes result in 80% of the effects. - The post could have used a quick proofread. There&#x27;s quite a few spelling mistakes and poorly phrased sentences. I totally get if the author is not a native speaker, but they could easily enlist one to help (if the author wishes, I&#x27;d be happy to proofread—contact me). - I get the whole &quot;make this post fun with cats!&quot; but honestly I&#x27;d prefer a straightforward example with no funny images. Maybe that&#x27;s just my grumpiness.</code></pre>
评论 #24872690 未加载
评论 #24872761 未加载
评论 #24875360 未加载
papitoover 4 years ago
There is bad technical debt and there is acceptable technical debt. The mark of a good engineer is knowing where to cut the corners - which you will always have to do.<p>Hardcoding something in a file rather than pulling it from a config or a database has a pretty good ROI in terms of time saved, and it&#x27;s not that hard to change later, but tying yourself to, say, a kind of storage that you know is not going to work long-term, that will cost you later.<p>Also, sometimes doing MORE results in more technical debt. If you are going to spend your time building a Kubernetes cluster because &quot;your home page has to be webscale&quot;, you are an idiot.
Hokusaiover 4 years ago
&gt; Payments couldn’t be processed in different currencies &gt; If the delivery system is offline, the code wouldn’t work &gt; Users with deactivated accounts could still access the system &gt; No automated testing &gt; And this, my friends, is what we know as Technical Debt.<p>I do not describe that as technical debt. That are mostly lack of features. The code could be fantastic and it is just that to support different currencies, disable accounts or similar things new code is needed.<p>The lack of automated testing is more in line on what I think that it is technical debt.<p>Details aside it is an interesting read.
评论 #24872288 未加载
评论 #24872799 未加载
CoffeeDregsover 4 years ago
Technical debt is like credit card debt: it&#x27;s high interest; it&#x27;s not a huge issue if you use it wisely; and you have to track its usage and level against your total code&#x2F;assets.<p>Like credit card debt, too many people turn around and they&#x27;ve got $20k of credit card debt or 20k LOC of tech debt.<p>I don&#x27;t have too much of a problem with tech debt as long as: the benefit is clear; the debt is well understood; the payoff date&#x2F;cost is planned. Just last night I was talking with a developer who works for me: &quot;This way will require 5 queries instead of 1. Can you help me figure out this whacky ORM API to do it in 1?&quot;; &quot;Just do it as 5 right now and, as we learn more about the ORM API, we&#x27;ll fix it later...&quot; Tech debt: we get the product done faster; we&#x27;ve got a 1-5 line change to make (when we know how to make it); and we&#x27;ll do so in a few months.
评论 #24872327 未加载
评论 #24875631 未加载
评论 #24872346 未加载
projektfuover 4 years ago
Seems like if you want to make that statement (it&#x27;ll ruin your software) you need more than a hypothetical example. There are some good ones in memory.<p>1. Netscape Navigator - was such &quot;spaghetti&quot; that they had trouble re-architecting it to allow it to keep up with evolving web standards, and then put everything into Navigator 6.0 which ended up running like a snail. (Second system effect). I&#x27;ll note that according to jwz, it was written by people working lots of all-nighters.<p>2. Microsoft Word for Windows. Apparently had a ponzi-like accumulation of technical debt as they kept adding features to the release and writing code that looked technically correct but was known to be flawed, relying on testers to find the bugs they had known they wrote. Took version 2 for the bugs to get ironed out to a usable state.<p>I&#x27;ve tried coding with some open source programs that are mostly being used for a company&#x27;s internal process that are basically piles of technical debt, but it&#x27;d be rude to mention.<p>I&#x27;m sure there are other great ones, but now that so much software is SaaS, we&#x27;re probably not going to hear about it, because the release dates aren&#x27;t as obvious. To me, eBay appears to be one, as they are trying to remake their web application to be more modern but it has tons of warts all over it.
slumdevover 4 years ago
The problem with &quot;technical debt&quot; as a meme is twofold: It&#x27;s a lousy analogy, and people tend to label absolute garbage as &quot;tech debt&quot;. The garbage is not a tool to enable quick growth. It&#x27;s not a shortcut. It&#x27;s just garbage.<p>&quot;Technical debt&quot; conversations usually go something like this:<p>Me: &quot;Could we spend a few hours getting a handle on what the data model should look like? Maybe rough out a crude ER diagram?&quot;<p>PHB: &quot;Oh slumdev, you&#x27;re such a Boy Scout. Just blam it into a document store. If something changes, we&#x27;ll just be Agile about it. Technical debt is a tool!&quot;
评论 #24877004 未加载
idankover 4 years ago
The title the author chose does a bit of injustice to the contents of the post.<p>The post uses a lot of words to describe an understanding that experienced engineers and managers should have. Technical debt is a trade off. It exists in nearly all software of decent size as it&#x27;s being developed. It is vital both for management and engineers alike to keep it at a reasonable amount, or you&#x27;ll wake up one day with something that can&#x27;t release new features, function, scale or be maintained.<p>It is also worth stating that tech debt can have little to no siginifcance to the success of a startup.
评论 #24871947 未加载
评论 #24871979 未加载
评论 #24872111 未加载
drbojingleover 4 years ago
You know what ruins software? Refactoring old stuff you don&#x27;t like so the code base is &quot;nice&quot;, which incidentally introduces 100 bugs that didn&#x27;t need to exist, pushes deadlines back cause someone has to fix those bugs, and loses customer confidence to the point that investors and customers don&#x27;t care anymore and then you have no one to build for (but at least your code base is nice and scale-able, to bad 10 x 0 customers is still 0).<p>I&#x27;ve seen more issues because of nonsense like that, or people insisting that code should be DRY and making ridiculous mental contortions in the name of a three letter acronym, or personal taste (the amount of fashion in software development is insane) but I&#x27;ve yet to see a project truly fail because someone cobbled something together quickly, and introduced tech debt. So far anyways.
评论 #24876961 未加载
评论 #24875273 未加载
tabtabover 4 years ago
There is a balancing point between under-analysis and over-analysis. It&#x27;s hard to know the true requirements until the system is actually in production. You can&#x27;t realistically pre-learn many domain lessons: you just have to dive in and see what floats by setting sail.<p>Finding the best balancing point is hard to turn into a sure-fire formula. I use experience (age) to make a best guess based on on past successes and failures and project types.<p>One tip is to collect and keep a list of questions and suggestions, and make sure they are sufficiently explored. You can&#x27;t answer questions that have not been asked, but AT LEAST answer those that are asked. Make sure staff is not afraid to ask questions or make suggestions.
评论 #24873281 未加载
anm89over 4 years ago
I don&#x27;t buy this concept. It&#x27;s like saying &quot;Financial Debt: Why it will ruin your company&quot;<p>Yeah it can if you abuse it. It can also be incredibly helpful.
评论 #24872340 未加载
lowbloodsugarover 4 years ago
Can we stop using the term Technical Debt?<p>First objection: Managers and Business persons understand Debt, like it and use it. I use credit cards and have a car loan. If we, as engineers, present the problem as &quot;You can have what you want now, but you will incur Technical Debt&quot; then any sane person will say &quot;Sure! Good deal!&quot; Ask yourself, how many times a manager or business owner has asked &quot;What is the interest rate?&quot; Zero times.<p>Second Objection: It&#x27;s not debt.<p>Debt would be if someone said &quot;I need to build a bridge across here that can handle an Army, and I&#x27;ve got $1m&quot;, we engineers reply &quot;It will take $2m&quot;, and they respond &quot;Ok, I will borrow $1m so you can build the bridge I need&quot;.<p>Instead what happens is they say &quot;Well, build what you can for $1m&quot;, and you say &quot;Ok, we can make &#x27;a bridge&#x27; for that&quot;, and then either (a) your infantry can cross, but the tanks have to get diverted 20 miles out of the way, or (b) the tanks end up in the river along with the bridge. Since (b) is bad, you then have to spend a lot of time planning the routes for the tanks, and making sure the tanks have the right air cover, etc etc, i.e. doing more work.<p>It&#x27;s not debt. It&#x27;s just (at best) an incomplete solution or (at worst) a bad solution that fails at the worst possible moment - e.g. database collapses during registration for the largest event of the year.<p>Ah, but surely, if you build the lightweight solution for $1m, and acknowledge the increased costs of managing the problems that it doesn&#x27;t solve, then thats fine? Sure, but that&#x27;s not technical debt either! That is scoping: we (engineers + business) identify a workable solution that provides some business value. And then we do that well.
评论 #24877970 未加载
spaetzleesserover 4 years ago
On the other hand a lot of efforts to avoid technical debt end up producing more technical debt because in the end you don&#x27;t know where things will be going. I think refactoring just needs to be an ongoing effort and should almost never be an explicit task.
RandyRandersonover 4 years ago
IMO, a more pernicious form the tech debt starts with one system. A second person comes along and builds their own system&#x2F;software b&#x2F;c of some real or perceived issue with existing software (for example someone thinks something is poorly designed or not the right(tm) technology, etc). This second system then forces integration, APIs, TCP connections between apps.<p>No big deal, right? But the next person comes along and says &quot;I don&#x27;t like those systems - I want to put tech3 on my resume (a little resume oriented architecture, anyone?) and they build a 3rd system.<p>Now it&#x27;s really hard to develop features across those apps. One has to be an expert in all those techs. Integration becomes 80% of the work. Now ppl <i>have</i> to create new or buy software just to get anything done. And so it goes.<p>There&#x27;s a name for this, used a lot on this site.
jesssinnssover 4 years ago
Technical debt is not a thing.<p>It’s made up by people who want things done in a different way than they currently are.<p>All currently good design recommendations will become wrong ones in the future. Today’s best practice is tomorrow’s technical debt.<p>There is just code that works and makes the company money, and code that doesn’t work.<p>Code that is readable and code that is not readable.<p>Starting out with “the right design” will become the wrong design when the market changes and the specs change under your feet.<p>Moving fast and making software that meets market needs requires going back and finding parts that need to be consolidated.<p>It’s just how building software in the non-trilllion-dollar-company-or-in-academy world works.
chairleaderover 4 years ago
Interesting. I would say that John didn&#x27;t build a solution that met all of the use cases that the business needed.<p>* To ensure accuracy of transactions, he should have built reporting to meet the needs of accountants.<p>* To support change, he should have kept his components separate and provided modest testing examples.<p>* To support developers and operations, he should have found and documented the external dependencies along with steps to verify that they are in place.<p>Whether product managers didn&#x27;t uncover these requirements or the business didn&#x27;t prioritize them, these aspects of the definition of &quot;done&quot; have more to do with thee environment the engineer is working in and less to do with his or her work.
psysharpover 4 years ago
I see an issue in the web industry that there is sometimes an economical incentive to maintain a solution with technical debt. Just ponder the idea that you hire a bunch of contractors to build you a house, and then you keep them on payroll to come back and fix every broken pipe that they installed to begin with. Even if they feel honor for their work the&#x27;ll soon drift in to ugly insustainable work due to the nature of their incentives. We might need a proper system to hold engineers responsible insted of hiding behind a company, and in the long run be a solution that provides _space_ for engineers, plausibly.
mytailorisrichover 4 years ago
If, for example, there is no requirement to support multiple currencies then there is no need to spend time on designing for multiple currencies &quot;just in case&quot;.<p>This is not choosing an easy solution, this is doing just what needed instead of wasting time and efforts on something that may never actually be needed.<p>Now, the design should be sound and follow good practices. This is how to limit the rework needed when new features are added because it is impossible to design to cover all possible future features: Do the minimum but do it cleanly.
nojvekover 4 years ago
Technical Debt only really counts if you have to pay interest on it. Many times I see new engineers wanting to re-write old working code in their new favorite language.<p>My litmus test for technical debt is things we should have done a while ago, but since we didn’t it’s hurting us. Continuing on same path will hurt even more. Better to fix the pain and then move on.<p>Working code that does what it needs and doesn’t require much maintenance is great code. Old != technical debt.
kgilpinover 4 years ago
Discussion of technical debt always seems to devolve into an augment about what technical debt actually is.<p>Are there specific patterns of code behavior, metrics which can be derived from analyzing code, quality scores that are non-controversial, which can be used to define this problem? Things that can be measured and managed in a canonical way? How can some knowledge of experienced CTOs be distilled so that we can start to automate some of this wisdom?
评论 #24872312 未加载
VikingCoderover 4 years ago
Bad tech debt will ruin your software, but good tech debt is a smart investment in your business. It takes a good team working together to balance their &quot;tech debt budget&quot; against the other revenue needs of the company.<p>If I&#x27;ve run on Version X of some DB software for a while, and tomorrow Version X + 1 is released, yes, I should recognize that staying on Version X is tech debt. But that may absolutely be the right thing to do for now.
pryelluwover 4 years ago
I started to use technical liability and technical asset in lieu of technical debt. Easier to explain and provides more insight into good engineering choices.
评论 #24878601 未加载
salt-lickerover 4 years ago
This article lacks nuance around the tradeoffs inherent in shipping complex software at maximum velocity. Much more useful is evaluating the long-term impact of specific instances of technical debt, particularly “contagion”: <a href="https:&#x2F;&#x2F;technology.riotgames.com&#x2F;news&#x2F;taxonomy-tech-debt" rel="nofollow">https:&#x2F;&#x2F;technology.riotgames.com&#x2F;news&#x2F;taxonomy-tech-debt</a>
yenwelover 4 years ago
I&#x27;ve worked on two seperate old code bases with pms who read the lean startup and they believed that technical debt does not exist. Seriously aggravating the situation thus. They did not seem to understand that the main thesis for that book is assuming that you have one in a million change of becoming a unicorn or selling the company to another party and cashing out.
karmakazeover 4 years ago
&gt; Let’s dive deeper into the problems of John’s code:<p><pre><code> - Payments couldn’t be processed in different currencies - If the delivery system is offline, the code wouldn’t work - Users with deactivated accounts could still access the system - No automated testing </code></pre> &gt; And this, my friends, is what we know as Technical Debt. Why?<p>Ah no, this is what is known as a broken software development process.
BobBagwillover 4 years ago
There are an uncountably large number of pathways one&#x27;s efforts toward a goal can take. Given that the future is unknowable, any decision one makes can turn out to be an inconvenient (not necessarily wrong) decision. That is &quot;technical debt&quot;. It is unavoidable.<p>If you are ignorant of the possible consequences of decision, or choose to ignore or hide them, that&#x27;s something else.
beillerover 4 years ago
Does anyone have any examples of companies that died because of too much technical debt? For me its kind of one of those things I acknowledge exists but I try to avoid any projects where their goal is purely &quot;decrease technical debt&quot; or even when that goal is on the periphery. And I see that kind of thing way more frequently than you might think!
评论 #24872771 未加载
评论 #24874941 未加载
lxeover 4 years ago
Just like any debt, technical debt is not &quot;always bad&quot;.<p>The point of incurring debt is to make a &quot;large payment&quot; (deliver software) quickly and immediately, in exchange for paying interest over time.<p>If you can deliver a working prototype, scale, get funded, and grow your business quickly in exchange of technical debt, that&#x27;s not really a bad deal.
Justsignedupover 4 years ago
One thing I&#x27;d like to point out: The tower in Piza was leaning, and gonna collapse. Then an architect devised a way to fix it. They of course said &quot;hell no&quot; because literally the only thing going on in Piza is the tower. To fix&#x2F;destroy it would destroy the entire economy in Piza.<p>So instead they chose to lift&#x2F;stabilize it.
mgamacheover 4 years ago
Technical Debt is not a thing when you are coding a new feature. It’s like a stock future. It might be debt, but it might be something no one uses or gets dropped (or rolled into another feature). There’s a cost to speed that has to be considered. Maybe it’s debt, maybe you save the time and spend it on other more valuable tasks.
mkl95over 4 years ago
There are many dimensions to technical debt, but the biggest one is the sociopolitical one: developers hate fixing each other&#x27;s bad code, but the people who wrote it are often in a position where they can transfer the ownership of this code to someone else, either by being their manager or by quitting their job.
intricatedetailover 4 years ago
I find it fascinating that buggy product is considered as delivered. That is the root of the problem.
chmod600over 4 years ago
I don&#x27;t think debt is really a great analogy. Lot&#x27;s of people are comfortable with debt, if nothing else.<p>I think it&#x27;s more like a rushed major remodel of a house. It&#x27;s kinda bad, but there&#x27;s really just no practical way to fix it without a teardown.
评论 #24878866 未加载
kylegillover 4 years ago
I like to think of Technical Debt like an accountant or CFO would think about Financial Debt.<p>It provides leverage to incur debt at early stages, incur too much and it can really come back to bite, but a startup that incurs no debt will struggle to grow.
chandmkover 4 years ago
One questions I ask myself to bring clarity is,<p>If I am the one paying bills, would I really pay another developer for this refactoring? Yes: Technical debt it is. No: just busy work.
phendrenad2over 4 years ago
I&#x27;ve never seen a project or company killed by tech debt. I&#x27;ve seen projects and companies killed by obsessive-compulsively trying to eliminate it. YMMV
6510over 4 years ago
In the early days of computers the first working version was always so slow rewriting it a few times was an obvious step. You would end up improving a lot of things not necessarily related to speed. I still often crank out a really shitty version that works just to get to the points that require some deep thought. You can get a lot of work done if nothing really matters. The first rewrite is helped a lot by having done things before. The second full rewrite sadly never happens anymore. Just incremental changes.
gregjorover 4 years ago
Much of the discussion and worry about technical debt stems from a few fallacies programmers seem to fall into:<p>1. Some objectively &quot;right&quot; or &quot;best&quot; way to write software exists. We refer to &quot;patterns&quot; and &quot;best practices&quot; as if those had the force of science behind them, even though at the same time we can&#x27;t, as a profession, agree on what we mean.<p>2. Code we (or someone else down the road) has to maintain wasn&#x27;t written correctly or perfectly in the first place. Programmers tend to hate maintenance work.<p>3. We imagine that we could write the perfect program if only our managers and customers didn&#x27;t impose time and budget constraints, or interfere with their stupid product and marketing directives.<p>4. Failing to write perfect code that lasts forever indicates a failure on the part of the programmer or the team.<p>5. Perfectionism (a symptom of obsessive-compulsive behavior) and the increasing worry among programmers about how others perceive and critique their code.<p>Writing perfect code that requires minimal maintenance in the future would require knowing that future, and all of the changes to requirements and constraints that will happen during the lifetime of the code. We can only work with the requirements we know, and those we can reasonably anticipate. Trying to code for requirements we don&#x27;t have is usually called &quot;overengineering,&quot; which means something else in other engineering contexts (as a few other commenters pointed out).<p>I have worked in software development for 40 years so I know that almost no one likes doing maintenance work, especially on someone else&#x27;s code, and especially with languages and tools no longer in fashion. Maintenance programming is often given to new hires and junior programmers, while the senior developers get to write new code and play with the latest toys. This class division among programmers, often expressed in terms of what makes a programmer junior or senior, gets exacerbated by the personal quality of programming. Programming is a craft, not a science, not even engineering, but we forget that and try to express aesthetic preferences in terms of objective quality, even when we don&#x27;t have agreed-upon ways to measure objective quality of code.<p>Most software has a short lifespan, which means the &quot;technical debt&quot; will disappear when the code gets rewritten or replaced by a SAAS product or the requirements change. Bridges are expected to stand for decades or even centuries. Jumbo jets have lifespans measured in decades. Very few software projects will stay in use that long. I routinely work on web sites that will stay online for less than a year, because they support short-term marketing goals. American companies have an average lifespan of 18 years, and startups are more likely to go out of business (or get acquired) than to stay in business for even a few years, so focusing on building the equivalent of the Great Pyramid in code at a startup or small company in order to avoid &quot;technical debt&quot; is almost always wasted effort.<p>Businesses factor maintenance into the lifetime cost of software just like they factor maintenance (and depreciation) into the cost of buying a fleet of trucks or a truckload of copying machines. It&#x27;s the programmers who impose unrealistic goals of no&#x2F;low maintenance and frame that inevitable maintenance work as a failure of the original design or implementation, i.e. technical debt.<p>We should try to do our best work, to make code that works (i.e. meets requirements and doesn&#x27;t suffer from preventable bugs), and we should try to anticipate likely changes and make those easy for the next programmer. We should stop imagining a perfectly right way to write code, and stop thinking that maintenance work is beneath us, or a sign that the last team didn&#x27;t know what they were doing.<p>I think programmers would enhance their value and learn a more realistic (and maybe humble) approach to their craft if they didn&#x27;t think of programming as an isolated activity disconnected from the business and customers&#x2F;users their code is meant to serve.<p>James Joyce wrote “What makes most people’s lives unhappy is some disappointed romanticism, some unrealizable or misconceived ideal. In fact you may say that idealism is the ruin of man, and if we lived down to fact, as primitive man had to do, we would be better off....” Joyce wasn&#x27;t talking about programming, but I try to keep that in mind when balancing technical decisions against the larger set of business and customer concerns.
jpswadeover 4 years ago
I think this assumes you want to write perfect software, when sometimes it just needs to be good enough.
skybrianover 4 years ago
This would be more interesting if it told us more about what actually happened with the Tower of Pisa.
iainctduncanover 4 years ago
Assessing tech debt is basically my job these days, as I&#x27;m an architecture and infrastructure consultant for technical due diligence on acquisitions, mostly by PE firms. Some fun things you might not know from the field of technical due diligence:<p>- Your startup is much more likely to succeed by being purchased by a private equity fund than anything else these days. Most tech acquisitions are now PE, like over 75% of big ones. (Even up to north of a billion)<p>- The PE fund will send a diligence team. Depending on who they hire, your diligence team could be clueless consultants with checklists, or they could be real hackers who will look at your code, ask all the hard questions, and know a lot about tech debt. They will talk to you for many hours about tech debt. We typically interview for 12 hours and ask for a lot of metrics and docs. We do this for a living, so we&#x27;re pretty good at sniffing out BS and knowing how to get devs to talk about their software realistically. Most devs are pretty happy to talk shop once they know we are actually developers who have been through the same process ourselves. Sometimes I feel like it&#x27;s more like Developer Therapy. :-)<p>- If you have bad tech debt, it won&#x27;t necessarily sink a deal. Deals usually go through or not on other reasons, like business model revenue numbers - stuff that can&#x27;t be fixed with the application of cash. However, we make a table for them of estimated cost to mitigate debt, and that can be serious cash. (i.e. X extra senior devs and QA for Y months&#x2F;years)<p>- This cash will come off the price. Or as Amazon apparently puts it... &quot;a haircut&quot;. A haircut can easily run over a million on even a small company. So the money saved on devs for the years of accruing debt just comes off the acquisition price, but with a terrible interest rate.<p>Also of interest: we don&#x27;t actually say it&#x27;s always <i>bad</i>. We differentiate between intentional and unintentional debt. If you accrued debt to get to market quickly and are then doubling back to attend to it reasonably, that can be a very smart decision and may actually reflect well on the assessment. On the other, debt accrued because the founders only hired interns and new grads and let them run the asylum for years does not.<p>If I were to encapsulate in one sentence what I&#x27;ve learnt about tech debt in the last two years and 50 odd companies examined it would be this: nobody saves money by trying to hire mostly junior developers. Nope nope nope nope nope. If you are running a start up, you need at least a couple of six figure salary, 5+ years experience devs, and a CTO or lead architect with like 10+ years or who really, really knows their stuff. Do not cheap out on this! At a guess, I&#x27;d say it&#x27;s the most obvious differentiator between the hits and the really big haircuts. That said, I only look at companies who have gotten pretty far, so the main differentiator is likely different at early VC stage. We&#x27;re basically doing the first exit, and if we&#x27;re talking to you, you have a successful business that some professional big time investors want in on.<p>Hope that&#x27;s of interest to some folks! :-)