Live data from Hacker News

Ask HN: Have you ever worked on a product that was killed by technical debt?

news.ycombinator.com

311–320 of 331 posts

Re: Ask HN: Have you ever worked on a product that was killed by technical debt?

#311
I'm currently working on a project that hasn't died yet, but has gone through a lot of pain in the last couple years partly because of technical debt.

I ran the project for the first four years. It was my first large project and the first time I had run a team of any size. I made a few mistakes that might be worth learning from, but my mistakes weren't the only ones responsible for the debt.

The largest driver in the technical debt issue was the timelines. My boss was new to software development, and his expectations were not in line with reality. We frequently had to ship ad hoc features under tight deadlines to keep him happy. When I pushed back on the timelines he became unhappy. So we acquired debt in the form of 1) hastily designed sections of code that don't lend themselves to scalability or refactoring 2) a lot of small code smell issues that by themselves don't amount to much but in the aggregate form a kind of surface scum that makes future development and more importantly testing difficult and thus brittle.

The debt, and the accompanying bugs and delays it caused, eventually led to enough dissatisfaction that I was taken off the project (I am in a weird outside position now, sort of half on half off, supporting a tangent of the software but not working on the main branch or involved in architecture discussions, planning, or execution of the new replacement). A new manager was hired. We disagreed over strategy, so I was taken off the project.

He wanted to start over from scratch, which is what they are essentially doing now. The plan is to pattern the new solution off the old one by incorporating all the business rules (which they want me to document), but they have very different implementations in mind. They don't want to reuse existing libraries (some of which is driven by a lack of familiarity or understanding of those libraries, how they work, why they approached the problem the way they did).

They face some significant challenges:

1) their coding velocity is slow. more than 60% of the original team has left and been replaced, so a large part of the team hasn't been on the project for more than 2-3 months. this means that there is a significant dearth of institutional knowledge. i think a decent pace is good for development of software, but they aren't starting from scratch, and there's a lot of expectations to meet.

2) because of the dearth of institutional knowledge when they do start implementation, they are going to end up repeating many of the mistakes made by the old team. I have limited insight into what those are, but based on what exposure i do have, i can see planned missteps all ready.

3) my boss, the owner of the company, has learned some patience, but they've been at the rewrite for nearly 6 months and have little to show for it. in terms of feature parity with the old software, they are severely lacking. i don't expect he is going to be willing to wait another full year to get an app that does essentially what he already has only differently, even if that architecture is more flexible.

In all honesty, I hope they succeed. My boss is a good friend and this experience hasn't ruined that. I have and am dealing with some resentments, but I don't want him to fail. And because this project was my baby (so to speak) there is a part of me that wants it to live.

----------------------

In retrospect, I'm not entirely sure what I should have done differently. Had I ignored the requests for adhoc features, I likely wouldn't have made it as far as i did, because without those features he would have pulled the plug. The company grew at an exponential rate the first 2 to 3 years of that project, and part of what fueled that growth was the adhoc, fast turn around times of my dev team. We were incurring debt, but we were also making big gains.

If I was going to do this all over again here is what I would do:

1) I would push back more, in smaller increments, placing more emphasis on getting the details right before shipping. 2) I would push back more on requirement creep. My boss would frequently have these "great" ideas that he would insist we work on, which would get half done then discarded leaving the code base littered with dead ends that needed cleaning up later. Part of the debt we acquired stemmed from the fact that in order to keep a lot of those activities from impacting ongoing efforts, i built an architecture that was somewhat disjointed. the lots of little islands approach meant we had apps that were reinventing the wheel, taking different approaches, etc... 3) Place a greater emphasis on automated testing (fewer human testors, more test engineers).

The other aspect to this is the fact that when you are creating software to solve problems that don't currently have software solutions, you spend a fair amount of time going down trails that don't pan out. The R&D aspect left us with bit and pieces of code in the code base that were incomplete or incompatible, but that were relied upon by one app or another.

We lost time discovering that certain approaches didn't work.

I think thats it... I hope someone finds the story useful.

Re: Ask HN: Have you ever worked on a product that was killed by technical debt?

#312
post #58
post #22

Earlier quoted context omitted.

Except for one measure: Netscape died as a company. The huge rewrite contributed to killing it. If you don't ship a product (for like 4-6 years?) you're gonna die. Mozilla originally chose the name phoenix, (then firebird to avoid trademark problems, then finally firefox) was chosen because it was a phoenix rising from Netscape's ashes. Its major innovation: It was 'blazing fast' when compared to ie 5.5 / 6. Tabbed b…

Sorry, but I emphatically disagree. Servo entailed creating a new programming language , building a community around that language and using the project as playground for feature validation. This might work for an non-commercial entity but it is not a good example of a rewrite.

It's more about the integration side than the particulars of it. It's a huge project with different goals than ff, so it should be (and is being) treated as such.

It's a huge, audacious, hairy project, which might happen if a startup said "OK let's rewrite everything from scratch!"

Re: Ask HN: Have you ever worked on a product that was killed by technical debt?

