How DevOps Can Cut Innovation-Crushing Technical Debt - InformationWeek
IoT
IoT
IT Leadership
Commentary
1/21/2015
08:06 AM
Connect Directly
Twitter
RSS
50%
50%

How DevOps Can Cut Innovation-Crushing Technical Debt

These five elements can reduce the technical debt that builds up when rotten code and bad practices get into your systems.

A good friend of mine is an awesome coder, but lousy with personal finances. Some years ago I remember him being hounded by creditors after he'd racked up a fairly sizeable credit card bill. It got so bad that he'd turn off his cell phone to avoid calls. Not good, you say? True, but at least these debt collectors weren’t in the "pay up or we’ll organize a hospital visit for you" type of game.

Geek nostalgia aside, the trials and tribulations of my credit challenged friend is analogous to the larger problems we face within enterprise IT when acquiring and failing to pay back what we commonly call "Technical Debt."

Coined originally in the Agile Manifesto back in 2001, technical debt refers to the price organizations pay when releasing badly designed code. Like my friend's problem, the more debt we accumulate, the more interest we pay later. When it comes to bad code, companies can accumulate so much technical debt that in severe situations any thought of innovation takes a back seat to costly firefighting.

Organizationally, the main blame falls on developers and architects. After all, any undetected code defect that makes its way into production is probably a 100 times more costly to fix than if it had been picked up in the early stages of development. And, as developers move onto other projects and priorities shift, defects become harder to fix and the compound interest grows. It’s a vicious cycle.

With increased business pressure to rapidly deliver software innovations, how can we avoid going into technical debt? The DevOps movement with its heritage in Lean thinking and Agile provides some of the answers.

Here are my top DevOps practices that help reduce technical debt.

1. Avoid bad spending habits – My coder friend with his credit card was like a kid in a candy store. He just couldn’t resist the urge to spend big, while avoiding payment until his next salary check. In IT we have similar bad habits we're allowed to get away with. For example if there are constant delays in release and deployment processes, a maxed out developer can perhaps "put off" some code optimization, knowing they can get back to it later since the code won't be released for a while anyway. Invariably they never get back to the fixes.

To combat these bad habits, teams should seek out and destroy the conditions that cause them. For example, to help prevent defects, teams can establish testing earlier in the software lifecycle. That situation and automated deployment processes mean teams can't hide sloppy code behind delays and release bottlenecks.

2. Consolidate your debt -- People with credit problems often spread the debt across many cards. In IT, our debt often spans multiple systems, many of which are built upon badly designed and developed code bases. In these cases it's no surprise that short-term fixes and bad code perpetuate themselves. If code is bad to begin what’s the point in finding a more elegant solution?

There's no easy answer to this problem, so my advice is to start an initiative to identify the biggest problems and address these first. This is a tough call, because it involves balancing new app development versus paying off our debt legacies. In the long term, however, the benefits should outweigh short-term slower delivery -- provided of course the design and architectural mistakes of the past aren’t repeated.

 3. Seek guidance and counselling -- Breaking bad personal finance habits is tough, so people normally seek outside help. In software development this involves using code- and peer-level reviews, mentorship, and management guidance. Too often, however, this advice centers entirely on development -- meaning IT dismisses operational considerations or, worse still, avoids them completely until the "debt" goes over the wall into production.

To avoid these situations, it's imperative to involve IT operations right from the start of development and continue to provide essential feedback (such as performance management guidance) across the software development lifecycle. This is where a DevOps approach helps, since a key aspect of the movement is closer collaboration and communication between development and operations teams.

4. Avoid "spend more" incentives -- Folks get into debt because they succumb to temptation -- like, spend today and earn double frequent flyer points, or enjoy 0% interest terms for six months (then get slugged). Sadly we often apply the same "carrots" in development -- using incentives tied to function points, the number of user stories delivered, or even lines of code written by a developer.

This approach might guarantee lots of code, but what about the usability? More functions might earn development a green light, but will the customer love those functions? Furthermore, if developers have incentives for just shipping code, why should they care if an application has a less-than-optimal database call, or doesn't immediately meet a security compliance requirement?

5. Think broadly about your debt position -- While it's easy to blame development for the accumulation of technical debt, operations can be just as guilty. For example, failing to document infrastructure services could lead to longer problem-diagnosis times, while poor insight into application performance and capacity during pre-production may lead to a knee-jerk procurement of unnecessary hardware.

