The Pentagon's Seven Million Lines of Cobol
MrMetlHed writes "A portion of this Reuters article about the Pentagon's inability to manage paying soldiers properly mentions that their payroll program has 'seven million lines of Cobol code that hasn't been updated.' It goes on to mention that the documentation has been lost, and no one really knows how to update it well. In trying to replace the program, the Pentagon spent a billion dollars and wasn't successful."
But - but - cobol is supposed to be self-documenting!
At least that's what my old B-school roommate told me.
Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
a billion dollars to replace an antiquated program and the project fails. This is why our military is the most expensive in the world, and why I've argued for years that comparing military spending between nations is only apples to apples if each nation is competently spending what they are given.
In SOVIET RUSSIA... erm...NSA AMERICA, the Internet logs onto YOU!
http://articles.latimes.com/2012/dec/21/local/la-me-state-computers-20121222
Army in the 90's
Everyone's pay gets screwed up at least once, then. Uncle Sam takes it back
Mostly minor things like an allowance like jump pay being paid while not on jump status
Sounds like corruption. If you can't wrangle up a team of coders and project managers with a billion dollar carrot, then there is something terribly internally wrong with your process.
Give me a billion dollars and I am sure I could hire (and be part of) a team that can do more than just port old code.
Hopefully the soldiers will be on our side in the forthcoming revolution.
They had way more soldiers back then today, and payroll did not seem to be a problem. Maybe the Pentagon should go back to using whatever system they had back then.
it's the old data and all the linked systems and with 40 year old systems just importing data is not easy.
And even if are able to import that can be loads of work around / place holder names / fake names (uses for workarounds or even temp holding of data) and so on.
Some stores do use names like MR cash for cash sales so there may all kinds of fake names in the system as well.
There is basic pay, plus “entitlements” for everything from serving in a combat zone to housing allowances to re-enlistment bonuses. An individual’s pay can change several times in a day.
likely the old software can't deal with all of that to well.
http://www.informationweek.com/government/state-local/outdated-it-blocks-california-payroll-or/225702383
Why the fuck don't they do what any reasonable company does... contract out that stuff to someone who is good at it... like ADP.
As a taxpayer, I am outraged.
According to an info-box, $17.3 dollars is spent per year on computer systems to manage "finances, payroll, and more," and there are 2.7 million soldiers. "And more" must encompass a whole hell of a lot, because otherwise that's $6,500 per soldier, per year, in pure bureaucracy.
I tried to read the article, but it was written in English - a decades-old language.
I wouldn't mind taking this one on. Sure it's already been done, but I'm sure they'd pay to have it done again.
My only stipulation is that I'd want to do it all myself with just one business analyst and one quality control tester.
I think I could manage it in 3 years at 3 million dollars. However I'd probably cause the loss of 10,000 jobs so its probably not going to happen :)
A government payroll is the result of so many laws, regulations, union contracts, executive orders, reorganizations, back room deals, court-ordered adjustments, sacred cows, implied understandings, top officials' nieces and nephews, government shutdowns and budget freezes, that it's impossible for any small army of people to get a mental grasp of what it's supposed to look like and how it's supposed to work.
So you get chaos.
Aww, come on, fellas and gals: this IS the five sided puzzle palace we're talking about. You're expecting too much of them.
"seven million lines of Cobol code that hasn't been updated" is redundant.
If they were updated, they wouldn't be in Cobol.
Big apple, new Yorik, undig it, something's unrotting in Edenmark.
i'm pretty sure they could just pay ADP to do it like everyone else with tens of thousands of employees.
The code base is so large that its ~4.8 lines per active duty US military person. The code would be shorter if it was nothing but one line per person that prints how much to pay. You might argue that this would have maintenance issues, but automated porting of it would be trivial, and for the $billion they spent try to replace it, you could pay almost $1000 per print statement to keep it updated.
Of course any attempt to redo/rewrite it would be a failure, declared so without any contractor ever getting a good look at the complete code. Why... because otherwise all the little electronic fund transfers, loopholes and fake employees would start showing up and I bet that would put an end to someones very lucrative little black book program and god knows what else! I mean what else could be in there? Seven million lines of code sounds like an awful lot even with the diverse nature and considerations of military payroll and the gross incompetence of government contracted work!
The DoD is well known for changing the specs of a project constantly through out the life time of a program so I'm not surprised the update in the 90s failed it probably had 5,000+ changes from it's initial concept and then you add in the required corruption and incompetence needed to be a government employee or contractor and it makes perfect sense it failed.
for a billion dollars, could we not just higher a bunch of accountants and have them hand write and sign the payroll checks. really! a BILLION dollars, and still broke? geeze
I wonder if part of the problem is that this is overly centralized. Someone above mentioned how they did this all with paper in WWII. I can't imagine the pay for millions of service personnel being calculated by an army of clerks based in Indianapolis. The actual calculations must have been more distributed, with perhaps pay records following a soldier along with his other records.
Decentralizing it should make the bureaucracy more flexible too. Especially in hardship cases like the one described in the story, there should be a way for some local officer to say "give him his regular pay until this is sorted out". Being in the military is no way to get rich, so these people usually don't have a big cushion to live off of. If it turns out the soldier wasn't entitled to the pay, then except in cases of obvious fraud (which I'd think would be a court martial offense) they can give them time to pay it back, maybe with some minimal interest. Come on, the IRS can track anybody and everybody if it really comes to that. At worst, if some guy gets paid a few bucks that technically he wasn't entitled to, I'm not going to get too upset about it. We're definitely not talking CEO bonuses here.
Big disclaimer: I'm not a vet. I suspect someone will say "that's not how the military works", which may well be true. I suspect it was something closer to a decentralized system in WWII though. I doubt some guy in Pearl Harbor coming back from a sub patrol had to wait for a piece of paper from Indianapolis to get paid. If someone in congress was serious about fixing this they could too. I would hope this kind of thing would get sympathy from everyone. Then again there's a federal law that says you can't foreclose on someone's house while they're serving overseas. You don't think that stopped the banks, do you? Or that they received any serious punishment because of it.
when you give work to the lowest bidder, you're bound to pay for inept programmers instead of computer scientists
Eh...there probably was some half baked documentation at some point,
Yes, there was and there is. It's called "source code." One of the reasons that COBOL is such a verbose language is that it was designed so that bean counters with no programming experience could audit the source code and understand it well enough to make sure that nobody was stealing anything. Not only that, it's rare that COBOL code actually needs any comments because the variable names are long enough that you shouldn't ever have to guess what any of them are used for or what's being done with/to them.
As far as spaghetti code goes, that can be a problem, especially in very old code, from before such things as structured programming were conceived. And, there's even a statement, "ALTER," which allows you to create self-modifying code, although even back in the '80s when I learned it in school, we were warned never to use it.
Good, inexpensive web hosting
probably, they had punched card ibm systems.
if you think there were 'no problems', im not sure i agree with that. im sure there were problems.
the main difference between WWII and now is that the US did not have a massive, bloated, standing army taking up hundreds of billions of taxpayer dollars every year before around 1940. before around 1917 there wasnt even a federal income tax from which they could draw all this money to waste (funnel to awful private contractors)
but that old code had to fit into 80 columns and other really limits
Regardless of your political leanings this is a job that the private sector could handle way way better. It is super hard to create a good software shop...let alone being the military.
We use paycor and we have good to great IT in general. We could program a pay app, but why the hell would we? Is pay schedule really that complicated....if it is why not simplify it...a great opportunity for reform.
Seriously, a Billion Dollars?
Incompetence. This sounds like explaining to the boss how you can't write a program to pay 3.25 million employees accurately and on time.
Then explaining how you can't write a program that pays 325,000 employees accurately and on time.
Then explaining how you can't write a program that pays 32,500 employees accurately and on time.
But they did in the 60s.
Just as the FAA has sunk $ into new air traffic controls software with nothing to show for it, and New York City ditto with payroll software, incompetence. But I was watching the NMCI grind its way towards me a few years ago, and that was disaster on afterburners. I should know by now the Government is probably not the model of competence in many areas.
I wonder, though if they might ask Social Security how they get checks out every month. Maybe that is the software model they should look at, or *gasp*, consider that they cannot use a better tool then COBOL. So stop looking.
deleting the extra space after periods so i can stay relevant, yeah.
when the mil/gov spend a billion on some software project and it fails, we need to start calling it what it is: fraud perpetrated by consultant/contractors.
it's bad enough when the industry burns 10-50M on an ERP project for a company (or university!), but pretty soon those tens of millions add up to real money. spending a billion should be HARD!
For $1B I'm sure either one of them could have done the job.
Either run payroll for a while, or delivered a turnkey system that worked.
Sheesh.
Only 7 million lines? That doesn't seem right for a government project at all... Way too small.
I worked in NOC at DOW and we had very good documentation. Including the documentation on making documentation. For that kind of money you could have brought back the same people who documented it in the first place. If you want good documentation today or dont have any. I know what your problem is, you need to hire more females on. They nag the guys into doing better sucks for the guys until those docs save the company millions. Say a router is down and the printer cant print bills of lading so the trucks are backing up. But you put the router number in and the docs come up showing a dsl back up. boom the printer is printing and money is being made. Because the last time it went down they documented even what commands they used to bring up that link to the dsl. Just an example but works everywhere. Everyone should be updating those doc like if equipment has moved to a new location. I hope there is down time and not putting out fires all the time. If so you really need good docs. You need to assign one person on each of your teams to hold the hand of new people and have everyone document everything. Example I left my station to fart did 60 second turnover before handing off the station to J Wilks Booth. Why I wrote all that bored.
For 33 years the government has been trying to replace the 60 year old air traffic control systems. Three different systems have been tried. The first was a complete write off, meant to be an IBM designed Unix based system, it went overdue by years and billions and was killed off in 1994. http://www.baselinemag.com/c/a/Projects-Processes/The-Ugly-History-of-Tool-Development-at-the-FAA/ The Second named CARTS began in 1996, meant to be a replacement for the aging radar systems the program did replace the older systems in some airports, but again the program was killed for cost overruns and stalled production. http://www.fiercegovernmentit.com/story/tracon-air-traffic-control-modernization-faces-prospect-more-schedule-cost/2013-06-02 http://www.bloomberg.com/news/2013-05-31/air-traffic-upgrade-over-budget-facing-delays-report.html In 2003 they revived the project with compartmentalized implementations of an integrated system in order to see short term improvements. The first system, a replacement for CARTS renamed STARS) went in in 2012 and it is costing 60% more than expected, with the remaining systems set to be developed and implemented over the next 13 years. The next system to be implemented, ERAM, is already overdue by 4 years, over budget, and according to FAA reports, subject to critical failures and instability. http://www.airtrafficmanagement.net/2013/06/nextgen-over-budget-delays-certain-report/http://www.fiercegovernmentit.com/story/eram-continues-undergo-critical-failures/2012-10-02 http://en.wikipedia.org/wiki/Next_Generation_Air_Transportation_System
Write a new system from scratch, and transfer payroll from the old one to the new one.
Once everyone's migrated, chuck the old system in the bitbucket.
Very common in older mainframe shops. Poor source control. You can reverse engineer it but good luck.
I hate being bipolar; it's awesome!
"The department’s authorized 2013 budget, after sequester, totals $565.8 billion - by far the largest chunk of the annual federal budget approved by Congress. Yet the Pentagon is literally unable to account for itself. As proof, consider that a law in effect since 1992 requires annual audits of all federal agencies – and the Pentagon alone has never complied."
but that old code had to fit into 80 columns and other really limits
Some of the variable names those farts chose would make a fair sized subroutine today. Back then, there was FORTRAN with one letter variable names, and COBOL in which you could fall asleep before reading to the end of one.
"Tongue tied and twisted, just an Earth bound misfit
Cobol is based on the notion of processing what are essentially formatted text files, one line at a time. If you knew the format of a file to be read by a Cobol program, you could re-write it in awk and use about 1/50th the amount of code.
Of course what really needs to be done is to document the actual process and system requirements, and then just put up a modern payroll processing system. The biggest problem is that there are a lot of people whose job it is to take a piece of paper from one bin and put it in another. All of those jobs would be put at risk were you to actually do something substantive about this problem. They're far more concerned with their jobs than actually getting anything done.
How do you spend a billion dollars trying to wrangle legacy code? 500 programmers at $200K per year for 10 years? How is it even possible?
Signature intentionally left blank.
Who would risk looking at seven million lines of Cobol code? I'd have better luck keeping my sanity if I looked Cthulhu square in the face.
Happy people make bad consumers.
i am good in coding
I thought they had all these wiz bang cyber warriors! People so smart that they can make your head explode with their extreme cyber hacker power..... Oh right that was total bullshit.
Good leaders run toward problems, bad leaders hide from them.
Back then, there was FORTRAN with one letter variable names, and COBOL in which you could fall asleep before reading to the end of one.
No, COBOL names are limited to max 30 characters.. That's nothing compared to some of the java monstrosities I've seen.
And newer Fortran, like F90, has a limit of 31 characters, i.e. longer than COBOL.
As proof, consider that a law in effect since 1992 requires annual audits of all federal agencies – and the Pentagon alone has never complied. It annually reports to Congress that its books are in such disarray that an audit is impossible.
I don't even understand how this can be a valid excuse to avoid an audit. So the books are in disarray. So what? That's never going to change unless you do something about it. Granted I'm sure it's to their benefit that they avoid an audit so unless we can actually force them to get their shit together they're just going to keep playing dumb.
Who needs software? Print lots of $100 bills, put into suitcases, put suitcases on pallets, and ship to Commanding Officers around the world.
Fiat Lux.
Whether any of their 'developers' are under 40 years of age. I remember fixing thousands of Y2K dates in working storage ...oh 15 years ago... and now I seem to be 50 years of age! How'd that happen? Crap!
3 decent programmers, experienced 10+ years. Business and HR programming preferred.
Military pay regulations and laws + 1 lawyer and 1 accountant (possibly on loan from GAO)
1 Documentarian
1 project manager
1 QA/tester person
COBOL licenses, microfocus or whatever
Time on a good QA instance of the system
Data. Lots and lots of data.
And about 18 months to unsnarl it. IT WILL NOT BE REPLACED IN 18 MONTHS. But it will be understood. Then we we can talk about a replacement.
putting the 'B' in LGBTQ+
i woulda fixed it for them for half a billion!
Srsly, we trust these guys to hold on to our information and they can't even get their employee payment systems right?
Well, it's a good thing that Cobol was required training for the 3C0x2 career field in the Air Force. ... oh wait, they outsourced all of those... Ooops.
Select from tblFriends where interesting >= 4;
The problem isn't COBOL is is bad management. I think that really says it all. You have to manage a project and that means you have to have support at a high enough level that the impacted departments get their marching orders in agreement with the master plan. Otherwise you are doomed if you have to fit the solution to the middle management tier's "requirements" because their "requirements" are that everything stays the same so their jobs and departments are unaffected by the new solution. That's not going to happen in a ground up re-implementation.
...the NSA and the military alike are full of codebreakers and analysts. 7 million lines of code should be nothing to people that translate Chinese Mandarin and pick out buzzwords.
At least their nuclear missile silos aren't operated by such a program.
(... I hope.)
This is common to private industry as well, the only major difference being the scale of the project. The government needs to define a process that maintains the chain of custody of important software, and this should be redundant. If multiple persons or organizations are charged with this activity, it is less likely that a death or corporate bankruptcy(or simple lack of interest in continuing the contract) will create the situation where you have 7 million lines of code that nobody employed or contracted have any idea how the bollacks it works. I would suggest a few policy changes to improve the situation, 1. retain the right to directly hire or offer contract to any person employed by a contractor developing software if for any reason that contractor should cease being the contract. 2. when contracting or even writing software in house, on large projects(anything projected to have more then say a million lines of code), also hire a second development house to review and file bug reports on the software, submitting a patch history to both the primary developer and the software owner/government. 3. as relates to point 2, the second development house, as part of their contract an option to make them the primary developer in the event that the original developer can not fulfill the needs of the work, or cease being the developer for any reason.
It seems to me that many private sector software companies could write a substitute program for less than a billion.
The article links to a preview of Reuter's new broken web site. I'm as worried about the gradual breakage and uselessness of the Internet than I am some old COBOL code. "You need to have Javascript enabled in order to use Reuters.com. Here are instructions on enabling JavaScript in your web browser." The old Reuters did not require JavaScript. Content will eventually be completely inaccessible. The original web was never designed to be hidden behind a layer of obfuscation like this.
Maybe it's based on the Frank Herbert story of the government office dedicated to slowing things down intentionally, hence their motto: In Lieu of Red Tape.
Now knowing what we do about the military-surveillance complex, any major eff ups like this may be a blessing in disguise.
Just toss it over the wall to ADP. People have been running payroll systems for 60 years.
But my favorite part? There are nearly 2.5 million active and reserve members of the military. Amazon sells a three license copy of Quickbooks Pro 2013 for $400. Just sayin'
Changing out the whole darn program is pretty daunting and (it seems) impossible. But why not just incrementally replace portions? Eventually, it would all get changed out no, it would just take a while? I'm not a professional programmer so I'm genuinely curious about the challenges.
"Consensus" in science is _always_ a political construct.
There is nearly the same amount of code in MUMPS that manages the DoD's healthcare records back to the early 70's. It's a mess.
Skynet was a COBOL program and these are its seeds! Be afraid.
What this project clearly needs is a multi-million dollar effort to port all that COBOL code into today's hippest new language. That way any code in there that happens to actually work right through some fluke of fortune, will get new bugs inserted into it. Then we can do it all again when a new language becomes more fashionable next month.
I have to go now. They're totally rebuilding my building, now that there's been developed a snazzier way to weld joists. I'll get back to you in 9 months, if everything goes to schedule....
1. The system has 7 million lines of code that han't been updated, how many lines have been updated? A+B just might equal something much bigger.
2. I've seen COBOL object code where the source was lost. Some poor programmer was maintining it by hex editting the object file. Only guy I ever met who could look at a hex dump and actually recognize the result of a PERFORM statement.
3. If you want a new system that does exactly what the old system does then in a lot of cases you may as well keep the old system.
4. Grokking 1,000 lines of code per hour and given a 2,000 hour work year gives an initial read through of 3.5 mythical man years for just the stuff that hasn't been changed. Good luck.
5. The actual base calculation is probably very simple ( rate of pay per unit of time times number of units of time at that rate). Its the 5 billion edge conditions and being able to record and audit them that makes things interesting. Giant bureacracies become giant beauacracies by making up and dealing with huge numbers of rules that no one department much less individual could ever know in toto.
6. Very large organizations run into problems with data management that are simply due to the amount of data being way larger than normal technology regularly handles. I attended a lecture on the Large Hadron Collider where they were talking about developing a way to record the massive amounts of raw data that was being produced. The expected solution was to have over 1,000 processors deciding what to keep and storing 3 months of selected data in one or more warehouses full of 12" tape reels. They were still trying to decide on how many warehouses. They were also modifying a Fortran compiler to translate formulae written the way high energy physists wrote equations. This was to minimize the possibility of an error creeping in from what the theorists said and what the programmers thought they said. Sort of like having accelerometers that can only be installed in one direction.
$79 per month, full service (http://payroll.intuit.com/).
$1B divided by $79 per month equals 12658227 months of service.
I'm thinking he Pentagon could have *BOUGHT* Inuit outright for $1B.
And these are the people whining over the sequestration.
7 million of undocumented COBOL code that will cost billions to update or replace with a modern language -- a harbinger, I think, of the end of civilization as we know it.
And If you bothered to research maths you'd know that the exponential is a function that describes the relationship between two variables, not a comparison between two values.
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
I've only had a little experience with COBOL but from what I've heard COBOL is still being developed. I've heard they've added OOP like support so has anyone developed any unit testing or refactoring support?
Relying on previous cases reported elsewhere.
That's probably 20thousand to 100 thousand lines of actual logic and setup, and the rest is made up mostly of explicit print statements - for about 350-500 actual paychecks. Plus necessary page jumps, messages for operator to change tape reels, bell ringing, etc. >:p
The real problem is that it was coded by personnel left over from the Code Talkers .