[HN Gopher] There Is No Software Maintenance
___________________________________________________________________
 
There Is No Software Maintenance
 
Author : nikbackm
Score  : 35 points
Date   : 2023-01-07 20:06 UTC (2 hours ago)
 
web link (henrikwarne.com)
w3m dump (henrikwarne.com)
 
| PaulKeeble wrote:
| The moment a piece of software is released and in users hands its
| in maintenance, which is the fixing of bugs and production
| issues. But that does not mean its also in development, the
| process of developing new features is quite often a distinct
| activity and not something that has to continue.
 
| mongol wrote:
| I don't think I agree. There are two distinct activities -
| developing new functionality, and keep existing functionality
| going. In an IT organization, you may for example get an incident
| in production, that requires fixing and deploy of a new version.
| That is maintenance.
 
  | weakfortress wrote:
  | [dead]
 
  | mjlawson wrote:
  | I would argue that this too is part of software development.
  | You ought to have a robust process that can accommodate
  | hotfixes while minimally impacting ongoing work. That fix
  | requires you to get buy-in from all of the right stakeholders,
  | and the deployment requires you to follow the same processes as
  | the development team.
  | 
  | I'm not sure if I see the value in making such distinctions
  | though.
 
    | mongol wrote:
    | Yes it is part of software development in a larger sense. But
    | there is value in it if you work as a manager. When you
    | create your budgets you need to have an idea about how this
    | work is split proportionally, because the work affects
    | revenue in different ways. From a budget point of view, you
    | can see it like: there may not be enough money to fund new
    | feature development and the effect of that would be
    | unfortunate. But if there also is not enough money to fund
    | maintenance, it is worse.
 
| dimitar wrote:
| I've worked in place where the majority of projects and the
| majority of code went in to maintenance. There could be several
| months or even a year or two of intensive development, with teams
| reaching a dozen or more developers + QA, DBA, PMs, Ops and a
| bunch of people on the client side.
| 
| And then those projects passed UAT, then went on production, a
| round of change requests and the teams were disbanded, with maybe
| a single developer giving some of their time to fix a bug.
| Sometimes such project went many months or even a few years with
| no development time spent on them. Some had backlogs of bugs, but
| it was very hard to mobilize resources to fix them. The company
| was chasing new project that were bringing more money, so after
| delivery the old projects had huge opportunity costs, even if
| there were maintenance fees.
 
| spfzero wrote:
| I would just say that when the effort of fixing bugs,
| refactoring, re-platforming, updating docs, and tweaking
| features, is greater than the effort invested in major changes,
| you're in maintenance.
| 
| Most software applications get there. Take your favorite IDE.
| It's in maintenance. Vim and Emacs are in maintenance. Your
| bank's web app is in maintenance. Chrome is in maintenance.
| 
| I admit this is somewhat arbitrary, but there are things that you
| do less of, and things you do more of on a lot (most) of
| production applications with users. Sometimes the needed
| functionality target was missed the first time. Maybe the second
| time. Maybe users massively changed their minds. So you might not
| get into maintenance for a long time, but that might be more due
| to a poor understanding of what the market wanted, rather than
| there being no such thing as maintenance.
 
| emerongi wrote:
| You can think of maintenance as one sub-branch of software
| development, usually containing tasks that do not create
| immediate value for the business, but need to be done to be able
| to add new features. It's also a good way to make it clear to
| non-programmers that a certain amount of time needs to be spent
| on tasks that seemingly do not create direct value. Maintenance
| is a concept that everyone understands and is a good way to
| explain it.
| 
| Regarding the project vs product model, it fully depends on the
| business. Venture outside of the SaaS/FAANG/etc type businesses
| that HN seems to focus on and you'll see countless businesses
| that are very happy to just have a project done for X cost in Y
| time. After that, the project goes onto a maintenance contract,
| where the development team is just expected to keep the lights
| on, fix bugs and keep it secure. From my experience, it's a huge
| part of software development, considering the amount of systems
| that exist in this form is only increasing.
 
  | willnonya wrote:
  | This is exactly what I was thinking after reading the article.
  | 
  | Projects develop new products but are expensive to undertake.
  | The enterprise products that resukt from these projects are
  | largely profitable though deployment and maintenance efforts.
 
