"The front end technology is not the problem here."
Let me fix that statement: "The front end technology is not the worst problem here."
Looking at the resources loaded for the sign-in page, I counted 58 separate Javascript files. Including one that implied by name was minified, which on inspection clearly was not. I didn't bother counting CSS or image resources. I returned to the page two days ago, which indicated it is down for scheduled maintenance. It remains in this state.
CGI obviously borked this project. The government deserves its own special classification of criticism, but poor planning, change management, etc. from the government is no excuse for CGI not building an architecturally sound web site.
The contract was $350 million? Good grief, they overpaid. Nonetheless, if we could go back in time AND assuming we needed to spend this budget, here's what I would have done:
1. We make investments of $15 million in 20 different startups, and tell them to implement the initial phase -- let's say we call it the "minimum viable product" or MVP. Each startup has the same deadline for delivery.
2. On the delivery date, all companies meet with us to review their MVP. We call it a "demo day" and view all 20 demos.
3. Through some set of criteria, we create a short list of five companies from the 20 demos. Those five companies receive an additional $5 million investment, and another delivery deadline.
4. The companies iterate on their MVP and come back for another demo, this time with a deep dive.
5. We pick a winner from those five. The winner gets another $25 million investment and is responsible for any additional work to be completed.
I don't see how giving 20 startups $15 million each would have led to success instead of failure. Even if you found a better company to do the implementation than CGI Federal, there were several enormous problems that no company would have had any control over.
1. Requirements were delayed so much that development didn't start until March of this year. That spells doom for a system with this kind of complexity, regardless of who the implementor is. You need several months of functional, load, and integration testing so that effectively means you would only have had 4 to 5 months to code healthcare.gov. And that's assuming there weren't any big requirements changes.
2. The people responsible for integration (Center for Medicare/Medicaid Services) had no large IT project integration experience. These are people that thought 1 week of full integration testing would be enough.
3. Healthcare.gov had to integrate with legacy systems from the IRS, Medicare/Medicaid, Social Security, in addition to the various state exchanges. Any number of those systems could have serious flaws that would make it extremely difficult to interface with. On any project a poorly implemented legacy system can dramatically affect the effort needed to be successful. Again, even the best companies would've had a sizable challenge dealing with that.
4. One of the biggest challenges in government IT is the customer. The government decision makers often don't know enough about software engineering to make sensible decisions on requirements, timelines, testing, you name it. In this case there was the added political pressure of, "This cannot fail," even though it should've been clear at least a year ago that there's no way they were going to make the deadline. But you get people who think that you can just deploy and fix it as you go along. Or you get people that think you can just add developers to make up for lost time.
5. And what does being a "startup" have to do with it anyway? Either a software company can do the work, or they can't. Whether they are a startup or an established entity really has nothing to do with it.
It looks like you and jroseattle are demonstrating the main two competing views about how to approach new software projects: 1) deterministic, controlled, strong planning, avoidance of failure vs 2) nondeterministic, flexible, embracing uncertainty, expect and handle failure gracefully. There are many different versions of this in technology: one big expensive server vs many commodity servers, waterfall vs agile, ACID vs BASE, BigCorp in-house R&D vs distributing risk across startups.
Large parts of the technology world operate according to the latter model, and they do so for a variety of very valid reasons. Obviously, the government and government contractors do not.
jroseattle's comment presents a speculative model for how to apply a distributed, fault-tolerant model to this kind of technology project.
I'm not saying that you can't or shouldn't distribute risk across many small projects, I'm saying that in this case doing so would not have helped you at all. If you had a competition to build a MVP of healthcare.gov where the requirements didn't get delivered until 48 hours before it was due, then the requirements changed substantially 30 minutes before the cutoff time, none of the teams would have succeeded.
The distribution among startups is about spreading risk for the project. The existing approach was one integrator, and they failed. Because there are so many reasons that are provided for why this had no chance of success, i.e. "Even if you found a better company to do the implementation", it makes strategic sense to me to try multiple approaches.
But I would contend the problems weren't unmanageable. Problematic, yes, but manageable. I will try to address your points:
1. Requirements delay - sure, specifics were delayed. But, there was a basic premise for what this system would entail, and core work could progress without incurring much risk or waste. (I'm unsure when project work by CGI was started versus development work.)
2. IT integration experience - this is dependency management 101. If this is a recognized risk, then CGI should have raised the red flag. This looks like very poor project management.
3. Dependencies - yes, there is a possibility that external dependencies can affect your system. You design and architect for these scenarios, including failure.
4. Technical know-how - I would not expect anyone in government to know one iota about software development. CGI's job, in this scenario, is to elicit those requirements in a way that's useful.
5. Good point, but this project would benefit from some competition. Why not let more teams try this, rather than wrapping it all up with an entity who's only proven competency is simply receiving more contracts?
The integrator in this case was the government (CMS is a division of HHS), there's no getting around them as a single point of failure.
1. Having a basic idea of what the system will do is helpful, but in a system that has a lot of very specific business logic that has to be defined and HAS to be right in order to comply with the law, you're not going to get very far without good requirements. Furthermore, depending on how the contract was structured, CGI Federal may not have been allowed to start development work until it was authorized by the customer.
2. CGI may very well have raised multiple red flags, and CMS and HHS could have promptly ignored them. That is one of the maddening things about government IT. You can tell the decision makers that they are heading for disaster and they can simply ignore you.
3. Let's say you plan for every one of your dependencies to fail. What useful product could you deliver in that case? If you don't get certain information you cannot give the user a health insurance product according to the law. This is system where you cannot reasonable ignore a component if you can't get it to work in time. Let's say the interface with the IRS is going to take longer than you thought. You can't just cut that out or substitute dummy data. That would amount to failure to deliver a functioning product.
4. Again, you can elicit as hard as you want, if they don't give you the requirements because the law is still up in the air, or because the president might change his mind, or because someone wants to meet with all the stakeholders in the other agencies first, there is absolutely nothing you can do. I've been on projects where the stakeholder with the final say couldn't be bothered to give their input until the software was done. I've also been on projects where the decision maker prevented us from getting the input of the employees that would actually be using the application. Sometimes the people you're dealing with are not rational actors.
5. Fixing the contract award process is certainly part of the solution. Normally many teams could submit a bid for the work, but due to the insane time scale it was skipped for healthcare.gov. I think having a proof of concept competition after some sort of initial proposal selection gate could be useful. It could sort of be like how the military has contractors build prototypes for weapons systems competitions.
> The integrator in this case was the government (CMS is a division of HHS), there's no getting around them as a single point of failure.
This makes it easy to identify where the roadblocks are, and to present that information to interested parties at the appropriate points in time.
> 1. Having a basic idea of what the system will do is helpful, but in a system that has a lot of very specific business logic that has to be defined and HAS to be right in order to comply with the law, you're not going to get very far without good requirements.
Without requirements, how would one expect very specific business logic? And what is so incredibly precise that it derails any possible planning for it? I'm not familiar with that type of problem.
> 2. CGI may very well have raised multiple red flags, and CMS and HHS could have promptly ignored them. That is one of the maddening things about government IT. You can tell the decision makers that they are heading for disaster and they can simply ignore you.
This is very true. Of course, with basic project management 101, these things are duly noted so that when you're hauled in front of Congress, you've documented the situation. Based on CGI's responses the other day, they surely didn't do that -- otherwise, they would have raised it. Unless government IT work of this nature is classified?
> 3. Let's say you plan for every one of your dependencies to fail. What useful product could you deliver in that case?
One that allows you to fix those problems independently, rather than tying the success of the entire project to the success of all integration. In a project where the requirements are constantly shifting, I'd say the "useful product" definition is dynamic and iterative. A strict all-or-nothing definition makes little sense in that environment.
> 4. Again, you can elicit as hard as you want, if they don't give you the requirements because the law is still up in the air, or because the president might change his mind, or because someone wants to meet with all the stakeholders in the other agencies first, there is absolutely nothing you can do. I've been on projects where the stakeholder with the final say couldn't be bothered to give their input until the software was done. I've also been on projects where the decision maker prevented us from getting the input of the employees that would actually be using the application. Sometimes the people you're dealing with are not rational actors.
I get it; I've worked with federal agencies as well. It all goes back to project management and documenting interactions. As for logistics, there is always someone else to go to when a stakeholder is a bottleneck. Here's something that I found that worked in my experience with some fed agencies: identify those who are considered a project dependency, and that project progress relies on specific people. When facts are presented simply, and project management details are documented...individuals get motivated to NOT see their name in lights. As always, your mileage may vary.
> 5. Fixing the contract award process is certainly part of the solution. Normally many teams could submit a bid for the work, but due to the insane time scale it was skipped for healthcare.gov. I think having a proof of concept competition after some sort of initial proposal selection gate could be useful. It could sort of be like how the military has contractors build prototypes for weapons systems competitions.
Absolutely. Basically, it's an iterative phased approach, and let multiple teams go for it.
"> 2. CGI may very well have raised multiple red flags, and CMS and HHS could have promptly ignored them.
Of course, with basic project management 101, these things are duly noted so that when you're hauled in front of Congress, you've documented the situation. Based on CGI's responses the other day, they surely didn't do that -- otherwise, they would have raised it. Unless government IT work of this nature is classified?"
What it boils down to for me is that the best contractor in the world can't make up for the worst government decision makers. After a project goes down in flames the contractor can point to specific failings at the government level, but at that point it's too late, you've already wasted a lot of money and you don't have a working system.
In my opinion, multiple facets of government IT have to be fixed:
A. Government leads need training on how to successfully manage IT projects.
In practice this is a huge undertaking because there are a lot of organizational challenges that have to be tackled before a lot of IT projects have a chance of success. Good managers in government will also have to tackle dysfunctional bureaucracy in order to be successful
B. Government employees need to be held accountable for their failures.
C. There needs to be more full time IT professionals in government in positions of leadership
D. Hard deadlines should not be determined politically before it has even been determined if that the deadlines is achievable
E. The contract award process needs to be reformed.
It is not so much the specifics of the BART strike described in the article that I find relevant, as it is the general attitude displayed by the “lucky elite class of tech workers”. [1] There is certain mix of privilege, arrogance and ignorance reflected in the idea that all it would take to implement Obamacare is to give 20 start-ups $15M each, and the problem would be solved. Voila, a quick, easy and financially viable technical solution! Sadly, the problems runs much deeper than just the technology (see other comments reflecting on procedural and political issues hampering development, changing requirements, unrealistic expectations and so on), and to ignore the systematic issues is naive.
I get where you're coming from, but it's not just the privilege issue. Fundamentally youth often has the ignorance to see the path to success where the more experienced can only see the roadblocks. Usually (especially in government) they'll quickly get clobbered by reality, but every once in a while they'll do something all the graybeards thought was impossible.
That's not to say hand-wavy armchair criticism of what is obviously a quagmire isn't annoying...
Jacobin is such an annoying magazine. Every time I commit to seriously reading (as opposed to skimming) one of their articles, I still come away with the same conclusion: that it contains almost no substance. Though I guess it's a pleasure to read the flowery language if you already agree with the premise.
While I'm sure you're partly correct, until we know how bad the CMS on up management was for this specifically, can we really say that for sure?
What we know is:
The project didn't get seriously started until February/March (e.g. the election created a 3+ month freeze on HHS publicly visible work).
The NYT reported that in the last 10 months, 7 major requirements changes were made.
We've been told the "no window shopping" one was made in August or September.
We've heard from multiple sources that changes were ordered through the week before launch.
Given all the above, how much do you see incompetence, and how much "just not done yet" pre-alpha stuff? I'm mostly a back end developer and am not up to date to judge this, I'm really interested if the above makes any refinements to your judgement.
e.g. the election created a 3+ month freeze on HHS publicly visible work
That's not precise. There was no legal requirement that HHS freeze publicly visible work around election time. The administration, for campaign reasons, didn't want ongoing work to trigger anything that might get in the way of the re-elect. Remind me again which party is obviously oh-so-serious about governing.
But in all seriousness, this is the first major entitlement program passed without bipartisan, widespread political support (more from me here on that: https://news.ycombinator.com/item?id=6622456). The Administration was insane not to factor in that there would be all sorts of "glitches" in the development process because of that. Someone deadly serious and competent, like the shivved Tom Daschle (https://news.ycombinator.com/item?id=6622284), should have been working on this the day after it was signed, if not before. Then again, very few people seem to have that much power in this Administration ... see again the possible object lesson of Daschle.
I'd take Tom Daschle over Harry Reid running the Senate (or at HHS over Sebelius) any day, but I am skeptical of the theory he was "shivved". You're right that the car service issue should not have been enough to sink him, but I think that was a convenient out: IIRC, Republicans were getting ready to ask some uncomfortable questions about his wife's lobbying efforts, and I can understand why neither he nor the President were excited about going down that road.
Also keep in mind that his tax troubles came to light after Geithner's and others', so there was less slack left to give.
Urk, I left out "possibly" in front of shivved, follow the link and I'm much less certain, and in fact still lean towards my initial opinion which you've fleshed out/reminded me more about.
Still, suppose this was the one decision that sinks Obamacare....
Well, that's 20/20 ... erm, forcasting???
And, yeah, Sebelius was a known disaster when picked (I live right across the border from Kansas); I mean, she let the state run out of money one month (http://en.wikipedia.org/wiki/Kathleen_Sebelius#Tax_revenue_c...), rather a surprise as I remember. I strongly suspect she follows in the usual Obama Administration pattern Cabinet members being figureheads and cheerleaders instead of true executives, which we'll likely be about to guess about when she testifies this week.
Reid ... I'll just go with a Wall Street Journal writer's description of his coming across like a "slightly overeager undertaker" ^_^.
Context is everything, so it depends on the "change". But never ascribe to malice what can be explained by incompetence. Pre-alpha is not an excuse for improper architecture upfront.
As I understand it, there is a lot of background integration with various agencies, systems of differing reliability, non-standard interfaces, etc. There are plenty of strategies that can deal with that environment (SOA, asynchronous queueing, etc.)
It's quite apparent this first version was not built with much flexibility in mind. Not flexibility regarding requirement changes, but flexibility for dealing with the infrastructure already in place.
I'd add that all participating startups would also need to develop out in the open on something like github or bitbucket. This way we can publicly observe the progress and quality of the work from the 20 different startups and claw back any unused money from startups that are clearly going to fail on the way. Furthermore, we could mandate a requirement that all the code produced is effectively free and open source and that any of the 20 startups can appropriate particularly well built parts from each other.
Personally, I'm very disappointed with the level of support for open source I've seen. A Github account with a dozen or so projects all related to a CMS is not what I call supporting open source. At best its a concession to the developers you've attracted to help with your political platform. You just won't get certain developers if you don't also allow them to participate in open source. It's calculated and expedient here more than altruistic or in the name or transparency, openness and letting the American people own the works for hire they have paid for through taxes.
If he (or any politician) wants to really support the idea of open-source they would require that everything that can be open-sourced will be open-sourced. The only exception I see to open-sourcing would be limited to almost strictly to military or defense related software and hardware projects. For every single other system, the source code should be out there in the public. Start with every single non-critical piece of software that is not part of infrastructure like transportation and public utilities and once security practices and norms improve and stabilize among the non-critical stuff, slowly and carefully open source all the rest except for military and defense projects.
At the price tax payers are paying for software, we should own the code outright many many times over.
poor planning, change management, etc. from the government is no excuse for CGI not building an architecturally sound web site
In the world that most of us live in, this is true. But for companies like CGI their business is not really building architecturally sound systems, it is keeping the doors open to an endless stream of government contract dollars. When the government rewards failure by granting the same vendor another contract to fix the problems, the predictable happens.
Given our current federal procurement rules, is it even legal for the government to discriminate between bids on the basis of the past competence of the people making the bids?
As I understand it, it's allowed to a degree. Of course an award protest is even more likely....
Companies can also be disbarred from government contracting, but obviously that never? happens to the big, politically entrenched ones. But I wouldn't want to work for CGI Federal today....
Until you've got that legacy system that the project has to integrate with. At that point, the legacy system is dealing with twenty different new large projects trying to integrate with it, instead of one.
MVP doesn't work well with deep integration. You can break this down to a form that takes one input, and returns one result on a following page. From a UI perspective, this seems like one Agile story. But that one round-trip can spawn so many integration steps. I just got finished with a health care IT project like that. One round-trip step involved integration with a single-sign-on service (which needed to be reconfigured), a rickety SOAP service provider (which had limits in how many test boxes they could set up and was controlled by a different bureaucracy and needed approval processes to turn on each required API method), a separate box returning chunks of patient data wrapped in html (don't ask, this was again out of our division's control), and our own backend system through REST so our resultant data would not be stored on the same server as our webserver (cluster). If some of these backend servers were told "okay, you now have twenty implementations to deal with instead of one", it would have drastically reduced the probabilities of completion.
Actually, I would say that MVP is critical with deep integration. In my experience with deep-integration projects, often the most important aspect is cutting through the clutter.
I've worked with some of the federal agencies that have been listed here, and it's true -- some of these things are nightmares. But, there are architectural patterns and development approaches to deal with those.
Integration makes things challenging, but not impossible.
Unfortunately, it can be hacked by taking the initial $15m, doing a totally half-asses effort (worth say $1m) and raking in the handsome profit of $14m.
But what's stopping the majority of companies from just phoning it in and collecting free money? There would be only one winner so 19 of those companies are wasting their time anyway.
If you really want companies to build prototypes, they have to have some skin in the game. Otherwise you are all but ensuring fraud.
I might be misunderstanding. Is the suggestion here that several companies would induce them to be less competitive, but a single large company would be highly motivated to succeed?
No, I'm saying that in order to get the $15 million there has to be some sort of measures in place to make sure that people don't game the system. If you just give them $15 million with no strings attached, they might decide to do the bare minimum and pocket the rest.
Maybe you could stipulate that each company has to meet a minimum bar in order to get that $15 million. Maybe advance some of the money up front, then pay the rest if they meet the bar. If they fail to meet the bar, they have to give back some of the money.
In any system you implement you need to give a lot of consideration to how someone might abuse the system because someone absolutely is going to at some point.
I didn't expect it was necessary to spell out the details of the arrangement to support the validity of the approach. The purpose of the suggestion is to approach the problem differently to achieve a successful outcome.
Administering this type of procurement arrangement, while certainly important to all the points you have raised, has very little to do with the success of building and delivering healthcare.gov.
I don't know about US gov procurement but I do know a bit about European, which I don't think has a particularly better track record.
On these big gov projects you would not believe how terrifyingly thin the margins are for integrators due to politicians being very sensitive about being seen to be responsible with the public purse strings, particularly given that they don't understand the technology. In addition to the thin margins, you therefore also see extensive offshoring and very low blended rates.
The projects are still incredibly expensive in the end and barely perform because the cheap labour incurs massive technical debt - and the thin margins means that the integrators try to insulate their risk with many layers of project management, and huge amounts of rigid enterprise architecture and planning up front.
Given this mentality of cutting cost to the bone via forward planning, even proofs of concept are hard to get through, let alone investing in 15 prototypes. I think the way to do this would be as part of a gov tech investment scheme rather than attached to a specific project or program.
One of the questions I have is why/how no one came to think of the back end issues at early stage of the development. (I assume a $350 mil project involves a lot of experienced people.)
I have seen some infographic on how large the code base is and at the beginning of the parent article, I thought the guy is going to argue that the code base is huge because they had to circumvent/workaround the back end problems.
"I assume a $350 mil project involves a lot of experienced people."
That's a safe assumption.
What's not is that the people calling the shots listen to them. We've seen mountains of evidence so far that they didn't.
E.g. CMS should have started integration testing of back end components and therefore issues long before the 1-2 weeks before launch, as testified to at the House hearings by representatives for CGI Federal, and more critically QSSI, which is responsible for a lot of those back end connections. Here's the latter guy (http://www.washingtonpost.com/politics/house-panel-grills-co...):
"Andrew Slavitt, an executive vice president of Optum, said the testing did not occur “until the last few days.” He said that “ideally, integrated testing would have occurred well before that date.”
Pressed on how long in advance of the launch such testing should be done, Slavitt replied, “Months would be nice.”"
These contractors are experienced, they've seen it all before, including customers from hell like CMS.
Fortunately, as noted elsewhere, CMS is out, QSSI is now the integrator and the fix-it czar is saying the right sorts of things.
Let me fix that statement: "The front end technology is not the worst problem here."
Looking at the resources loaded for the sign-in page, I counted 58 separate Javascript files. Including one that implied by name was minified, which on inspection clearly was not. I didn't bother counting CSS or image resources. I returned to the page two days ago, which indicated it is down for scheduled maintenance. It remains in this state.
CGI obviously borked this project. The government deserves its own special classification of criticism, but poor planning, change management, etc. from the government is no excuse for CGI not building an architecturally sound web site.
The contract was $350 million? Good grief, they overpaid. Nonetheless, if we could go back in time AND assuming we needed to spend this budget, here's what I would have done:
1. We make investments of $15 million in 20 different startups, and tell them to implement the initial phase -- let's say we call it the "minimum viable product" or MVP. Each startup has the same deadline for delivery.
2. On the delivery date, all companies meet with us to review their MVP. We call it a "demo day" and view all 20 demos.
3. Through some set of criteria, we create a short list of five companies from the 20 demos. Those five companies receive an additional $5 million investment, and another delivery deadline.
4. The companies iterate on their MVP and come back for another demo, this time with a deep dive.
5. We pick a winner from those five. The winner gets another $25 million investment and is responsible for any additional work to be completed.
TechStars for government, essentially.