#313
post #301

Earlier quoted context omitted.

There's really nothing to debate; the guy I replied to was totally correct about everything except the bit about "AC is much better in the home", where I pointed out that he really meant that a high voltage roughly where our current AC systems are (120V-240V) is much better in the home than some kind of low-voltage DC system, and that with modern technology, it would probably actually be better to have a DC system. B…

I was never arguing that an individual should replace the AC in their house. My argument was, with current technology, the AC setup can be seen as tech debt. Which seems compatible with what you are saying, but the parent was specifically claiming I was wrong. That is, you seem to be echoing my point. But seem to be claiming it is different. What am I missing?

I wouldn't call it "tech debt". Present-day AC systems may not be completely optimal (given current electronics technology), but they do work well.

As I understand it, "tech debt" is something that has to be reckoned with at some point, or else you're going to have real problems in the future (just like refusing to pay off a money debt will generally cause you real problems at some point when the creditor sues you and gets a judgment). You can't just let it go on forever; eventually you need to "pay it down" (by cleaning up the codebase, migrating to newer technologies, etc.), or else catastrophe happens (the company is unable to compete and goes under). One common factor cited in these stories is that the code becomes too unmaintainable and unreliable: too many weird changes for customers pile up and introduce serious bugs which cause the product to not work properly.

This isn't like that at all. We can go on with our current household AC power systems indefinitely. Maybe we could get a 1% improvement by switching to DC systems (at an enormous cost because most of your appliances and devices won't work with it without adapters), I don't really know exactly how much better DC would be (not much really), but what we have now works fine. Furthermore, it's not like the whole electric grid system needs to be changed: it's entirely possible, for instance, to switch distribution systems to DC and leave household systems AC. Instead of distributing the power at 30-something kVAC in your neighborhood and using outdoor transformers to step it down to 240VAC for your house, it could be distributed in DC form, and those transformers replaced by modules which convert the 30-something kVDC to 240VAC. In the old days, this was hard and expensive to do, but with modern power electronics it's not. But even here, the question is: are the gains worth the expense? And the answer is very likely "no". (For reference, I'm not a power engineer, I just studied it in college as a small part of my EE curriculum.)

So this does not, to me, resemble "tech debt" at all. It's just a system that we use for legacy reasons and which is extremely reliable and works well, even though it might not be the absolute most efficient way to solve the problem. This is no different than many other engineered systems. Perhaps you have a decent and extremely reliable car. Could it be better? Sure: you could build the chassis out of carbon fiber, use forged aluminum wheels instead of cast, etc. all to save weight and improve fuel economy. Are you going to do that? Of course not, because the cost is astronomical. There's cars like that now, and they cost $1M+.

So for AC systems that we're talking about, the question is: what is wrong with them that we want to consider replacing them with something else, instead of just sticking with them even if they're not quite as efficient as they could be? Because the cost to upgrade them would be enormous, so you need to have a very good reason.

Re: Ask HN: Have you ever worked on a product that was killed by technical debt?

#314
post #301

Earlier quoted context omitted.

I was never arguing that an individual should replace the AC in their house. My argument was, with current technology, the AC setup can be seen as tech debt. Which seems compatible with what you are saying, but the parent was specifically claiming I was wrong. That is, you seem to be echoing my point. But seem to be claiming it is different. What am I missing?

I wouldn't call it "tech debt". Present-day AC systems may not be completely optimal (given current electronics technology), but they do work well. As I understand it, "tech debt" is something that has to be reckoned with at some point, or else you're going to have real problems in the future (just like refusing to pay off a money debt will generally cause you real problems at some point when the creditor sues you an…

Most instances of tech debt are things you don't have to deal with. Usually, it is the term pulled out for things people don't like. Or generally deprecated methods that have better replacements, but still work.

It is this second sense that I was latching on. It --tech debt-- will drive decisions today. But it is not clearly bad. Just a constraint on current decisions that was made in the past. Often for decent or really good reasons.

Bit rot is another term for things that start to decline in how well they work. That is generally different, though. Usually a by product of replacing implementations without keeping functionality. Such that people relying on old behavior are left cold. (I can see how tech debt can easily turn to bit rot. But it is not required.)

Consider, LaTeX being an old code base is often used to call it tech debt filled. People want to modernize it. Not because it doesn't work. But because they think there are better ways, now. And they do not consider all of the documents made on it as infrastructure.

Now, i concede that all of this is my wanting the terms to have unique and actionable meanings. Elsewhere I was told "tech debt" is a catch all term now. That seems to rob it off usefulness.

Edit:. I forgot to address the monetary aspect of the analogy. I like that, to an extent. But most debt is taken in very specific terms financially. Unlike colloqually termed debts between friends. That is, there is no interest in this metaphor that works. Nor is there a party you are borrowing from.

Re: Ask HN: Have you ever worked on a product that was killed by technical debt?

#315

I'm currently working on the reincarnation of a project that was killed by technical debt -- TWICE. The original codebase was about 20 years old. It was control code for something best described as an industrial robot. Written for the last 20 years by greybeards who knew a lot about the manufacturing process, and were reasonably good at getting a product out the door. But the whole thing was riddled with #ifdefs for…

Huh.

Should I ever inherit an #ifdef mess again, I intend to replace #ifdefs with Strategy patterns.

#1 figure out all the known defs in actual use

#2 rerun the preprocessor with each variant (combo)

#3 capture the output(s)

#4 aggressively apply the Strategy pattern, refactor code

Last time, I removed dead code piecemeal manually. It sucked.

Re: Ask HN: Have you ever worked on a product that was killed by technical debt?

#316

Earlier quoted context omitted.

"Relational" means "tabular". (A "relation" in relational theory is a table with a name, fields with names and types, and the data in the table.) A "relationship" in an ER diagram maps to a "reference" in relational theory. This is part of the type safety/domain system of RDBMSs. If these concepts are muddled, SQL will never quite make sense :)

> "Relational" means "tabular". Relational database can be expressed in tabular form, but tabular data is not necessarily relational. > (A "relation" in relational theory is a table with a name, fields with names and types, and the data in the table.) A relation is a system of one or more functions (in the mathematical sense) each of which has a domain that is a candidate key of the relation and a range that is the c…

Interesting definition. Do you have a source for it. It seems ambiguous.

From the Wikipedia article on relational databases, subsection relational model. "This model organizes data into one or more tables (or "relations") of columns and rows, with a unique key identifying each row. Rows are also called records or tuples."

Re: Ask HN: Have you ever worked on a product that was killed by technical debt?

#317

Earlier quoted context omitted.

"Relational" means "tabular". (A "relation" in relational theory is a table with a name, fields with names and types, and the data in the table.) A "relationship" in an ER diagram maps to a "reference" in relational theory. This is part of the type safety/domain system of RDBMSs. If these concepts are muddled, SQL will never quite make sense :)