Once again DevOps-style collaboration can help. By involving the development team in ongoing debt-reduction programs, DevOps teams can better identify people, process, and technology inefficiencies. For example, collectively reviewing mobile app analytics for usage patterns could help operations determine how poor network configurations are increasing latency and, most important, dragging down the customer experience.

In an age where customers call the shots, ignoring technical debt is deadly. Ultimately it ends up consuming much of the organizational blood, sweat, and tears that should be dedicated to digital innovation and business transformation. 

Peter Waterhouse is a senior technical marketing advisor for CA Technologies' strategic alliance, service providers, cloud, and industry solutions businesses. View Full Bio
Comment  | 
Print  | 
More Insights
Comments
Newest First  |  Oldest First  |  Threaded View
Charlie Babcock
50%
50%
Charlie Babcock,
User Rank: Author
1/22/2015 | 7:48:37 PM
The cloud is good for testing
You can also use the cloud to create a templorary test environment that has all the production elements. This is actually a big change from the days when the project leader had to go up and down the data center, trying to scarf a few servers for a test environment and falling short most of the time. It'll cost you in the cloud, but it's also a short lived expense. Production failures cost you also.
SachinEE
50%
50%
SachinEE,
User Rank: Ninja
1/22/2015 | 6:36:37 AM
Re: The code is good, but still doesn't run with all of an app's dependencies
@Charlie: Right you are. Having debts (both time and money) can lead to erratic decisions which would again lead to post release backlashes because of bad coding and/or bad support. This can only be eradicated if repeated checks and rechecks take place at each development station. Although it sounds easy but in reality, its a little tough. People working in the same department have less chances of seeing fault in a code that is working perfectly (the beta version) hence at the end of each development term, software developers should show the codes to other departments for corrections as well.
SachinEE
50%
50%
SachinEE,
User Rank: Ninja
1/22/2015 | 6:27:58 AM
Re: The code is good, but still doesn't run with all of an app's dependencies
"Being realistic at all stages and ensuring that the entire team is on the same page will help reduce those nasty surprises, but it only works if everyone has the right goals in mind!"

@Stratustician: That can come with a lot of floor management and counselling. Having a team under a leash is harshly looked down upon because it bottlenecks their working potential, but the reverse is true: without having a guidance, their skills would not be helpful at all.
Stratustician
50%
50%
Stratustician,
User Rank: Ninja
1/21/2015 | 3:16:53 PM
Re: The code is good, but still doesn't run with all of an app's dependencies
Just to add to this, throw in changing requirements, user feedback and ensuring that the right data and security controls are in place, and it's going to get really messy if you don't have the right checks in place as you are going along.  Requirements change, just like budgets, and if you ignore them like a bad credit card bill, you're just going to see something uglier when the interest (or vulnerabilities) hit.

Being realistic at all stages and ensuring that the entire team is on the same page will help reduce those nasty surprises, but it only works if everyone has the right goals in mind!
Charlie Babcock
50%
50%
Charlie Babcock,
User Rank: Author
1/21/2015 | 2:56:43 PM
The code is good, but still doesn't run with all of an app's dependencies
This is a good commentary, Peter, and addresses the burden of accumulated software glitches and bugs that tends to build up into time-consuming maintenance problems. Many people ask how can so many bugs make it into production, and I don't think they have a picture of how frequently things change around productions systems, introducing new failure points. Developers can produce high quality code, but it still won't have 100% uptime unless its been thorougly regression tested -- will it work in the total, complex target environment.
How Enterprises Are Attacking the IT Security Enterprise
How Enterprises Are Attacking the IT Security Enterprise
To learn more about what organizations are doing to tackle attacks and threats we surveyed a group of 300 IT and infosec professionals to find out what their biggest IT security challenges are and what they're doing to defend against today's threats. Download the report to see what they're saying.
Register for InformationWeek Newsletters
White Papers
Current Issue
IT Strategies to Conquer the Cloud
Chances are your organization is adopting cloud computing in one way or another -- or in multiple ways. Understanding the skills you need and how cloud affects IT operations and networking will help you adapt.
Video
Slideshows
Twitter Feed
Sponsored Live Streaming Video
Everything You've Been Told About Mobility Is Wrong
Attend this video symposium with Sean Wisdom, Global Director of Mobility Solutions, and learn about how you can harness powerful new products to mobilize your business potential.
Flash Poll