News for hackers. Stuff that matters.
Re:Using Technical Debt in Your Favor by zeroxfe on Thursday March 22, 2018 @09:36AM (#16648492)
Managing technical debt is one of them most important parts of engineering. When you're resource constrained, which is almost a given in the real world, you need to think carefully about what kinds of debts are worth accruing, and what kinds are absolutely not.

I think this is both an art and a science, and the right balance comes with not just engineering experience, but also domain experience, team maturity/talent, market/competitive pressures, leadership, and culture.

There are so many factors involved that it's not surprising so many projects accrue horrible debt.

Re:Using Technical Debt in Your Favor by thisisit on Thursday March 22, 2018 @09:52AM (#16648610)
> the right balance comes with not just engineering experience, but also domain experience, team maturity/talent, market/competitive pressures, leadership, and culture.

I couldn't have stated it better myself. Most of the time it start from culture, leadership and then experience etc.

I have worked on multiple projects with varied amount of technical debt. But the project with the most amount of debt happened because of poor leadership.

The guy who was managing the project was more interested in currying favor. The end result - everyone's salary was being shared across the company in un-encrypted plain text format.

Re:Using Technical Debt in Your Favor by internetman55 on Thursday March 22, 2018 @10:02AM (#16648707)
A manager I worked with previously was like that--no interest in making sure the project could be maintained or actually worked, only promising things to people who didn't even use our platform (me and a coworker checked our logs before I left the company) and getting "wins" so he could talk about them in meetings.
Re:Using Technical Debt in Your Favor by TheOtherHobbes on Thursday March 22, 2018 @01:23PM (#16650695)
That's organisational debt, which is a prime cause of technical debt.

It reliably fascinates me that in spite of more than a century of history, management culture lacks both words and concepts for many common and predictable organisational failure modes.

Re:Using Technical Debt in Your Favor by 52-6F-62 on Thursday March 22, 2018 @02:03PM (#16651016)
It actually reminds me of regular corporate life in a confused company— and in turn, this: https://www.ribbonfarm.com/2009/10/07/the-gervais-principle-...
Re:Using Technical Debt in Your Favor by dragonwriter on Thursday March 22, 2018 @01:32PM (#16650758)
> It reliably fascinates me that in spite of more than a century of history, management culture lacks both words and concepts for many common and predictable organisational failure modes.

Does it? The manager in GP, for instance, seems to be a textbook example of a thermocline of truth.

Re:Using Technical Debt in Your Favor by mmsimanga on Thursday March 22, 2018 @02:03PM (#16651019)
To add. It is hard to get funding for technical debt. Senior management are typically not aware (don't care) that a system is only working because some poor soul wakes up at night to clear caches. Sometimes I feel you might be better off letting the system have a spectacular crash than keeping system on life support. The trouble with letting system crash is may be a career limiting. Technical debt is complicated. Take companies that pay overtime to employees that get called at night to fix the system. They may not exactly be keen to have the calls stop.
Re:Using Technical Debt in Your Favor by LrnByTeach on Thursday March 22, 2018 @01:02PM (#16650489)
the crux of Technical Debt is captured in these 2 points

> the right balance comes with not just engineering experience, but also domain experience, team maturity/talent, market/competitive pressures, leadership, and culture.

>the project with the most amount of debt happened because of poor leadership.

Re:Using Technical Debt in Your Favor by raverbashing on Thursday March 22, 2018 @10:03AM (#16648717)
Also, some debts are not even debts, but normal limitations of the code

If your system started out with tens of requests per second, and it was designed for that and it works fine under that load, having it break if the load increases 10x is not technical debt

Re:Using Technical Debt in Your Favor by Cthulhu_ on Thursday March 22, 2018 @10:11AM (#16648776)
It can depend; if it's because of sloppy programming (such as using string concatenation a lot instead of using a string builder, for example) then it's tech debt. If it's designed like that, then it's an architectural problem. I do think any naively implemented program should be able to scale up one order of magnitude, but two orders of magnitude require a new architecture.
Re:Using Technical Debt in Your Favor by beersigns on Thursday March 22, 2018 @10:33AM (#16648967)
Came to say something similar; I see it with library choices a lot as well; poor library choices ~= sloppy programming. I've had a lot of issues in the the past with 'conventional wisdom' lib choices that result in a lot of re-work as predictable issues with those choices arise.
Re:Using Technical Debt in Your Favor by aldanor on Friday March 23, 2018 @09:23AM (#16657782)
Sometimes, choosing to use a library in the first place may also implicitly increase technical debt (in having to maintain this dependency, and even more so if this library shares dependencies with other dependencies that you have).
Re:Using Technical Debt in Your Favor by cryptonector on Thursday March 22, 2018 @11:34AM (#16649485)
Sort of. You could have used better techniques/frameworks/whatever and gotten it right from the get-go. It does help to have the experience to intuit/know what you'll have to make scale and to what degree so that you can spend cycles on avoiding likely pitfalls without wasting too much effort.
Re:Using Technical Debt in Your Favor by raverbashing on Thursday March 22, 2018 @11:52AM (#16649657)
I would be a very rich person if I got a dollar for every time the "right framework/solution/technique" broke unexpectedly when pushing it in certain ways.

Or it might not even have existed (or was unstable) when you started work, but it got better later.

Re:Using Technical Debt in Your Favor by cryptonector on Thursday March 22, 2018 @12:30PM (#16650139)
I was thinking of things like: thread-per-client vs C10K. Just go C10K all the way. That means write services to be async, async, async. Just do it. It will not be the case that thread-per-client is better than C10K except when you know you'll only have a handful of clients. Write code to be thread-safe / reentrant. Write code to be separable into libraries.

I'd also urge you to use higher-level languages from the get-go. If you can use Rust instead of C, do it. If Haskell is appropriate, use it. These are all choices that are fantastically easier to make early on than later.

Re:Using Technical Debt in Your Favor by mpfundstein on Thursday March 22, 2018 @01:01PM (#16650487)
Yes. Some things are just obvious easy wins. And still I am surprised how often we choose to do differenT.

Its the same readon why I almost always immediately use vue or react. Because it doesnt cost me much (~0) but if that thing has to scale i’ll be ready

Re:Using Technical Debt in Your Favor by eanzenberg on Thursday March 22, 2018 @12:15PM (#16649937)
I think that's the point. You choose the best tech at the moment given the requirements with some headroom. Why waste engineering time to make sure it is hardened to support 10x load? Sometimes it is easy (use a different library) but most of the time it is hard.
Re:Using Technical Debt in Your Favor by gowld on Thursday March 22, 2018 @01:00PM (#16650470)
"10x" is large or small depending on the plausible variance you can expect. A free casual game? 10x spike is quite expected. a $1000/month B2B Saas? 10x comes with a lot of predictable lead time.
Re:Using Technical Debt in Your Favor by cryptonector on Thursday March 22, 2018 @12:26PM (#16650099)
Some changes can be extraordinarily difficult, so if you can foresee that you'll need, say, to make some code into a library, or thread-safe, or async, then it's best to make it that way from the get-go.

Obviously there's a bit of YAGNI in tension here.

But if you have the experience to write it correctly from the get-go at low additional cost, then it's worth doing that instead of risking a massive rewrite later.

Re:Using Technical Debt in Your Favor by marcosdumay on Thursday March 22, 2018 @02:16PM (#16651124)
> to make some code into a library

I have never had any problem with putting some code into a library after the software is done. It is almost always a 1-4 hours exercise, and when it's not, it's a 2 days task at most.

Async code is also something that I have never seen it being a huge problem. Mostly because only a small part of your code needs to be async, most of it can stay synchronous, scheduled by the small async part.

Thread safety is a real problem. One can indeed trade some of it for some development speed, and this can become a huge bottleneck later/soon.

Re:Using Technical Debt in Your Favor by IncRnd on Thursday March 22, 2018 @01:44PM (#16650859)
Technical debt is the cost of reworking software not the features or existence of the software.
Re:Using Technical Debt in Your Favor by peterwwillis on Thursday March 22, 2018 @11:32AM (#16649470)
Are you talking about software engineering, or engineering engineering? Because I don't think building engineers create technical debt.
Re:Using Technical Debt in Your Favor by pjc50 on Thursday March 22, 2018 @12:08PM (#16649831)
Buildings can definitely accumulate technical debt when they're put through a series of changes of use over time. It manifests as odd cable routing, inconsistent floor levels, repeatedly moved doorways, obstructed windows, etc.
Re:Using Technical Debt in Your Favor by pm215 on Thursday March 22, 2018 @03:32PM (#16651915)
The UK houses of parliament are a good, if perhaps extreme example of that: https://www.theguardian.com/news/2017/dec/01/a-tale-of-decay...

They have now finally decided to move the MPs out so they can do the refactoring they've needed to do for years...

Re:Using Technical Debt in Your Favor by lazyasciiart on Thursday March 22, 2018 @04:06PM (#16652215)
What do you call the work that needed to be done in order to remove the existing electrical cables in my house and replace them with a wiring layout that was able to add a second outlet in my bedroom? (Or, far better - the unofficial extra wires that the contractor found which had been loosely spliced into the existing system by the previous owner in order to power the new bathroom lights he added, which just stopped working when we removed the old cable because nobody knew that connection existed).
Re:Using Technical Debt in Your Favor by peterwwillis on Thursday March 22, 2018 @05:29PM (#16652870)
Technical debt is kicking the can down the road. What you're talking about is mostly just a feature overhaul. The modifications the previous tenant made were technical debt.
Re:Using Technical Debt in Your Favor by ThemalSpan on Thursday March 22, 2018 @12:10PM (#16649870)
I don't agree with this. As was pointed out here too, software changes in production all the time. This happens with Buildings too, but on a different time scale. Buildings that were made with forward layouts for HVAC and electrical systems will be easier to upgrade in the future. If you look at old buildings that had networking and such retrofitted in a visible and ugly fashion, I think its fair to say that you're looking at technical debt.
Re:Using Technical Debt in Your Favor by peterwwillis on Thursday March 22, 2018 @12:29PM (#16650125)
In the sense that the alternative is to demolish and build a new building, your example is technical debt. But your example is really an example of legacy systems.

Sometimes, supporting the legacy system can be technical debt. But sometimes when people try to replace the legacy system, they spend a lot of time and money and end up costing way more than simply maintaining the legacy system. This is part of why some nuclear plants will continue to operate on PDP-11's until the year 2050.

Technical debt isn't really debt if it's actually just a part of the cost of doing business. You design your system for its intended purpose, and if it's accomplishing that purpose well, you don't need a redesign. Don't break what doesn't need fixing.

Re:Using Technical Debt in Your Favor by wskinner on Thursday March 22, 2018 @11:34AM (#16649491)
Software is significantly different from buildings in that it can be substantially upgraded or redesigned after going into production. That flexibility means that the first release need not be the last release. The obvious charitable interpretation is that the parent was talking about software.
Re:Using Technical Debt in Your Favor by tarmstrong on Thursday March 22, 2018 @12:32PM (#16650165)
> Software is significantly different from buildings in that it can be substantially upgraded or redesigned after going into production.

I used to think this was true, but after talking to architecture/civil engineering friends a lot about this, I've learned that this is less true than I believed. There are often changing requirements for buildings due to different use cases, changing regulations or building codes, or a change in energy prices (or the social cost of using a lot of energy). Sometimes new technologies are used without a lot of experience with them, leading to high operating expenses for the lifetime of the building.

I asked my friend about your comment and he gave me a few interesting examples: 1) "flying form construction" that leads to exposed concrete slabs on buildings that bleed heat in the winter. This was really cheap to build but turned out to be really awful for energy efficiency (once we started caring). 2) a building in the 50s-60s that was built with automatic window blinds. The maintenance cost of fixing the blinds when they inevitably broke led to them not getting fixed, and the building becoming basically useless.

If you're interested in reading more about this, Stewart Brand's "How Buildings Learn" is a really good read for laypeople. I was really surprised by how much of the book could be applied to software engineering.

(This is not a field I'm familiar with so any errors are mine, not my friend's.)