At some point though, the team will decrease in size and the software will be considered "complete for now". Generally, that software will continue to be "on life support" (I guess you could say that?) for the next 5 - 20 years. That isn't a bad thing. Some of the projects I maintain have code from the mid-90s that I'm still making incremental updates to. Sure, I'd like to rewrite it in something newer, but it isn't about me, it isn't about fancy shiny. It's about the fact the system as it exists is proven and solid and meets 90% of the customers stated need. "Whack-a-mole" changes are just a sign of poor testing, poor architecture, or lazy developers. All of our teams here make incremental changes on aging software and generally don't experience major regressions except when it's time to do the big rewrites (which are usually customer-initiated when they bring a raft of changes and some money). When existing technologies are so obsolete as to be unsupportable, then we (IT) will initiate a rewrite as well, but hopefully with incremental upgrades we can keep a product running for as long as the customer likes without spending any more money than they want to spend.
We have a lot of that issue of "hire contractors to build, then use FTEs to maintain". I try to push back where I can because contractors that know up-front that they won't have to support the system are often not inclined to either follow standards (which are less exciting, I know, but make maintenance more predictable) and/or not be concerned about avoiding excessive technical debt up front.
This happens for a variety of reasons. Often funds are allocated specifically to develop what industry calls a minimum viable product-- with the understanding that if the project is deemed successful, the research group can seek further funding to improve the tool.
There is also a model, in government research funding, that says the government's role is mainly to point the way, or to open up markets. In this model, if version 1 of the software proves itself useful, then an industry partner can step in and it take over. However, if nobody shows interest, then the government should _not_ sustain the effort, because the lack of interest implies a lack of utility to the public.
For example, the OpenEIS project [0] was funded specifically to produce "reference code" that a company can use to check the output of a professional implementation. The reference code is not at all intended to be fast or robust. It's intended to demonstrate the algorithms, and to document the expected output for a variety of reasonable inputs. As a programmer on the project, I knew from the start that my work would end with the first deliverable.
> ... software is not considered complete when it's first released.
I don't know where this assumption comes from. > Governments often use two anti-patterns... (2) moving to reduce
sustaining staff too early;
This seems like a complete description of the problem, which doesn't sound like a pattern but an issue of conflating deadlines, releases, and project completion. > To keep teams from constantly plugging leaks while missing
the reason the boat is sinking, we need to apply the
principles of agile development and user centered design
Honestly, this sounds like the waterfall model is preferred to agile development in this case. Agile development can more easily lead a team into constantly plugging leaks than other, more traditional development models.But I think this article is really addressing public facing web platforms instead of all "software," which the US government has only really experimented with during the last administration, so some of the sentiments of this article, in the context of government, may be true even though it reads false.
Beginning with the analogy to building construction: A skyscraper isn't complete when just the floors and frame are put in place, and the building team doesn't let the builders go at that point. When it is opened up, the maintenance staff have their own job, but it's nothing like what renovators might have to do years later.
I don't know where this assumption comes from.
My anecdata, doing IT support for about 1,000 small-business sites: it's customary to only adopt new Microsoft releases after SP1 has been released. Our customers sometimes even explicitly instruct us so.
Now there's a prevalence of day one patches but it's pretty lame to see developers waiting till the weeks between pressing the disc and it appearing on shelves to fix standing issues.
In the case of M$ software that's a security or support issue not the absence of core features.
The author was probably meaning "finished" instead of "complete", which gives a different meaning more in line with the article.
Different kinds of projects have different needs for upfront design. One can quickly ship and iterate on an online dating app. One cannot launch a new space shuttle every two weeks and keep trying until the crew survives the mission.
It does. A skeleton crew would be abandonware.
I think the OP is painting with too broad a brush when talking about "private industry".
There are plenty of private industry shops maintaining software on a skeleton crew that needs no more features or a bigger market. Again, this article is assuming that all private industry only serves a growing market. There's plenty of software already written and being profitably maintained by skeleton crews to happy customers.
On my current project, when development is done and we're officially transitioned over to "O&M", my employer either gives me a new project to work on or I'm leaving to do something else.
Oh, and I've come to the conclusion that civil servants are not capable of grasping any development methodology other than 'waterfall.' Trying to do 'agile' is an exercise in frustration. The bureaucrats say they want agile (buzzword!), but they really don't. Eventually you settle on doing 5-week 'mini-waterfalls' and calling it 'agile'. :/
Civil servants are quite capable of understanding other development methodology. Civil servants actually involved in software development are often constrained by legal and regulatory regimes which no one in a substantively technical role has significant input into, which mandate procurement, risk-management, and approval processes which essentially mandate a high-level flow very similar to a completely non-iterative, cartoonish mockery of waterfall, and to the extent that they can attempt to implement more effective processes, they must do so within those constraints.
Among many possible causes, two that come to mind:
1. Managers who (despite lip-service to the idea) refuse to take any incremental risks looking bad with negative feedback each sprint, and would rather risk one big failure-event.
2. Companies which have either very-convoluted procedures or who try to treat end-users as cheap interchangeable human-robots... Which means no change can ever be rolled out without exhaustive documentation and training plans. Therefore all changes have to be "big enough" to be worth it.
Agile is (to the extent it has concrete substance) very similar to Lean, which (while it has come to software) actually started in manufacturing and engineering of tangible products. The difference between the two is mainly that Lean has a much stronger culture (and has thus also produced a lot more tools) around validation of methods through measurement, and thus is a lot more woo-resistant than Agile, which has proven to be decidedly prone to devolving in exactly the same kind of one-size fits all, consultant-pushed, top-down methodologies without good feedback on what works in the particular environment that the Agile Manifesto was a response to.
> You can't build a house or a plane using agile. It has to be waterfall.
"Agile" and "waterfall" aren't opposed, agile is opposed to the idea that any one methodology -- Scrum as much as Waterfall -- can be selected as right for a team without reference to the particular team and context in which they are working. To the extent that it works in a particular context, waterfall can be Agile.
If you can build a car with it,[0] I'm sure you can build a plane.
The article talks about the demand/market for the software increasing after the release, until it reaches a peak, then tails off.
Agile uses the term 'Product Owner', but if you're developing an intranet for Acme Inc, is it really a product? Once the new intranet site is released, is Acme Inc suddenly going to hire a lot more people, increasing the "market"? Will new features generate more "profit" for the intranet?
I wouldn't describe this as Gov vs Private Industry, but as software products vs bespoke software development. And for bespoke software development, private industry often has the same approach to maintenance: once it's done, it's time to wind down the team.
Approaching this from a purely semantic perspective: yes, a product is something that is produced as a result of a process. Not "in the sense of a piece of software to sell to multiple players in a market", but that's a completely arbitrary distinction that you drew yourself, so it isn't really an argument against calling someone a "product owner" of a single customer product.
> Once the new intranet site is released, is Acme Inc suddenly going to hire a lot more people, increasing the "market"? Will new features generate more "profit" for the intranet?
Maybe Acme Inc find that the product that they have paid for have benefits to productivity, but are willing to pay for continued development to refine it further?
Having worked on a lot of "one-off" type projects I think that it is important to maintain software gracefully. Existing customers will ask us to roll out new features on short notice, and having built the product in a way that lets us adjust and add to it easily enables us to sign deals at competitive prices.
That's not to say that this always happens, but I am less suspicious of this as an ideal.
Can we do something crazy like centralize our software development or have these administrative positions electable? If you can run for town dog catcher, maybe that asshole who made the WordPress site should also stand for office!
Either fix the bugs quickly, or don't fix them at all, and move on.
This is closely linked to the idea that least cost development is a matter of doing every individual action 'cheaply' and pretending you are not going to screw things up. If you want least cost actually least risk is a good approximation.
Undoubtedly, the audience of this article is software developers and managers of software projects within governemnt. Therefore, although the title doesn't convey the article's message to outsiders, it might not actually be misleading.