TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

There is no software maintenance

133 点作者 nikbackm超过 2 年前

32 条评论

larsrc超过 2 年前
The idea that software doesn't need maintenance (for any reasonable definition of maintenance) is ludicrous. When a new vulnerability is found, fixing it is maintenance. When the cloud providers change their setup in a way that requires updates, that's maintenance. When user growth causes scaling issues, fixing those is maintenance. When users move to a new platform that needs support, it's maintenance. Claiming that such changes are new features is marketing bullshit. From the end-user's point of view, none of those add new features, they just keep it working the way they're used to.
评论 #34297217 未加载
评论 #34305644 未加载
评论 #34299171 未加载
choeger超过 2 年前
What the author calls the product model is just capitulation. There&#x27;s no agreed-upon requirements and no scope. Each product thus occupies the team in perpetuity. That&#x27;s obviously bad for business.<p>I would argue that this model does describe maintenance, but a very bad form (due to the permanent addition of ill-fitting new features to justify the expense). In fact, I think that scrum&#x27;s failure showed us that projects (what scrum apologists try to disregard as &quot;waterfall&quot;) <i>are</i> the way to develop software. Iterations are the way to <i>maintain</i> it. One can put small features into the latter, but everything that&#x27;s large or has business value deserves a project. You don&#x27;t know the requirements yet? <i>Then go get them before we start development!</i><p>Note that projects don&#x27;t need to be long and projects can easily hang onto an established agile maintenance process, e.g., for releases and other infra. But they need to be planned properly, have an agreed-upon scope and don&#x27;t need to fit into arbitrary sprints.
评论 #34294530 未加载
评论 #34296593 未加载
评论 #34295975 未加载
评论 #34295142 未加载
评论 #34295201 未加载
评论 #34297714 未加载
评论 #34296907 未加载
hyperpape超过 2 年前
There&#x27;s a reasonable point in here, that for some companies, there is no distinction between maintenance and ongoing development. You&#x27;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.<p>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.<p>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&#x27;s a bug fix. Perhaps customers have new ideas for using the software, but you&#x27;re not going to do them.<p>That&#x27;s maintenance mode. It still exists. It&#x27;s not a fun place to be, but it&#x27;s real. It even can be valuable (since fixing the occasional bug report can be very low effort, but necessary to keep customers around).
评论 #34293666 未加载
d_sem超过 2 年前
Maintenance can be interpreted in different ways. In my software career it basically means &quot;no new features&quot; and &quot;bug fixes for a known duration&quot;. It&#x27;s more a project lifecycle status to be understood by customers&#x2F;stakeholders rather than a distinction in software development activities.<p>I hope not sound too critical, but the authors product model perspective is one I would expect a junior software developer to propose; as it does not consider a wider perspective that includes sales&#x2F;business side of things. When I sell a software product, customers have certain contractual expectations about what they are buying, and what support they are paying for.
评论 #34296369 未加载
gloryless超过 2 年前
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&#x27;t know what motivates someone to pretend it is the same as writing new features, but it deals with distinctly different risks.
评论 #34293892 未加载
spfzero超过 2 年前
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&#x27;re in maintenance.<p>Most software applications get there. Take your favorite IDE. It&#x27;s in maintenance. Vim and Emacs are in maintenance. Your bank&#x27;s web app is in maintenance. Chrome is in maintenance.<p>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.
评论 #34296147 未加载
评论 #34294261 未加载
emerongi超过 2 年前
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&#x27;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.<p>Regarding the project vs product model, it fully depends on the business. Venture outside of the SaaS&#x2F;FAANG&#x2F;etc type businesses that HN seems to focus on and you&#x27;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&#x27;s a huge part of software development, considering the amount of systems that exist in this form is only increasing.
评论 #34293413 未加载
julik超过 2 年前
The challenge here is that while most businesses assume software is just &quot;produced&quot; once and then earns them money indefinitely, the reality is that there is some amount of &quot;production&quot; that needs to happen afterwards. Most dichotomies between ops and dev also come from the same gap, which is fundamentally not a &quot;skills gap&quot; - it is more of a &quot;software developers are expensive, can we have 1 less expensive ops person supporting 10 services than the original 10 developers tied down in maintenance?&quot;. Businesses which are smart and understand software well know that regardless of how well you play it, there will be ongoing development after the initial release is done. Modern software which runs evergreen and gets worked on continuously is even less menable to the idea of &quot;maintenance&quot;.<p>The issue is creating a shared understanding that &quot;software is never done-done&quot;. The decaying corpses of marketing iPad apps from 2010 show the only area where this is not the case - there is one very specific period when the app is relevant, and everyone knows that after nobody cares about the software even if some users would.<p>What can help against the &quot;maintenance trap&quot; if the business is listening:<p>* &quot;Legacy&quot; is a taboo word. Replace all instances of &quot;legacy&quot; with &quot;this pays our salaries&quot; * When you build a system, stay cognizant of when you want to put it to rest. If the system outlives that horizon - which often does happen esp. if it does pay your salaries - examine and extend that horizon. * Be very, very alert about people let into the organisation who pitch a &quot;full rework to get rid of all the maintenance&quot;, and - if the system already in place is not absolute shite - just give those people a pass.<p>The topic is very, very underresearched and the only article I saw about it which was truly astounding was <a href="https:&#x2F;&#x2F;apenwarr.ca&#x2F;log&#x2F;20171213" rel="nofollow">https:&#x2F;&#x2F;apenwarr.ca&#x2F;log&#x2F;20171213</a>
twawaaay超过 2 年前
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.<p>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.
评论 #34293694 未加载
评论 #34293310 未加载
ebiester超过 2 年前
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.
评论 #34293936 未加载
评论 #34293941 未加载
manmal超过 2 年前
&gt; 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.<p>Depends on the domain. There are millions of native Android and iOS apps that are only (slightly) updated when Google&#x2F;Apple forces developers to.
TehShrike超过 2 年前
This matches my experience with software development.<p>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.<p>Sometimes that means fixing bugs. Often it means tweaking the schema to better match real life.
gusbremm超过 2 年前
There is maintenance! Build any corporate software or mobile app, things will stop working eventually due to api integrations or deprecated dependencies. Even if you leave your software untouched
ascotan超过 2 年前
When you talk about software maintenance you&#x27;re trying to get a hold on the cost of software. Most projects have a full development cycle to 1.0 and that after the initial release that team may be prioritized to work on something else (or not). When this happens the original piece of software may be in production and still needs to be maintained but no active development is taking place. The reason you might do this is that the dev team is a precious resource and having them iterate forever on the same piece of software (the product model) may not be financially feasible or desirable to the company.<p>There are companies that can afford the &quot;product model&quot; but it would require that everything developed by a company maintains a full dev team per software component. However, not everything needs to have features being added to it continually. It makes more sense from a people management perspective to move that team off and have them work on something else. In which case you have something in maintenance.<p>If you have to budget software it does make sense to think of it in terms of the capital expense of upfront development and the operating expense of it&#x27;s maintenance. Much of the operating expense may involve hardware upkeep, recurring licensees, etc. People are an operating expense too but they can be moved around. Nevertheless the &#x27;software&#x27; (without you) needs to be thought of as something that will be maintained when you&#x27;re not working on it and what the cost of doing this will be.
mongol超过 2 年前
I don&#x27;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.
评论 #34293337 未加载
评论 #34293524 未加载
unnouinceput超过 2 年前
As a freelancer I disagree. I get hired by clients, do a product&#x2F;project, they use that product in production and&#x2F;or deploy it to their users. I get paid for that phase and then either we enter a 2nd phase of maintenance or the client goes with somebody else in the future for the project needs. When I do enter the 2nd phase, which can last years, usually my work on that project is in average to 10 hours&#x2F;month vs. the full 40 hours&#x2F;week when was the initial development phase.<p>So yeah, there is a development and there is a maintenance phase. On big projects that can spawn years eventually the maintenance phase can be seen as continuous integration, which is what the article&#x27;s author is talking about, and that phase can be 90% of the project budget&#x2F;lines of code&#x2F;lifetime but is still the maintenance phase.<p>As Ray says it, he is seeing this through corporation colored glasses.
SKILNER超过 2 年前
What this completely overlooks is the time developers spend trying to understand existing code. For greenfield development that is close to zero. For maintenance work it is over half of their time and arguably the most difficult work in software engineering. Maintenance work in complex systems is far more challenging than developing new complex systems.<p>Some people, not many, take software maintenance seriously and conduct studies on it - in the study at the link below they point out that comprehending existing code took on average 57% of developer&#x27;s time. Actual editing consumed 5%.<p>And software maintenance is no different - think again.<p><a href="https:&#x2F;&#x2F;www.researchgate.net&#x2F;publication&#x2F;318811113_Measuring_Program_Comprehension_A_Large-Scale_Field_Study_with_Professionals" rel="nofollow">https:&#x2F;&#x2F;www.researchgate.net&#x2F;publication&#x2F;318811113_Measuring...</a>
dimitar超过 2 年前
I&#x27;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.<p>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.
jillesvangurp超过 2 年前
You can play with semantics of course. But the fact is that most software development is not building new software but doing development on existing software. That has traditionally been called maintenance.<p>There&#x27;s a clear difference between the early life of a software product where there is a lot of fast paced development to create the product, deadlines, etc. and the maintenance phase of a product where most of the team goes off and does new things and a smaller team remains to keep the thing going. It&#x27;s a bit of a grey area where one stops and the other begins. And of course some popular products keep on evolving at the same pace because there&#x27;s a large team working on them doing major new releases once in a while.<p>However, there&#x27;s a lot of software out there that is still being tinkered with but that does not really change that much over time anymore. Most of that development is just keeping it going, doing some small changes as needed, adding features, fixing compatibility issues with new hardware&#x2F;software, etc. This usually gets broken down into perfective, corrective, and adaptive maintenance. Software is never really done. If it&#x27;s useful&#x2F;valuable, people will keep on coming up with ideas on how to make it more useful.<p>What sets maintenance apart from regular development is that it is more reactive and unplanned. It involves less people and might not even be a full time job for the few people that are still able to work on the system, which usually requires having some history with the system.
irrational超过 2 年前
This has been my experience. I have been working on an in-house built LMS for a Fortune 100 company for 20+ years. People keep wanting to make changes, add functionality, redesign the user interface, etc. And all of these things tend to introduce bugs. There is no end from what I can see and I wouldn’t be surprised if I worked on it until I retire.
0xbadcafebee超过 2 年前
Software maintenance has multiple distinct forms:<p>1. Perfect software that doesn&#x27;t run in a vacuum. Assume the software has no &quot;bugs&quot;. It still operates within limits, and within an imperfect world. The hardware fails, it gets upgraded and is no longer compatible with the original software, the disks fill up, invisible particles shooting through the universe flip bits. All sorts of things outside the control of the application will cause the application to not function as intended. And as such, maintenance will be needed.<p>2. Imperfect software run by imperfect people. Even without any of the above problems, users will input the wrong data that the program didn&#x27;t expect and cause an error. Sure, you could just assume that &quot;software development never ends&quot; (assuming that you will just find new bugs constantly and need to fix them constantly). But you don&#x27;t have to fix a bug if an acceptable mitigation exists. People who still run Windows 98 or XP can&#x27;t fix bugs, but they do work around them. And so maintenance can take the form of performing tasks which aren&#x27;t <i>changing</i> the software, but are tasks that make it continue to function.<p>3. Actually shipping updates to the code to fix bugs. This isn&#x27;t strictly necessary. There are many bug-riddled software systems that have been going for 40 years without patches (for the most part). But in the modern era, we have so gotten used to the website model of daily updating a piece of software, that this is what we assume &#x27;software maintenance&#x27; means.<p>Once you write a piece of code, you <i>might</i> continue to maintain it using #3, but even if you don&#x27;t, you will <i>absolutely</i> have to perform #1 and #2, if you want it to keep working. If you are very <i>lucky</i>, and the system is &quot;on&quot; but doesn&#x27;t actually do anything, you can get away with not doing any maintenance. But the more you use it, the faster it needs maintenance.
dwheeler超过 2 年前
I&#x27;ve often told people &quot;There is only one program: Hello, world! Everything afterwards is maintenance.&quot;
PaulKeeble超过 2 年前
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.
dangus超过 2 年前
I guess this is an interesting thought experiment but by the conclusion I felt like it&#x27;s just splitting hairs on terminology.<p>I don&#x27;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.
评论 #34293585 未加载
forty超过 2 年前
I have been working (I avoid using either &quot;developing&quot; or &quot;maintaining&quot; here on purpose, tough I would have used either of them in another context) on the same code base (mostly) for more than 10 years (doing code, infra and operation)<p>Well, we can nitpick on the wording all we want, but there are times when I feel I&#x27;m cleaning my apartment or repairing it (maintenance) and times when I&#x27;m extending it (developing).<p>Now if the point of the author (I&#x27;m not sure) is that you cannot develop without maintaining because both go hand in hand then I agree.
PeterStuer超过 2 年前
The project model is forced on large parts of the industry because no one but the direct customer is willing to fund the development of a bespoke piece of software.<p>This brings about the distincion of the phases pre and post acceptance.<p>The &#x27;maitainance&#x27; is a customary upkeep as no one but the outside developer can in practice economicaly assure the system&#x27;s ongoing operation. It also incentivises the service provider to respond to keep servicing smaller adaptation requests.
评论 #34298214 未加载
Groxx超过 2 年前
Sure, but this is sort of like saying there is only one programming language because they&#x27;re all turing complete. Code produces behavior, and that&#x27;s the actual goal, so why do we bother separating them and talking about it? Produce behavior! Wait, no, we&#x27;re all just <i>workers</i> because farming is also just behavior. If you really think about it, it&#x27;s all just <i>change</i>, let&#x27;s refer to it as such, not &quot;making a bridge&quot; or &quot;toasting bread&quot;.<p>For there not being two distinct phases: well.... it depends on how you draw the line. &quot;Prototype works&quot; -&gt; every change after that is arguably maintenance, not development, since it <i>has been developed</i>. What you&#x27;re doing is then &quot;just&quot; handling its interactions with the real world - roughly equivalent to repair (fix bug &#x2F; replace broken component) and maintenance (prevent total failure when one host dies &#x2F; lubricate parts so they don&#x27;t fail as quickly).<p>We don&#x27;t refer to lubricating and replacing parts as building the machine though. I&#x27;m not <i>building my laptop</i> when I plug it into a charger.<p>---<p>Even if we both stop taking things to absurd extremes: I agree things are not &quot;developed&quot; <i>and then</i> &quot;maintained&quot; in most modern, always-updating systems, but I can definitely separate much of what I do into &quot;development&quot; and &quot;maintenance&quot;. 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...<p>The list of things we do beyond <i>initial &quot;development&quot; of a feature</i> almost totally regardless of where that line is drawn is vast, and you can often adjust how much of it you do now vs later... but you generally cannot do &quot;some&quot; development later. It either works or it doesn&#x27;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&#x27;t say &quot;oh we&#x27;ll figure out the conditions of that if statement next month, ignore it for now&quot;.
PicassoCTs超过 2 年前
Softwares state is depending on how close it is to the actual&#x2F;perceived economic hot-loop in the product.<p>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.
phplovesong超过 2 年前
This reeks of the very common &quot;feature factory&quot; (<a href="https:&#x2F;&#x2F;medium.com&#x2F;@johnpcutler&#x2F;12-signs-youre-working-in-a-feature-factory-44a5b938d6a2" rel="nofollow">https:&#x2F;&#x2F;medium.com&#x2F;@johnpcutler&#x2F;12-signs-youre-working-in-a-...</a>) dev shop. With this mindset you will most definitely have a bug-ridden hard to maintain app in a few years.
wojciii超过 2 年前
I develop embedded software. When products mature and are released they might need maintenance in the sense that the original SW team is not working at the company any more or working on something else.<p>One or more developers gets tasked with maintenance of this product and can bugfix fast instead of trying to ressurect the original software team.<p>So in my opinion maintenance is real and often used in different industries. :)
评论 #34297425 未加载
jackconsidine超过 2 年前
Seems like an argument of semantics. I&#x27;ve had many projects with a distinct development phase (high input), and maintenance phase (monitoring, low input, a feature every now and then). To think there is only one gear of dev velocity to me seems silly, as does debating the phase labels
015a超过 2 年前
I have had a really frustrating relationship with software maintenance in all of the companies I&#x27;ve worked for.<p>I&#x27;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?<p>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 &quot;we build things that last years&quot; peers. Its weird because, well, our organizations in my experience chronically under-invest in maintenance then act flustered when new developments don&#x27;t meet deadlines or take forever; but its also weird because all of my experience screams at me &quot;I&#x27;m not even sure if we <i>know</i> how to maintain systems well&quot;.<p>I&#x27;ve seen this in one org (a public company you&#x27;d recognize); where years ago we had and met lofty goals like &quot;99.999% availability&quot;; 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&#x27;t; everyone knows that; but we will <i>literally</i> never have the product dev time to really fix the problem; maybe, taking what we&#x27;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 <i>won&#x27;t</i> 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 <i>is</i> more complexity, it <i>is</i> more code, and in a lot of cases we&#x27;ve replaced one way that something fails, predictably, with N ways it can now fail, unpredictably, hopefully less often.<p>The other thing that no one will admit is: If the state-of-art way to fix something that needs fixed is to &quot;take what we&#x27;ve learned from the old thing and rebuild it&quot; (oftentimes, this is the best way; but that&#x27;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 <i>almost always</i> easier than taking it on tomorrow; and it usually leads to productivity boons which magnify over time.<p>I word a lot of that from the perspective of developer experience&#x2F;productivity, but it fits just as well with Security maintenance. I&#x27;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. &quot;We have to rotate these&quot;; 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 <i>that</i> to people; but that&#x27;s what we&#x27;re all thinking). We don&#x27;t have that; we can build it, but now the app has 5000x the traffic and complexity, so it&#x27;ll take time.<p>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 <i>know</i> how to keep them running well and highly productive <i>if</i> we could fight for more time. One of the phrases I hear all the time, across many orgs: &quot;small steps toward improvement&quot;. I think people who say that have either given up (learned helplessness), and&#x2F;or they&#x27;re critically unobservant of the inherent entropy of software systems. There is, no doubt in my mind, a &quot;rate of decay&quot; 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&#x27;t investing <i>more</i> time in maintenance than your system&#x27;s rate of decay, you&#x27;re going to cause your People, your Customers, and if you&#x27;re very unlucky (cough LastPass) your Business a lot of pain.<p>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.<p>[1] <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=ZSRHeXYDLko">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=ZSRHeXYDLko</a>
评论 #34297638 未加载