| gloryless wrote:
| This is an unhelpful oversimplification. There are lots of tasks
| that are maintenance, and the more code your team has written the
| more these tasks build up. I don't know what motivates someone to
| pretend it is the same as writing new features, but it deals with
| distinctly different risks.
 
  | throwaway_au_1 wrote:
  | I think it's sensible to be critical of the language used in
  | our craft, especially when borrowed from the more physical
  | world, because with it comes the baggage. For example, I have a
  | pet peeve with the phrase "use the right tool for the job" used
  | in the context of languages/stacks, because languages and
  | stacks are more akin to building materials than tools (IMO).
  | Selecting a building material and selecting a tool involve
  | different considerations, and thought-terminating cliches like
  | the above can give a false sense of clarity. So IMO, to look at
  | software maintenance as the author has done, I think is fair
  | and reasonable, even if just to render obvious that software
  | maintenance is a special variety of maintenance that differs
  | from most usages of 'maintenance'.
 
| TehShrike wrote:
| This matches my experience with software development.
| 
| I work on business software that serves an industry for at least
| 10 or 20 years, and there is never any end to development. There
| is always value in making the industry-serving software better at
| serving that industry.
| 
| Sometimes that means fixing bugs. Often it means tweaking the
| schema to better match real life.
 
| hyperpape wrote:
| There's a reasonable point in here, that for some companies,
| there is no distinction between maintenance and ongoing
| development. You're just constantly thinking of new features, and
| the work of building those features and changing the way existing
| features work is comingled. In that case, you have no such thing
| as maintenance. This model is probably more common, thanks to the
| rise of SaaS, and automatically updating end-user software.
| 
| But sometimes you sell a product, and the product or some
| component of it (perhaps some integration with another tool) of
| it really is in maintenance mode.
| 
| You decide that acquiring new customers is unlikely, or not worth
| the cost, and you make the bare minimum of changes necessary to
| keep the lights on. No one touches it for months, and when they
| do, there's a bug fix. Perhaps customers have new ideas for using
| the software, but you're not going to do them.
| 
| That's maintenance mode. It still exists. It's not a fun place to
| be, but it's real. It even can be valuable (since fixing the
| occasional bug report can be very low effort, but necessary to
| keep customers around).
 
  | cm2012 wrote:
  | A lot of software these days has api dependencies for the
  | things it works with, so it stops working if you stop working
  | on it.
 
| Groxx wrote:
| Sure, but this is sort of like saying there is only one
| programming language because they're all turing complete. Code
| produces behavior, and that's the actual goal, so why do we
| bother separating them and talking about it? Produce behavior!
| 
| For there not being two distinct phases: well.... it depends on
| how you draw the line. "Prototype works" -> every change after
| that is arguably maintenance, not development, since it _has been
| developed_. What you 're doing is then "just" handling its
| interactions with the real world - roughly equivalent to repair
| (fix bug / replace broken component) and maintenance (prevent
| total failure when one host dies / lubricate parts so they don't
| fail as quickly).
| 
| ---
| 
| Even if we both stop taking things to absurd extremes: I agree
| things are not "developed" _and then_ "maintained" in most
| modern, always-updating systems, but I can definitely separate
| much of what I do into "development" and "maintenance".
| Development is whatever is focused on getting a thing working.
| Maintenance is whatever is focused on adjusting the system to
| make that development reasonable beyond the minimum hack, or make
| the changes long-term palatable, or updating libraries, or
| enhancing observability to resolve issues faster, or
| restructuring things to make future changes easier, or...
| 
| The list of things we do beyond _initial "development" of a
| feature_ is vast, and you can often adjust how much of it you do
| now vs later... but you generally cannot do "some" development
| later. It either works or it doesn't. You have a button that does
| nothing or a button that does something. Sure, you might be able
| to split a feature into MVP and nice-to-have sub-features, but
| you can't say "oh we'll figure out the contents of that if
| statement next month, ignore it for now".
 
| ebiester wrote:
| Another perspective not mentioned is that there is a real context
| for why the distinction matters in the US. In the US, new
| features can be described as capital expenditures, or CapEx,
| whereas maintaining the fitness of the software is considered
| OpEx, or operational expenditures, and both are taxed
| differently. This matters for public companies.
 
