|
| 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) |