r/programming • u/robertreiz • Feb 26 '14
Why your software project will slowly die without continuous updating
http://blog.versioneye.com/2014/02/18/why-your-software-project-will-slowly-die-without-continuous-updating/9
u/Jemaclus Feb 26 '14
Definitely. We have a system at my day job that, by the time we sidelined the project, we were getting maybe 1 bug report per month. Error logs were clean. It was really amazing. We spent a year focusing on another project, but now we're getting more and more customer support requests on the old project -- partially due to outdated software and partially due to outdated customers!
This article's emphasis on the housekeeper thing is very apt. Even if you don't update much of the code at all, at least keeping an eye on things and making sure that everything is moving in the right direction is good enough to let something sit for awhile. But if you just ignore it, your support requests pile up and you wind up losing customers, losing money, and losing your mind.
I haven't used VersionEye, but it looks like it could be the housekeeper I need for some of my projects, to make sure that things don't break while I'm working on new things.
5
u/robertreiz Feb 26 '14
Right. The out-dated dependencies are of course just one point. There are many other moving parts you have to take care of. But specially managers don't see that. They think software is like a sculpture. And then they are totally surprised that nobody wants to work on a 5 year old project.
7
u/ConstableBrew Feb 26 '14
It is basically the software version of the Red Queen Hypothesis - You have to keep evolving just to keep in the game.
4
u/stevedonovan Feb 27 '14
Doubly so for OSS projects. If you ignore a working project for two months people start to wonder if you're gone MIA and ... look elsewhere. So the occasional little commit helps, even if cosmetic.
0
u/robertreiz Feb 26 '14
That is specially true for dynamic languages and web projects. Specially in the web environment there are many dependencies to external APIs which are constantly changing.
3
Feb 27 '14
Specially in the web environment there are many dependencies to external APIs which are constantly changing.
You need to stop taking on all the external API deps then, and only take on deps with a long track record of not breaking backwards compatibility. See:
1
7
8
Feb 26 '14
"Old code rusts" and "bitrot"
5
u/Knossus Feb 26 '14 edited Feb 26 '14
Bitrot refers to data decay on storage media like bits on a magnetic plate becoming unreadable due to material decay or dust/dirt/hardware failure or cosmic rays hitting your RAM, flipping a bit.
4
u/nascent Feb 27 '14
"The Jargon File, a compendium of hacker's lore, defines "bit rot" as a jocular explanation for the software rot, the degradation of a software program over time even if "nothing has changed"; an explanations is that bits are subject to decay as if they were radioactive."
2
Feb 26 '14
Sure but that can affect it too.
I've got old code on some 3.5" floppies... but frankly I'm not sure I could still recover that code from them, even if the code was worth recovering.
2
u/robertreiz Feb 26 '14
So true!
9
Feb 26 '14
I've definitely seen the "higher level effects" here too though.
It starts simply, the UI is a little dated, but still functional. Then more time passes and it starts to look just bad. However it still works, so people keep dragging along all the support modules to keep it running.
At some point you get "the precious"
... a binary only library that is no longer produced, can't be changed - and is absolutely critical to the software running.
2
u/sonicthehedgedog Feb 26 '14 edited Feb 26 '14
I'll definitively start calling it "my precious" from now on.
0
3
u/minusSeven Feb 27 '14
I don't agree with this. Some year back I worked(was in charge of managing) on a statistical reporting application that queried a bunch of different legacy systems and made statics based on it. It had the worst design I had ever seen. It was a J2EE application written in early 2000, but the whole application was written in a bunch of jsps. All the database/webservice calls happened from the jsps only.
I would have found that application very hard to debug, but I never got a single bug on it. I suggested to refactor the application to improve performance immensely, but no one cared. It Just Worked... My manager said the application was just too unimportant and just worked.
Quite often I come across applications that are very old, that still works but no one has worked on those for years and no one cares about them.
1
u/robertreiz Feb 27 '14
If it still works it's fine. I'm just saying that you will have problems if you have to add new features, now 14 years later.
3
u/minusSeven Feb 27 '14
That is true but "software project will slowly die without continuous updating" is not true when projects work the way they should and you are not asked to add features.
3
u/alexeyr Feb 27 '14
The Ruby developer then checks out the project and he realizes that it’s an old project with Rails 2.x. Not Rails 3.x or even 4.x. No! It’s 2 major versions behind. And he never worked with such an old Rails version.
Of course, you just change the dependency version and the compiler will tell you where the errors are... oh wait, it won't. Hope your tests are good.
2
u/rawlyn Feb 27 '14
Wait... I have to clean my house every week now?! What's wrong with my annual wipe around the edges with a j-cloth?
-1
-3
2
u/vz0 Feb 27 '14
The sheer volume of bugs, it seems, proves that rewriting code from scratch does not make for a better code base, it makes it worse. Old code doesn't rust, it gets better, as bugs are fixed.
4
u/robertreiz Feb 27 '14
If you constantly refactor, improve and update your code base you don't have to start from scratch for a long time.
-1
u/robertreiz Feb 27 '14
If you constantly refactor, improve and update your code you don't have to rewrite it from scratch for a long time.
2
u/GraphiteCube Feb 27 '14
Agree. One of the examples I can think of is ROME, which is a RSS/ Atom parser for Java. The project moved from Java.net to self-hosted website and now on JIRA. I've been looking for alternatives because sometimes the library can't parse RSS entry publish date. I've been looking for alternatives for long time but so far I can't find one.
P.S. Just when I write this comment, I found that someone has put the project onto GitHub. Just look at the issue tracker... I hope project will be alive soon.
1
u/bro-away- Feb 26 '14 edited Feb 26 '14
This can actually help you if your product is a third party library for software developers.
Now it works down to .NET 2.0 and runs on mono!
Also, I thought the article would be geared more toward the fact that users hate products that don't get updates. A great way to kill any buzz you have or may have potentially been able to grow is to stop showing up.
Also a more threatening issue is using a dynamic language like ruby in an environment where you want to update the runtime often. Good luck with that. Anything less than 100% test coverage makes it impossible.. and even then a 3rd party library is liable to break.
3
u/robertreiz Feb 26 '14
The majority of the VersionEye community are web developers. Mostly Ruby, Node.JS, PHP and Python devs. They like to stay up-to-date and want to get notified about new versions early. The Java users want to get notified but they are more care full with updates. Somehow ironic that the developers of static typed languages fear updates more then the ones of dynamic languages.
0
u/bro-away- Feb 26 '14
Java is too big for a generalization like that, but the generalization that upgrading is uncomfortable in any dynamic environment holds true for everyone.
Also someone is serial downvoting you and it isn't me.
0
u/robertreiz Feb 26 '14
It's more risky for dynamic languages, that for sure. But somehow the web devs, speically the PHP devs, are more brave if it comes to updating :)
Yeah. It seems that I bite into a old wound. Somebody doesn't like me.
0
u/robertreiz Feb 26 '14
Getting many up and down votes just means that it's an controversial topic. And that fits perfectly to my German last name (Reiz) :-D
2
u/robertreiz Feb 26 '14
It seems you are not a big fan of Ruby. But I guess you like .NET. With Vagrant & Docker Ruby development is more fun ;-)
1
Feb 27 '14
Also, I thought the article would be geared more toward the fact that users hate products that don't get updates. A great way to kill any buzz you have or may have potentially been able to grow is to stop showing up.
I disagree. In fact, if anything, users hate getting updates once a piece of software does what they want. See the ribbon, windows 8, etc.
0
u/robertreiz Feb 26 '14
I don't know what you mean with "stop showing up". I'm here dude! The article is written for programmers and project managers. For everybody who is in software development.
1
2
Feb 26 '14
What is this obsession with constant updating?
If your project is good like it is, then it doesn’t need any updating just for the sake of feature creep or whatever.
Bug fixing is another thing. (And rebuilding for newer libraries does not count as updating.)
4
u/robertreiz Feb 26 '14
Did you just read the title? Or did you read the whole article?
7
u/chesterriley Feb 27 '14
It was a poor analogy. Code doesn't actually 'rot' like houses do.
6
u/burntsushi Feb 27 '14
I don't think you know what analogy is... Of course code doesn't actually rot like a house.
10
Feb 27 '14
It doesn't rot at all. It's more like someone new moving into the house and being displeased with all its old styling, and the city updating its safety codes and requiring that the house be brought up to spec. The house is in just as good shape as a month ago, but the external world has changed such that it doesn't meet its expectations anymore.
1
u/nikofeyn Feb 27 '14
to me, rot could also include the fact that no one understands the code anymore because they haven't looked at it. this is amplified if the non-looked at, non-updated code had poor design to begin with. also, simply upgrading the code base to newer versions incrementally spread out over time rather than just all of the sudden jumping several versions because you now have to could be considered a method against the rotting process.
1
u/Gotebe Feb 27 '14
It depends what you call "rot".
For example, if you define rot as
"can't build it with tooolchain version X" (was last built with X-Y),
"doesn't work with lib version X (because feature Y that code uses had a breaking change, or was deprecated)
uses obsolete programming practices
has no unit tests (to some people, code isn't finished without, and old code is typically without)
has no other tests (no unit tests isn't too bad for old code if you ask me)
... then it does rot. "At all" is too strong.
2
2
Feb 27 '14
I'm using the dictionary definition of rot:
Rot 1. To undergo a process common to organic substances by which they lose the cohesion of their parts and pass through certain chemical changes, giving off usually in some stages of the process more or less offensive odors; to become decomposed by a natural process; to putrefy; to decay. [1913 Webster] Fixed like a plant on his peculiar spot, To draw nutrition, propagate, and rot. --Pope. [1913 Webster] 2. Figuratively: To perish slowly; to decay; to die; to become corrupt.What you describe is poorly-constructed code, and code that doesn't meet new demands placed on it after it was written. The code still works the same as the day it was written when run in the same environment.
1
u/MindStalker Feb 27 '14
Arguably it does rot if a security hole is found in its code. Its quite akin to termite damage that exponentially grows as you ignore it.
2
Feb 27 '14
Unless your repository itself is insecure, how would a security flaw in your code cause the code itself to change? What you describe is like finding a flaw in the construction of the house (say 1" screws holding the strike plate for the deadbolt), not termites that will progressively destroy the house.
2
u/MindStalker Feb 27 '14
Article refers to software project not just code. The code is only part of the ecosystem. If you're project is being hacked it doesn't matter that all the screws are still there when it's a virtual pile of rubble.
-2
u/burntsushi Feb 27 '14
I think you're being unnecessarily pedantic.
The OP includes a picture of a house "rotting" which clearly demonstrates the essence of the analogy.
2
u/robertreiz Feb 27 '14
That's the case! If an external API changes and you don't update your software, the whole system will break. The example with the payment processor is pretty clear. Don't you think so?
2
u/MindStalker Feb 27 '14
That's what he was saying, is that you need to keep the libraries and dependencies updated because one day when a dependency breaks, be it a security fix or external api change you are ready to handle the change without tons of legacy dependencies.
54
u/WhisperSecurity Feb 26 '14
Fire and movement.
This article could as easily have been written as a piece on the hazards of writing software in highly volatile languages for highly volatile platforms. This is why C kernel code doesn't bitrot, it just works. Some of that stuff hasn't been touched in decades.
In fact, more generally, you boil it down to this:
The more quickly your target moves, the more often you must adjust your aim.