| dangus wrote:
| I guess this is an interesting thought experiment but by the
| conclusion I felt like it's just splitting hairs on terminology.
| 
| I don't really agree that the line between a bug fix and a
| feature request is blurry. Those two activities are clearly
| distinct in my mind.
 
  | seadan83 wrote:
  | Bugs of logic omission could easily be argued as feature
  | requests. Who is to say that a very poorly written app,done
  | cheaply, whether it intentionally omitted proper data
  | validation, or whether adding data validation to resolve
  | downstream errors is a feature request.
  | 
  | Another example is the classic, "users would never expect it to
  | work like this" vs "it was designed to work that way (even
  | though it is ass backwards)". Is fixing something to fit user
  | expectations a bug fix, or a feature request? It can really be
  | that the question hinges on an original design spec, which
  | seemingly should not be determining factor (but it is, and who
  | knows whether it was just done badly, or done wrong)
 
| 015a wrote:
| I have had a really frustrating relationship with software
| maintenance in all of the companies I've worked for.
| 
| I've always been a strong, strong believer in an analogy like:
| How much time would you estimate that nuclear engineers spend
| operating and maintaining existing reactors, versus building new
| ones? How about public highway departments and building new
| roads, versus fixing or improving existing ones?
| 
| No analogy is ever perfect, but the only logical conclusion I can
| reach is that software engineering is a really weird discipline
| relative to practically all of its "we build things that last
| years" peers. Its weird because, well, our organizations in my
| experience chronically under-invest in maintenance then act
| flustered when new developments don't meet deadlines or take
| forever; but its also weird because all of my experience screams
| at me "I'm not even sure if we _know_ how to maintain systems
| well ".
| 
| I've seen this in one org (a public company you'd recognize);
| where years ago we had and met lofty goals like "99.999%
| availability"; today its a good month if we hit three-nines, API
| wide. In team meetings with really senior, smart engineers when
| we ask How Can We Improve This, you start observing this learned
| helplessness where they suggest small changes like, you know,
| adding a cache for some external API, or replacing the built-in
| HTTP client with some other one that has a more comprehensive
| knob for timeouts, or whatever. I talk with them privately and
| say: Is this really the best we can do? It isn't; everyone knows
| that; but we will _literally_ never have the product dev time to
| really fix the problem; maybe, taking what we 've learned from
| some old system and building a new one, cut out layers of
| abstraction, reduce and simplify. So instead, we supplement the
| problem with complexity; and the thing we _won 't_ admit is that
| this is like putting a bandaid on a skin tumor; it may improve
| the metrics on the short-term, but ultimately it _is_ more
| complexity, it _is_ more code, and in a lot of cases we 've
| replaced one way that something fails, predictably, with N ways
| it can now fail, unpredictably, hopefully less often.
| 
| The other thing that no one will admit is: If the state-of-art
| way to fix something that needs fixed is to "take what we've
| learned from the old thing and rebuild it" (oftentimes, this is
| the best way; but that's another discussion): No one lives
| forever, and No one stays at a company forever. Knowledge is
| Temporary. Through leaking knowledge or increasing scope, taking
| on maintenance today is _almost always_ easier than taking it on
| tomorrow; and it usually leads to productivity boons which
| magnify over time.
| 
| I word a lot of that from the perspective of developer
| experience/productivity, but it fits just as well with Security
| maintenance. I'm working alongside a company impacted by the
| recent LastPass breach. They were storing hundreds of internally
| minted JWTs in there like API keys; no expiration, and no way to
| revoke. "We have to rotate these"; well, lets take a look at this
| Jira ticket from four years ago where one of your senior
| engineers who left three years ago said we need to make these
| things expire, or at least add some kind of revocation list (ok,
| never word it like _that_ to people; but that 's what we're all
| thinking). We don't have that; we can build it, but now the app
| has 5000x the traffic and complexity, so it'll take time.
| 
| I share this talk by Johnathan Blow [1] all the time, because its
| fantastic and in this case he hits on a really good point: We
| only know how to do things by doing them. If we, as an
| organization, invest 10% of our time doing everything we can to
| keep existing systems running and productive; that may not be
| enough time to even develop the skills to _know_ how to keep them
| running well and highly productive _if_ we could fight for more
| time. One of the phrases I hear all the time, across many orgs:
| "small steps toward improvement". I think people who say that
| have either given up (learned helplessness), and/or they're
| critically unobservant of the inherent entropy of software
| systems. There is, no doubt in my mind, a "rate of decay" of
| every software system; its different for all of them, its
| influenced by factors like product velocity, external
| integrations, language, etc; but they all have it. And if you
| aren't investing _more_ time in maintenance than your system 's
| rate of decay, you're going to cause your People, your Customers,
| and if you're very unlucky (cough LastPass) your Business a lot
| of pain.
| 
| But; my special variety of learned helplessness is that I think
| the people in charge of most orgs actually like pain, and like
| inflicting it on others. Most likely something to do with the
| observation that psychopaths and sociopaths tend to rise through
| the ranks a businesses faster than those with empathy.
| 
| [1] https://www.youtube.com/watch?v=ZSRHeXYDLko
 
