IRS details strategy for replacing its most ancient computer code (2020)
federalnewsnetwork.com
federalnewsnetwork.com
> White added, “The Java that was created by the automatic tool [Wang’s process] looked a lot like the ALC. However, it’s not the kind of thing where we could hire a journeyman Java programmer off the street, and give it to him or her and and have that person be able to really understand what it was doing.” IRS, he said, in effect would have replaced code it can still deal with, with code no one could.
That's good engineering management right there.
If you have engineers that understand the old code, couldn't they just continue to maintain it in that form and transpile it until it's converted to idiomatic Java?
Basically what the ancestor comment enumerated. It basically allows for a more conservative and incremental approach to rewriting things, since it would give you the ability to mix old and new code.
It seems like they plan to do some parallel testing, but if they used the transplier (and it was correct), they could probably do that at a much lower level (e.g. run both functions in parallel in PROD but only use the "old" functions results, log any discrepancies, you know you're done when there haven't been any for a while).
> However, it’s not the kind of thing where we could hire a journeyman Java programmer off the street, and give it to him or her and and have that person be able to really understand what it was doing
A kind of false equivalency. You can't hire a "journeyman (any) programmer off the street" and have them understand the IMF or ALC. Or any complex app.
> IRS, he said, in effect would have replaced code it can still deal with, with code no one could
So don't do that. Keep the IMF source code and translate it or run on an interpreter. But - they don't want to do that! They are just beating around the bush saying they want a clean-sheet design. OK, then say that.
From the article:
> teams identify what it’s doing and document the rules. Then it gets passed to an architecture and design team that includes "very senior Java developers"
Doomed.
You could take the existing code, refactor it a piece at a time into more procedural code in a higher level language and make it more maintainable. If you try to reverse from assembler into OOA/OOD style requirements and patterns in one step and then implement it top-down. Everything by committee. Doomed.
That's true, but it's way easier to hire people to write in a language that's widely used and has other career opportunities. A language on life support isn't going to be attractive to the vast majority of programmers and with government pay so much lower than industry, low pay + dead end skills makes it very hard to hire. It's not like the engineering leader in charge of this project can just go ask for more budget to hire some rockstar engineers to knock this out, they're stuck with congressionally defined pay scales. So what they're doing is building their architecture and process around their organizational constraints. That's really good engineering management.
No way could they hire engineers "off the street" and understand it right away, that's BS. They say that Wang's method couldn't do this, but slyly imply theirs can. That's what's false.
I think this is politics for "if we say clean-sheet re-implementation it sounds scary".
The problem is that it is and should be scary and instead of papering over it with cleverly packaged and admirable goals, they should come up with a real plan to do it. That's what makes me think, well excellent politics and strategy, but not-so-expert engineering and technical management.
The source code is actually available, written in a language called 'M'. It's been discussed a few times here on HN before: https://news.ycombinator.com/item?id=25208853 (just to link one example).
* https://en.wikipedia.org/wiki/Hercules_(emulator)
Not sure how hard it is to get the system software.
There are other ways to get time on one, including via IBM in an 'online course' of sorts:
* https://mainframenation.com/mainframe/how-to-get-a-mainframe...
Past Technical Lead, "Don't bother w/ creating the JCL, copy it from <this job>"
FWIW, parallel development sucks and likely to fail, but I've not seen another strategy work at all.
We looked at a F2C compiler process. This would have been exactly analogous to the Wang method. It produced working "C" code, but it was unreadable implementation-level gobbledy-gook. But we, like the IRS, wanted to maintain this product forward in the target language "C", as if it had been originally written in it, if possible.
What we did worked extremely well. It took a bit over 3 man years with about two people.
#1 - we had test cases. And if there was code that the test cases didn't hit we added it first. The IRS has a few hundred million returns a year and could easily make, say every return for the last 10 years, into a "pretty exhaustive" test suite.
#2 - we did an incremental approach. We did NOT convert the F4/F77 into requirements and then do a clean-room top-down re-implement. It would never have worked. We arranged the system so we could run the program with the original F4/F77 and new C in parallel. We replaced one Fortran procedure with C at a time while keeping the test cases working.
In assembly, even the definition of a procedure can be nebulous. But what you do is discover the 10-20 idioms of the assembly procedures, functions, reuse, etc. and tease out how to replace with "C" or ???
If this is a big issue, use either IDA Pro or Ghidra. If they don't support IBM assembly, then that's the first subcontract you let.
#3 - My partner was fastidious. Instead of the test cases simply passing, he added the self-imposed restriction of bit-identical outputs. It took work but it was possible.
One function/procedure at a time, one line at a time, the system was converted from old to new. All the time it produced bit-identical outputs for all tests. In the IRS case, the test cases should be every return ever processed yields bit identical results.
#4 once the last F4/F77 was removed, any C that was not idiomatic C was lifted and rewritten in a normal procedural style. Stuff like weird state machines to simulate computed GOTOs and non-structured code. This refactoring, again, was bottom up and was tested to bit identical results of all tests (which is kind of excessive!)
At the end we had a maintainable "high-level" language (C, yes, yes HN) exact equivalent.
This is the kind of task where rigor and bottom up is precisely what is needed and is actually much more effective.
Someone should do an FOIA act to get the source and then do a nice dissertation or senior project to do this and produce maintainable Java (and/or something nicer). I find the timeframe and budget the IRS proposed to be ridiculous and the odds of success negligible. A good hacker or two could do this with a 100th the resources.
Epilogue: I believe this process was completed about 15 years ago. Since then, the system remains in constant heavy use. There have been exactly ZERO bugs due to the conversion. We later moved the system from an antique RISC environment to x64 Linux. This exposed 2-3 bugs due to word length and endian-ness, that process (since it was already standard C) took one person about 3 months.
Considering that average IQ has been dropping for decades in developed countries, one has to begin wondering if we are even capable of building code or infrastructure as well as they did 50-70 years ago
EDIT: Ope, my original point is a flat tax. I said VAT as I was trying to decide 'what' to tax in my head, and it seems thats what people are latching onto, instead of my three sentences following of "No exceptions".
But that won't get you where you say you want to go. Who's going to collect that VAT, and make sure that everybody pays it? The IRS. Your approach would get rid of the tax code, but not the IRS. (In getting rid of the tax code, it would let you get rid of the computer code in question, though.)
The other problem is, you can't implement a "soak the rich" approach with a VAT. And currently, there's a lot of angst around wealth inequality, and most plans to do something about it involve taxing the rich more than everyone else. So your idea is fighting an enormous political headwind.
You could propose something like VAT + income tax for those who make over $1 million/year or something...
What did a person making $1m/year do wrong they are penalized unfairly against another person that doesn't? I have a feeling, much like now, all this accomplishes in reality is the rich hire good enough accounts to hide their largest sums from the IRS. That leaves the middle class and poor once again bearing everything... and we're back to where we started. Carving out 0 exceptions and sticking to it ensures that that literally nobody can say they are being treated unfairly.
My previous point wasn't anything about "should", by the way. I was merely saying that, in the current political climate, not hitting the rich harder was something that would make it harder for a VAT-only scheme to become reality.
Note that a lot of voters are convinced that they will make $1 million/year some day. Perhaps not today, but some day, and they seem happy to pay more today to ensure that they are not "penalized unfairly" when it's their turn.
This is not necessarily a rational approach, since very few of them will ever earn that much money. But if your goal is to get votes, you can go a very, very long way with "penalized unfairly". Note how many oppose an inheritance tax that they'll never pay, simply by the expedient of dubbing it a "death tax".
The "penalized unfairly" argument wouldn't wash with most economists, but there's not all that many of them. And nobody really listens to them anyway.
The taxation system reflects our societal values to an extent: tax breaks incentivize some activities and excess taxes disincentivize. Pure VAT disincentivizes spending and rewards wealth hoarding.
In the US, a typical tax payer will pay federal income tax, federal medicare and social security payroll taxes, state income tax (which varies a lot by state, but can be much more regressive than the federal income tax), and municipal or county property taxes (usually real-estate, but may also include things like vehicles), and a state+municipal sales tax on purchases. Not to mention various other taxes specific to things like gasoline, alcohol, tobacco, etc, and various usage fees for toll roads, etc.
I'm sure things are similar in Europe in many ways, and different in others, but it can be a little hard to figure out how much I pay in tax total in a year, and I'm hardly an unusual case. All of this to really underline your point that just talking about US income tax is too incomplete a picture for the purpose of comparison.
Sure, the Wrights were not rich. But Bill Boeing was. And Howard Hughes. Donald Douglas got financing to start Douglas. Allan Lockheed pretty much started from scratch. McDonnell developed its passenger jets from scratch.
Airliner travel was a paying concerned because of rich passengers. Flying for ordinary people did not come about until the 1960s.
BTW, jet engines were conceived and developed by private industry, because the government saw no value in them. Until the government saw flying jet aircraft.
P.S. The government airplane project, the Langley Aerodrome, cost something like twenty times what the Wright Flyer did, and simply fell into the Potomac like a sack of wet cement.
How about we not? And instead of a some VAT flat-tax nonsense, how about progressive income and wealth taxes with no tax breaks or incentives at the higher brackets?
Now that we've settled that, lets talk about the IRS's software.
Edit:
> EDIT: Ope, my original point is a flat tax. I said VAT as I was trying to decide 'what' to tax in my head, and it seems thats what people are latching onto, instead of my three sentences following of "No exceptions".
That doesn't improve your point as much as you think it does. It's still the kind of tax proposal that the wealthy put out because it's friendly to them (e.g. https://en.wikipedia.org/wiki/Steve_Forbes#Campaigns_for_pre...).
What do you mean, exactly? My intuition tells me the definitions you're assigning to "socially" and "unjust" would prove to be peculiar after being unpacked.
(Numerically) progressive taxes are a tool by the elite to enact unjust regressive tax structures on the middle and upper-middle class to prevent them from rising to their level.
The goal is to make sure that doctor making $300k never gets all uppity so that his grandkids start challenging the status quo.
- a family has non-trivial assets and income in three states but for federal and tax purposes they live in TN where's there's no state tax. The other two states are def not cheap compared to TN. This was setup by buying a house and having a part time job in TN for about 1 year to establish bonafide residency much of which stopped once gained
- business owner takes annual trip to Florida for business training with board/ management. That's a write off. But with some fancy accounting the owner smiles saying once they open the meeting with lunch, they left and spent the rest of week playing golf.
Whether the company or individual the rich guys are taxed less than me.
The bottom 40% (??) don't pay much either.
That leaves the upper middle class to foot a lot of the hill. Well I'm calling BS on that.
Eg, "My share of the House Rep vote from this Friday until next Tuesday" can be traded until "This Friday" for a "Burger" at Double Burger, or maybe some cash.
While I strongly disagree with the rest of the comment, I also am furiously in support of getting rid of all credits, deductions, exemptions, incentives, and so on.
I think we need a VAT at the federal government level but we also need to increase the federal income tax on everyone. I would like this tax hike to pay for Medicare for all.
Problem is that over sixty percent of the people seem satisfied with the current status of healthcare. Also I imagine they tend to vote in higher proportion than people like me. I have no idea how to fix this situation. Anyone have any thoughts?
As someone who has been on both sides of this issue, I think this is common. It isn't about loving the private insurance companies--everyone knows they suck--it's about trusting that the government solution will be better. With our government, can you honestly and with full confidence say it would be? My confidence totally flipped. I'm more confident it would be a disaster than not and then would be weaponized politically.
You can get rid of the IRS the day after you get rid of the rich.
Sounds like a feature
Each and every line written by whoever the lowest bidder managed to hire to do it.