> "Relational" means "tabular". Relational database can be expressed in tabular form, but tabular data is not necessarily relational. > (A "relation" in relational theory is a table with a name, fields with names and types, and the data in the table.) A relation is a system of one or more functions (in the mathematical sense) each of which has a domain that is a candidate key of the relation and a range that is the c…

[deleted]

Re: Ask HN: Have you ever worked on a product that was killed by technical debt?

#318

Earlier quoted context omitted.

Copy-pasted code: Data redundancy 300 column lines: Support for management buying everyone nice, new, giant monitors. Logic in 20 places: But what if we want subtle differences between each implementation? On a more serious note, a product that I've worked on was started in about 1998 in C++. We support something like 15 different platforms, and we've got our own implementations of things like vectors because we need…

Libreoffice managed to get rid of their legacy containers and moved to the STL, so maybe you can do it too https://people.gnome.org/~michael/data/2011-05-12-libre.odp

Development of that particular product moved to China and India last year, so I don't have a part in its development anymore, just build+release, because there are some legal benefits to releasing it from this country.

On the plus side, there are only a few platforms that they still have to support gcc 3.x on, and all the ones that ran on 2.x are out of support (until a customer holds a few million dollars in management's face, as happened a few weeks ago with AIX 5.1).

Re: Ask HN: Have you ever worked on a product that was killed by technical debt?

#319
post #259

Earlier quoted context omitted.

We (I) feel these same things. >when they ask for something off the roadmap Then we also get side tracked and lose focus. Leadership and management expend too much energy trying to figure out what to do. Then they want estimates from the developers so they can figure out an estimated ROI. But they rarely seem to worry about the true income potential, focusing mostly on just the initial development cost. Pursue it? Do…

Absolutely. A brief story on tech debt from the top: One of the more frustrating things I've experienced is when I got push-back for implementing more project management process (we have a very light process, but when I took over it was sticky-notes-on-the-desk level). The complaint was "we can't slow down development to do more process". Very through-the-looking-glass, as I, the Engineer, was arguing for more manage…

> Very through-the-looking-glass, as I, the Engineer, was arguing for more management process and Leadership wanted less.

I suspect you could go a long way with the heuristic "If engineering asks for more process, always give it to them."

It's not flawless, but it's like hearing Ron Paul call for a new regulation - when a request is that out of character, you should usually suspect that there's some good motivation.

Re: Ask HN: Have you ever worked on a product that was killed by technical debt?

#320

Earlier quoted context omitted.

And it wasn't! That was part of the problem: the sales people couldn't push back on most requests because they were often quite reasonable. When they were more demanding, it was usually from a large prospective buyer so we had to bend over backwards. The result was that we had huge tasks to do with no (current) revenue, and small tasks to do that took 10x as long as they should have. Since servicing existing revenue…

Sounds like you needed better sales people.

We needed a lot of things. Better (or more technical) sales was one. More mid-level engineers was another. Mostly, though, we just needed more time or money.

Our target market was very reluctant to moving from a paper system to a software system, so there was a lot of foot-dragging and feature requests. That delay had just never been budgeted into schedules or runway.

Post reply on HN