| twawaaay wrote:
| Software maintenance is what you have to do for it to keep
| working. It is a useful distinction, especially from the point of
| view of management, even if the tools and skills used are the
| same. In many companies, the funds for maintenance might come
| from a different source than developing new features.
| 
| One could say that all office workers do the same job -- reading
| text on the screen, clicking with their mouses and pushing
| buttons on their keyboards. But this misses the reasons why
| people are pushing those buttons or clicking things with their
| mouses.
 
  | mongol wrote:
  | Exactly. Maintenance is keeping the lights on. As a manager, it
  | is the level of budget you can't do without.
 
  | bee_rider wrote:
  | They sorta handle this in the end, which I thought was
  | thoughtful, since it does contradict their original point a
  | bit.
  | 
  | > However, if you consider that the environment the program
  | works in can change (library or OS upgrades for example), then
  | you could compare this to handling wear and tear.
  | 
  | > There are systems that are maintained only in this sense:
  | fixing bugs, and making sure that it can keep running. But I
  | would argue that this is a very small part of all software
  | development work being done. Furthermore, when it comes to
  | fixing bugs, there can be ambiguity. Is this really a bug, or
  | is it in fact a request for new functionality? And why fix the
  | bug at all, if it has worked up until now, and the only
  | objective is to keep the system running. So, in some sense,
  | this form of maintenance is also just ordinary software
  | development.
  | 
  | I'm not sure what to think about this in particular. A program
  | runs on a computer, which has an OS, and over time those OS's
  | are updated. Is "make sure it runs on RHEL 9, when it already
  | ran on RHEL 8" a development or maintenance task? I would
  | characterize maintenance as dealing with the inevitable decay
  | of things over time. Technically the computer+RHEL 8+program
  | system should still work but of course you probably want to
  | benefit from the new development work put into RHEL 9. And if
  | you let your OS become too old, it becomes unsupported and
  | insecure...
 
    | mongol wrote:
    | Where I work, the difference is basically, making things that
    | already bring in revenue continue to work = maintenance. It
    | is about the decay over time, but also the cost of just
    | making business, keeping the lights on. Just as you need to
    | pay your cloud bills to keep your service running, you need
    | to have a certain amount of developer-hours addressing things
    | that do not work perfectly and needs adjustments and fixing.
    | For the developer in question it may not matter much, it is
    | git branches and continuous deployments just the same, but
    | the distinction is not really for the benefit of the
    | developer. It is for the manager that can reason about
    | different opportunity costs by knowing how much time and
    | money maintenance work needs.
 
| PicassoCTs wrote:
| Softwares state is depending on how close it is to the
| actual/perceived economic hot-loop in the product.
| 
| Thats where features grow, were software is properly maintained
| and tested. The further away it is from this route, the more it
| becomes a stagnant resource backwater, until the software - which
| might be alive in other sections, actually starts to die and
| bitrot, basically a forked away stand alone thing, with its own
| library, tucked into a corner, visited only on rare occasions.
 
___________________________________________________________________
(page generated 2023-01-07 23:01 UTC)