davideisinger.com

My personal website
Log | Files | Refs | README

www-danstroot-com-wwjfi6.txt (36987B)


      1 [1]Dan Stroot
      2 [2]Home[3]About[4]Archive[5]Snippets[6]Uses[7]Quotes
      3 [8]
      4 Toggle Menu
      5 
      6 Making Software Last Forever
      7 
      8 Hero image for Making Software Last Forever
      9 27 min read
     10 [10]
     11 Dan Stroot
     12 Dan Stroot
     13 May 25, 2023
     14 
     15 How many of us have bought a new home because our prior home was not quite
     16 meeting our needs? Maybe we needed an extra bedroom, or wanted a bigger
     17 backyard? Now, as a thought experiment, assume you couldn't sell your existing
     18 home. If you bought a new home, you'd have to "retire" or "decommission" your
     19 prior home (and your investment in it). Does that change your thinking?
     20 
     21 Further, imagine you had a team of five people maintaining your prior home,
     22 improving it, and keeping it updated, for the last ten years. You'd have a
     23 cumulative investment of 50 person/years in your existing home (5 people x 10
     24 years) just in maintenance, on top of the initial investment. If each person
     25 was paid the equivalent of a software developer (we'll use $200k to include
     26 benefits, office space, leadership, etc.) you'd have an investment just in
     27 labor of $10 million dollars (50 person/years x $200,000). Would you walk away
     28 from that investment?
     29 
     30 When companies decide to re-write or replace an existing software application,
     31 they are making a similar decision. Existing software is "retired" or
     32 "decommissioned" (along with its cumulative investment). Yet the belief that
     33 new code is always better than old is patently absurd. Old code has weathered
     34 and withstood the test of time. It has been battle-tested. You know it's
     35 failure modes. Bugs have been found, and more importantly, fixed.
     36 
     37 Joel Spolsky (of Fog Creek Software and Stack Overflow) describes system
     38 re-writes in "[11]Things You Should Never Do, Part I" as “the single worst
     39 strategic mistake that any software company can make.”
     40 
     41 Continuing our home analogy, recent price increases for construction materials
     42 like lumber, drywall, and wiring (and frankly everything else) should,
     43 according to Economics 101, cause us to treat our current homes more dearly.
     44 Similarly, price increases for quality software engineers should force
     45 companies to treat existing software more dearly.
     46 
     47 Lots of current software started out as C software from the 1980s. Engineers
     48 don't often write software with portability as a goal at the beginning, but
     49 once something is relatively portable, it tends to stay that way. Code that was
     50 well designed and written often migrated from mini-computers to i386, from i386
     51 to amd64, and now ARM and arch64, with a minimum of redesign or effort. You can
     52 take large, complicated programs from the 1980s written in C, and compile/run
     53 them on a modern Linux computer - even when the modern computer is running
     54 architectures which hadn't even been dreamt of when the software was originally
     55 written.
     56 
     57 Why can't software last forever? It's not made of wood, concrete, or steel. It
     58 doesn't "wear out", rot, weather, or rust. A working algorithm is a working
     59 algorithm. Technology doesn’t need to be beautiful, or impress other people, to
     60 be effective. Aren't technologists ultimately in the business of producing cost
     61 effective technology?
     62 
     63 I am going to attempt to convince you that maintaining your existing systems is
     64 one the most cost-effective technology investments you can make.
     65 
     66 The World's Oldest Software Systems
     67 
     68 In 1958, the United States Department of Defense launched a new computer-based
     69 contract management system called "Mechanization of Contract Administration
     70 Services", or MOCAS (pronounced “MOH-cass”). In 2015, [12]MIT Technology Review
     71 stated that MOCAS was the oldest computer program in continuous use they could
     72 verify. At that time MOCAS managed about $1.3 trillion in government
     73 obligations and 340,000 contracts.
     74 
     75 According to the [13]Guinness Book of World Records, the oldest software system
     76 in use today is either the [14]SABRE Airline Reservation System (introduced in
     77 1960), or the IRS Individual Master File (IMF) and Business Master File (BMF)
     78 systems introduced in 1962–63.
     79 
     80 SABRE went online in 1960. It had cost $40 million to develop and install
     81 (about $400 million in 2022 dollars). The system took over all American
     82 Airlines booking functions in 1964, and the system was expanded to provide
     83 access to external travel agents in 1976.
     84 
     85 What is the secret to the long lifespan of these systems? Shouldn't companies
     86 with long-lived products (annuities, life insurance, etc.) study these
     87 examples? After all, they need systems to support products that last most of a
     88 human lifespan. However, shouldn't all companies want to their investments in
     89 software to last as long as possible?
     90 
     91 Maintenance is About Making Something Last
     92 
     93 We spoke of SABRE above, and we know that airlines recognize the value of
     94 maintenance. Commercial aircraft are inspected at least once every two days.
     95 Engines, hydraulics, environmental, and electrical systems all have additional
     96 maintenance schedules. A "heavy" maintenance inspection occurs once every few
     97 years. This process maintains the aircraft's service life over decades.
     98 
     99 On average, an aircraft is operable for about 30 years before it must be
    100 retired. A Boeing 747 can endure 35,000 pressurization cycles — roughly 135,000
    101 to 165,000 flight hours — before metal fatigue sets in. However, most older
    102 airframes are retired for fuel-efficiency reasons, not because they're worn
    103 out.
    104 
    105 Even stuctures made of grass can last indefinitely. [15]Inca rope bridges were
    106 simple suspension bridges constructed by the Inca Empire. The bridges were an
    107 integral part of the Inca road system were constructed using ichu grass.
    108 
    109 Inca Rope Bridge
    110 
    111 Even though they were made of grass, these bridges were maintained with such
    112 regularity and attention they lasted centuries. The bridge's strength and
    113 reliability came from the fact that each cable was replaced every June.
    114 
    115 The goal of maintenance is catching problems before they happen. That’s the
    116 difference between maintenance and repair. Repair is about fixing something
    117 that’s already broken. Maintenance is about making something last.
    118 
    119 Unfortunately, Maintenance is Chronically Undervalued
    120 
    121 Maintenance is one of the easiest things to cut when budgets get tight. Some
    122 legacy software systems have decades of underinvestment in maintenance. This
    123 leads up to the inevitable "we have to replace it" discussion - which somehow
    124 always sounds more persuasive (even though it’s more expensive and riskier)
    125 than arguing to invest in system rehabilitation and deferred system
    126 maintenance.
    127 
    128 Executives generally can't refuse "repair" work because the system is broken
    129 and must be fixed. However, maintenance is a tougher sell. It’s not strictly
    130 necessary — or at least it doesn’t seem to be until things start falling apart.
    131 It is so easy to divert maintenance budget into a halo project that gets an
    132 executive noticed (and possibly promoted) before the long-term effects of
    133 underinvestment in maintenance become visible. Even worse, the executive is
    134 also admired for reducing the costs of maintenance and switching costs from
    135 "run" to "grow" - while they are torpedoing the company under the waterline.
    136 
    137 The other challenge is conflating enhancement work with maintenance work.
    138 Imagine you have $1,000 and you want to add a sunroof to your car, but you also
    139 need new tires (which coincidentally also cost $1,000). You have to replace the
    140 tires every so often, but a sunroof is "forever" right? If you spend the money
    141 on the sunroof the tires could get replaced next month, or maybe the month
    142 after - they'll last a couple more months, won't they?
    143 
    144 With software, users can't see "the bald tires" - they only thing they see, or
    145 experience (and value), are new features and capabilities. Pressure is always
    146 present to cut costs and to add new features. The result is budget always
    147 swings away from maintenance work towards enhancements.
    148 
    149 Finally, maintenance work is typically an operational cost, yet building a new
    150 system, or a significant new feature, can often be capitalized - making the
    151 future costs someone else's problem.
    152 
    153 Risks of Replacing Software Systems
    154 
    155 It's usually not the design or the age of a system that causes it to fail but
    156 rather neglect. People fail to maintain software systems because they are not
    157 given the time, incentives, or resources to maintain them.
    158 
    159     "Most of the systems I work on rescuing are not badly built. They are badly
    160     maintained."
    161 
    162     — Marianne Bellotti, Kill it With Fire
    163 
    164 Once a system degrades it is an enormous challenge to fund deferred maintenance
    165 (or "technical debt"). No one plans for it, no one wants to pay for it, and no
    166 engineer wants to do it. Initiatives to restore operational excellence, much
    167 the way one would fix up an old house, tend to have few volunteers among
    168 engineering teams. No one gets noticed doing maintenance. No one ever gets
    169 promoted because of maintenance.
    170 
    171 It should be clear why engineers prefer to re-write a system rather than
    172 maintain it. They get to "write a new story" rather than edit someone else's.
    173 They will attempt to convince a senior executive to fund a project to replace a
    174 problematic system by describing all the new features and capabilities that
    175 could be added as well as how "bad" the existing, unmaintained, system has
    176 become. Further, they will get to use modern technology that makes them much
    177 more valuable in the market.
    178 
    179 Incentives aside, engineering teams tend to gravitate toward system rewrites
    180 because they incorrectly think of old systems as specs. They assume that since
    181 an old system works, the functional risks have been eliminated. They can focus
    182 on adding more features to the new system or make changes to the underlying
    183 architecture without worry. Either they do not perceive the ambiguity these
    184 changes introduce, or they see such ambiguity positively, imagining only gains
    185 in performance and the potential for innovation.
    186 
    187 Why not authorize that multimillion-dollar replacement if the engineers
    188 convince management the existing system is doomed? Eventually a "replacement"
    189 project will be funded (typically at a much higher expenditure than
    190 rehabilitating the existing system). Even if the executives are not listening
    191 to the engineers, they will be listening to external consultants telling them
    192 they are falling behind.
    193 
    194 What do you do with the old system while you’re building the new one? Most
    195 organizations put the old system on “life support” and give it only the
    196 resources for patches and fixes necessary to keep it running. This reduces
    197 maintenance even further and becomes a self-fulfilling prophecy that the
    198 existing system will eventually fail.
    199 
    200 Who gets to work on the new system, and who takes on the maintenance tasks of
    201 the old system? If the old system is written in older technology that the
    202 company is actively abandoning, the team maintaining the old system is
    203 essentially sitting around waiting to be fired. And don’t kid yourself, they
    204 know it. If the people maintaining the old system are not participating in the
    205 creation of the new system, you should expect that they are also looking for
    206 new jobs. If they leave before your new system is operational, you lose both
    207 their expertise and their institutional knowledge.
    208 
    209 If the new project falls behind schedule (and it almost certainly will), the
    210 existing system continues to degrade, and knowledge continues to walk out the
    211 door. If the new project fails and is subsequently canceled, the gap between
    212 the legacy system and operational excellence has widened significantly in the
    213 meantime.
    214 
    215 This explains why executives are loathe to cancel system replacement projects
    216 even when they are obviously years behind schedule and failing to live up to
    217 expectations. Stopping the replacement project seems impossible because the
    218 legacy system is now so degraded that restoring it to operational excellence
    219 seems impossible. Plus, politically canceling a marquee project can be career
    220 suicide for the sponsoring executive(s). Much better to do "deep dives" and
    221 "assessments" on why the project is failing and soldier on than cancel it.
    222 
    223 The interim state is not pretty. The company now has two systems to operate,
    224 much higher costs and new risks.
    225 
    226   • The new system will have high costs, limited functionality, new and unique
    227     errors/issues, and lower volumes (so the "per unit cost" of the new system
    228     will be quite high).
    229   • The older system will still be running most of the business, and usually
    230     all of the complex business, while having lost its best engineers and
    231     subject matter experts. Its maintenance budget will have been whittled down
    232     to nothing to redirect spending to implement (save?) the new system. This
    233     system will be in grave danger to significant system failure (which
    234     proponents of the new system will use to justify the investment in the new
    235     system, not admitting to a self-fulfilling prophecy).
    236 
    237 Neither system will exhibit operational excellence, and both put the
    238 organization at significant risk in addition to the higher costs and complexity
    239 of running two systems.
    240 
    241 Maintaining Software to Last Forever
    242 
    243 As I discussed in [16]How Software Learns, software adapts over time - as it is
    244 continually refined and reshaped by maintenance and enhancements. Maintenance
    245 is crucial to software's lifespan and business relevance/value. When software
    246 systems are first developed, they are based on a prediction of the future - a
    247 prediction of the future that we know is wrong even as we make it. No set of
    248 requirements have ever been perfect. However, all new systems become "less
    249 wrong" as time, experience, and knowledge are continually added (e.g.,
    250 maintenance).
    251 
    252 Futureproofing means constantly rethinking and iterating on the existing
    253 system. We know from both research and experience that iterating and
    254 maintaining existing solutions is a much more likely, and less expensive, way
    255 to improve software's lifespan and functionality.
    256 
    257 Before choosing to replace a system that needs deferred maintenance remember
    258 it’s the lack of maintenance that create the impression that failure is
    259 inevitable, and pushes otherwise rational engineers and executives toward
    260 rewrites or replacements. What mechanisms will prevent lack of maintenance from
    261 eventually dooming the brand-new system? Has the true root problem been
    262 addressed?
    263 
    264 Robust maintenance practices could preserve software for decades, but first
    265 maintenance must be valued, funded, and applied. To maintain software properly
    266 we have to consider:
    267 
    268  1. How do you measure the overall health of a system?
    269  2. How do you define and manage maintenance work?
    270  3. How do you define a reasonable maintenance budget? How can you protect that
    271     budget?
    272  4. How do you motivate engineers to perform maintenance?
    273 
    274 1. How do you measure the overall health of a system?
    275 
    276 Objective measures
    277 
    278  1. Maintenance Backlog — If you added up all the open work requests, including
    279     work the software engineers deem necessary to eliminate technical debt,
    280     what is the total amount of effort? Now, divide that by the team capacity.
    281     For example, imagine you have a total amount of work of 560 days, and you
    282     have one person assigned to support the system - they work approximately
    283     200 days annually. The backlog in days in 560, but in time it is 2.8 years
    284     (560 days / 200 days/year = 2.8 years). What is a reasonable amount of
    285     backlog time?
    286 
    287  2. System Reliability/Downtime — If you added up all the time the system is
    288     down in a given period, what is the total amount? What is the user or
    289     customer impact of that downtime? Conversely, what would reducing that
    290     downtime be worth? What is the relationship of maintenance and downtime? In
    291     other words, does the system need to be taken down to maintain it (planned
    292     maintenance)? Does planned maintenance reduce unplanned downtime?
    293 
    294  3. Capacity/Performance Constraints — Is the existing hitting capacity
    295     constraints that will prevent future growth of the business? How
    296     unpredictable are the system capacity demands? What is the customer
    297     experience when the system capacity is breached? What is relationship
    298     between hardware and software that constrains the system? Is the software
    299     performant? Can hardware solve the problem?
    300 
    301 Subjective measures
    302 
    303  1. User Satisfaction: User satisfaction includes both how happy your employees
    304     are with the applications and/or how well those applications meet your
    305     customer's needs. Many times I have found the technology team and the
    306     business users arguing over "bug" vs. "enhancement". It is a way of
    307     assigning blame. "Bug" means its engineering's fault, "enhancement" means
    308     it was a missed requirement. When emotions run hot it means that the
    309     maintenance budget is insufficient. I always tell everyone they are both
    310     just maintenance and the only important decision is which to prioritize and
    311     fix first.
    312 
    313  2. “Shadow IT” — If you used applications in the past that didn’t meet
    314     employees’ needs, and didn’t have a good governance plan to address
    315     problems, you may have noticed employees found other solutions on their
    316     own. This is an indication of underfunded maintenance.
    317 
    318  3. Adaptable Architecture — "The cloud", API-based integration, and unlocking
    319     your data are no longer “nice to haves.” Your architecture needs to adapt.
    320     If these are challenges, then the architecture must be addressed.
    321 
    322  4. Governance — Healthy application architecture isn’t just about
    323     technology—it’s also about having well-documented and well-understood
    324     governance documents that guide technology investments for your
    325     organization. Good governance helps create adaptable architecture and avoid
    326     “shadow IT” applications.
    327 
    328 2. How do you define maintenance work?
    329 
    330 There are four general types of software maintenance. The first two types take
    331 up the majority of most organizations' maintenance budget, and may not even be
    332 considered maintenance - however, all four types must be funded adequately for
    333 software to remain healthy. If you can't fully address types three and four
    334 your maintenance budget is inadequate.
    335 
    336 1. Corrective Software Maintenance (more accurately called "repair")
    337 
    338 Corrective software maintenance is necessary when something goes wrong in a
    339 piece of software including faults and errors. These can have a widespread
    340 impact on the functionality of the software in general and therefore must be
    341 addressed as quickly as possible. However, it is important to consider repair
    342 work separate from the other types of maintenance because repair work must get
    343 done. Note: this is generally the only type of work that happens when a system
    344 is put on "life support".
    345 
    346 2. Perfective Software Maintenance (more accurately called "enhancements")
    347 
    348 Once software is released and is being used new issues and ideas come to the
    349 surface. Users will think up new features or requirements that they would like
    350 to see. Perfective software maintenance aims to adjust software by adding new
    351 features as necessary (and removing features that are irrelevant or not
    352 effective). This process keeps software relevant as the market, and user needs,
    353 evolve. It there is funding beyond "life support" it usually is spent here.
    354 
    355 3. Preventative Software Maintenance (true maintenance is catching problems
    356 before they happen.)
    357 
    358 Preventative software maintenance is looking into the future so that your
    359 software can keep working as desired for as long as possible. This includes
    360 making necessary changes, upgrades, and adaptations. Preventative software
    361 maintenance may address small issues which at the given time may lack
    362 significance but may turn into larger problems in the future. These are called
    363 latent faults which need to be detected and corrected to make sure that they
    364 won’t turn into effective faults. This type of maintenance is generally
    365 underfunded.
    366 
    367 4. Adaptive Software Maintenance (true maintenance adapts to changes)
    368 
    369 Adaptive software maintenance is responding to the changing technology
    370 landscape, as well as new company policies and rules regarding your software.
    371 These include operating system changes, using cloud technology, security
    372 policies, hardware changes, etc. When these changes are performed, your
    373 software (and possibly architecture) must adapt to properly meet new
    374 requirements and meet current security and other policies.
    375 
    376 3. How do you define a reasonable maintenance budget? How can you protect that
    377 budget?
    378 
    379 In the case of the Inca rope bridges what was the cost of maintenance annually?
    380 Let's assume some of the build work was site preparation and building the stone
    381 anchors on each side, but most of the work was constructing the bridge itself.
    382 Since the bridge was entirely replaced each year, the maintenance costs could
    383 be as much as 80% of the initial build effort, every year.
    384 
    385 Comparing to "software as a service" (SaaS) vendors is difficult because they
    386 have shifted to a subscription model that bundles infrastructure, enhancements,
    387 and ongoing maintenance. Prior to SaaS subscription-based pricing one would
    388 typically buy a perpetual license plus maintenance at ~20-30% annual cost of
    389 the license to obtain support and updates.
    390 
    391 Side note: Now that the SaaS annual costs are commingled, some enterprises fall
    392 into the trap that “building it is cheaper because we pay up front but then it
    393 will cost less in the long run” assuming the "long run" almost always
    394 underprices infrastructure and assumes near zero maintenance cost. In the case
    395 of a brand-new, internally designed and developed software system - one that is
    396 well architected, well designed, well built, and meets all reliability,
    397 scalability, and performance needs (i.e., fantasy software) it's conceivable
    398 that there is no maintenance necessary for some period of time - but very
    399 unlikely.
    400 
    401 So, maintenance costs can have a very wide range. A general rule of thumb is
    402 20-30% of the initial build cost will be required for ongoing maintenance work
    403 annually. However, maintenance costs usually start off lower and increase over
    404 time. They are also unpredictable costs that are hard to budget.
    405 
    406 The challenges should be obvious. First, budgets in large organizations tend be
    407 last year's budget plus 2-3%. If you start with a maintenance budget of zero on
    408 a new system, how do you ever get to the point of a healthy maintenance budget
    409 in the future? Second, maintenance costs are unpredictable, and organizations
    410 hate unpredictable costs. It's impossible to say when the next new hardware, or
    411 storage, or programming construct will occur, or when the existing system will
    412 hit a performance or scalability inflection point.
    413 
    414 This is like buying a brand-new car. The maintenance costs are negligible in
    415 the first couple years, until they start to creep up. Then things start to need
    416 maintenance, replacement, or repair. As the car ages the maintenance costs
    417 continue to increase until at some point it makes economic sense to buy another
    418 new car. Except none of us wait that long. Most of us buy new cars before our
    419 old one is completely worn out. As a counter-example, in Cuba some cars have
    420 been maintained meticulously for 30-40 years and run better than new.
    421 
    422 Protecting your maintenance budget - creating a "maintenance fund"
    423 
    424 We know that maintenance cost increase over time, and the costs of proper
    425 maintenance are unpredictable. In addition, there is some amount of management
    426 discretion that can be applied. When your house needs a new roof it's
    427 reasonable to defer it through summer, but it probably needs to be done before
    428 winter.
    429 
    430 Since business require predictability of costs, unpredictable maintenance costs
    431 are easy to defer. "We didn't budget for that; we'll have to put it in next
    432 year's budget." Except of course in the budget process it will compete with
    433 other projects and enhancement work, where it's again likely to be
    434 deprioritized.
    435 
    436 What's the solution? Could it be possible to create some type of maintenance
    437 fund where a predictable amount is budgeted each year, and then spent
    438 "unpredictably" when/as needed? Could this also be a solution to preventing
    439 executives from diverting maintenance budget into pet projects by protecting
    440 this maintenance fund in some fashion?
    441 
    442 4. How do you motivate software engineers to perform maintenance?
    443 
    444 There is a Chinese proverb about a discussion between a king and a famous
    445 doctor. The well-known doctor explains to the king that his brother (who is
    446 also a doctor) is superior at medicine, but he is unknown because he always
    447 successfully treats small illnesses, preventing them from evolving into more
    448 serious or terminal ones. So, people say "Oh he is a fine doctor, but he only
    449 treats minor illnesses". It's true: [17]Nobody Ever Gets Credit for Fixing
    450 Problems that Never Happened.
    451 
    452 To most software engineers, legacy systems seem like torturous dead-end work,
    453 but the reality is systems that are not important get turned off. Working on
    454 "estate" systems means working on some of the most critical systems that exist
    455 — computers that govern millions of people’s lives in enumerable ways. This is
    456 not the work of technical janitors, but battlefield surgeons.
    457 
    458 Engineering loves new technology. It gains the engineers attention and industry
    459 marketability. [18]Boring technology on the other hand is great for the company
    460 . The engineering cost is lower, and the skills are easier to obtain and keep,
    461 because these engineers are not being pulled out of your organization for
    462 double their salary by Amazon or Google.
    463 
    464 Well-designed, high-functioning software that is easy to understand usually
    465 blends in. Simple solutions do not do much to enhance one’s personal brand.
    466 Therefore, when an organization provides limited pathways to promotion for
    467 software engineers, they tend to make technical decisions that emphasize their
    468 individual contribution and technical prowess. You have to be very careful to
    469 reward what you want from your engineering team.
    470 
    471 What earns them the acknowledgment of their peers? What gets people seen is
    472 what they will ultimately prioritize, even if those behaviors are in open
    473 conflict with the official direction they receive from management. In most
    474 organizations shipping new code gets attention, while technical debt accrues
    475 silently in the background.
    476 
    477 The specific form of acknowledgment also matters a lot. Positive reinforcement
    478 in the form of social recognition tends to be a more effective motivator than
    479 the traditional incentive structure of promotions, raises, and bonuses.
    480 Behavioral economist Dan Ariely attributes this to the difference between
    481 social markets and traditional monetary-based markets. Social markets are
    482 governed by social norms (read: peer pressure and social capital), and they
    483 often inspire people to work harder and longer than much more expensive
    484 incentives that represent the traditional work-for-pay exchange. In other
    485 words, people will work really hard for positive reinforcement from their peers
    486 .
    487 
    488 Legacy System Modernization
    489 
    490 Unmaintained software will certainly die at some point. Due to factors
    491 discussed above, software does not always receive the proper amount of
    492 maintenance to remain healthy. Eventually a larger modernization effort may
    493 become necessary to restore a system to operational and functional excellence.
    494 
    495 Legacy modernization projects start off feeling easy. The organization once had
    496 a reliable working system and kept it running for years. All the modernizing
    497 team should need to do is simply reshape it using better technology, better
    498 architecture, the benefit of hindsight, and improved tooling. It should be
    499 simple. But, because people do not see the hidden technical challenges they are
    500 about to uncover, they also assume the work will be boring. There’s little
    501 glory to be had re-implementing a solved problem.
    502 
    503 Modernization projects are also typically the ones organizations just want to
    504 get out of the way, so they launch into them unprepared for the time and
    505 resource commitments they require. Modernization projects take months, if not
    506 years of work. Keeping a team of engineers focused, inspired, and motivated
    507 from beginning to end is difficult. Keeping their senior leadership prepared to
    508 invest in what is, in effect, something they already have is a huge challenge.
    509 Creating momentum and sustaining it are where most modernization projects fail.
    510 
    511 The hard part about legacy modernization is the "system around the system". The
    512 organization, its communication structures, its politics, and its incentives
    513 are all intertwined with the technical product in such a way that to improve
    514 the product, you must do it by turning the gears of this other, complex,
    515 undocumented system. Pay attention to politics and culture. Technology is at
    516 most only 50% of the legacy problem, ways of working, organization structure
    517 and leadership/sponsorship are just as important to success.
    518 
    519 To do this, you need to overcome people’s natural skepticism and get them to
    520 buy in. The important word in the phrase "proof of concept" is proof. You need
    521 to prove to people that success is possible and worth doing. It can't be just
    522 an MVP, because [19]MVPs are dangerous.. A red flag is raised when companies
    523 talk about the phases of their modernization plans in terms of which
    524 technologies they are going to use rather than what value they will add.
    525 
    526 For all that people talk about COBOL dying off, it is good at certain tasks.
    527 The problem with most old COBOL systems is that they were designed at a time
    528 when COBOL was the only option. Start by sorting which parts of the system are
    529 in COBOL because COBOL is good at performing that task, and which parts are in
    530 COBOL because there were no other technologies available. Once you have that
    531 mapping, start by pulling the latter off into separate services that are
    532 written and designed using the technology we would choose for that task today.
    533 
    534 Going through the exercise of understanding what functionality is fit for use
    535 for specific languages/technologies not only gives engineers a way to keep
    536 building their skillsets but also is an opportunity to pair with other
    537 engineers who have different/complimentary skills. This exchange also has the
    538 benefit of diffusing the understanding of the system to a broader group of
    539 people without needing to solely rely on documentation (which never exists).
    540 
    541 Counterintuitively, SLAs/SLOs are valuable because they provide a "failure
    542 budget". When organizations stop aiming for perfection and accept that all
    543 systems will occasionally fail, they stop letting their technology rot for fear
    544 of change. In most cases, mean time to recovery (MTTR) is a more useful
    545 statistic to push than reliability. MTTR tracks how long it takes the
    546 organization to recover from failure. Resilience in engineering is all about
    547 recovering stronger from failure. That means better monitoring, better
    548 documentation, and better processes for restoring services, but you can’t
    549 improve any of that if you don’t occasionally fail.
    550 
    551 Although a system that constantly breaks, or that breaks in unexpected ways
    552 without warning, will lose its users’ trust, the reverse isn’t necessarily
    553 true. A system that never breaks doesn’t necessarily inspire high degrees of
    554 trust - and its maintenance budget is even easier to cut.
    555 
    556 People take systems that are too reliable for granted. Italian researchers
    557 Cristiano Castelfranchi and Rino Falcone have been advancing a general model of
    558 trust that postulates trust naturally degrades over time, regardless of whether
    559 any action has been taken to violate that trust. Under Castelfranchi and
    560 Falcone’s model, maintaining trust doesn’t mean establishing a perfect record;
    561 it means continuing to rack up observations of resilience. If a piece of
    562 technology is so reliable it has been completely forgotten, it is not creating
    563 those regular observations. Through no fault of the technology, the user’s
    564 trust in it slowly deteriorates.
    565 
    566 When both observability and testing are lacking on your legacy system,
    567 observability comes first. Tests tell you only what shouldn’t fail; monitoring
    568 tells you what is failing. Don’t forget: a perfect record will always be
    569 broken, but resilience is an accomplishment that lasts. Modern engineering
    570 teams use stats like service level objectives, error budgets, and mean time to
    571 recovery to move the emphasis away from avoiding failure and toward recovering
    572 quickly.
    573 
    574 Summary
    575 
    576 Maintenance mostly happens out of sight, mysteriously. If we notice it, it’s a
    577 nuisance. When road crews block off sections of highway to fix cracks or
    578 potholes, we treat it as an obstruction, not a vital and necessary process.
    579 This is especially true in the public sector: it’s almost impossible to get
    580 governmental action on, or voter interest in, spending on preventive
    581 maintenance, yet governments make seemly unlimited funds available once we have
    582 a disaster. We are okay spending a massive amount of money to fix a problem,
    583 but consistently resist spending a much smaller amount of money to prevent it;
    584 as a business strategy this makes no sense.
    585 
    586 The [20]Open Mainframe Project estimates that there about 250 billion lines of
    587 COBOL code running today in the world economy, and nearly all COBOL code
    588 contains critical business logic. Companies should maintain that software and
    589 make it last as long as possible.
    590 
    591 References
    592 
    593   • [21]Things You Should Never Do, Part I
    594   • [22]Patterns of Legacy Displacement
    595   • [23]Kill It with Fire: Manage Aging Computer Systems (and Future Proof
    596     Modern Ones)
    597   • [24]Building software to last forever
    598   • [25]The Disappearing Art Of Maintenance
    599   • [26]Inca rope bridge
    600   • [27]How Often Do Commercial Airplanes Need Maintenance?
    601   • [28]Nobody Ever Gets Credit for Fixing Problems that Never Happened
    602   • [29]Boring Technology Club
    603   • [30]Open Mainframe Project 2021 Annual Report
    604   • [31]How Popular is COBOL?
    605 
    606 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    607 
    608 Image Credit: Bill Gates, CEO of Microsoft, holds Windows 1.0 floppy discs.
    609 
    610 (Photo by Deborah Feingold/Corbis via Getty Images) This was the release of
    611 Windows 1.0. The beginning. Computers evolve. The underlying hardware, CPU,
    612 memory, and storage evolves. The operating system evolves. Of course, the
    613 software we use must evolve as well.
    614 
    615 Sharing is Caring
    616 
    617 [35]Edit this page
    618 
    619 Dan Stroot · Blog
    620 I love building things. Made in California. Family man, technologist and Hacker
    621 News aficionado. Eternally curious.
    622 [36]Join me on Twitter.[37]Join me on LinkedIn.[38]Join me on GitHub.
    623 Crafted with ♥️ in California. © 2024, [39]Dan Stroot
    624 
    625 References:
    626 
    627 [1] https://www.danstroot.com/
    628 [2] https://www.danstroot.com/
    629 [3] https://www.danstroot.com/about
    630 [4] https://www.danstroot.com/archive
    631 [5] https://www.danstroot.com/snippets
    632 [6] https://www.danstroot.com/uses
    633 [7] https://www.danstroot.com/quotes
    634 [8] https://www.danstroot.com/search
    635 [10] https://www.danstroot.com/about
    636 [11] https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/
    637 [12] https://www.technologyreview.com/2015/08/06/166822/what-is-the-oldest-computer-program-still-in-use/
    638 [13] https://www.guinnessworldrecords.com/world-records/636196-oldest-software-system-in-continuous-use
    639 [14] https://en.wikipedia.org/wiki/Sabre_(travel_reservation_system)
    640 [15] https://en.wikipedia.org/wiki/Inca_rope_bridge
    641 [16] https://www.danstroot.com/posts/2022-06-05-how-software-learns
    642 [17] https://web.mit.edu/nelsonr/www/Repenning=Sterman_CMR_su01_.pdf
    643 [18] https://engineering.atspotify.com/2013/02/in-praise-of-boring-technology/
    644 [19] https://www.danstroot.com/posts/2021-12-27-dangerous-mvps
    645 [20] https://www.openmainframeproject.org/
    646 [21] https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/
    647 [22] https://martinfowler.com/articles/patterns-legacy-displacement/
    648 [23] https://www.amazon.com/Kill-Fire-Manage-Computer-Systems/dp/1718501188
    649 [24] https://herman.bearblog.dev/building-software-to-last-forever/
    650 [25] https://www.noemamag.com/the-disappearing-art-of-maintenance/
    651 [26] https://en.wikipedia.org/wiki/Inca_rope_bridge
    652 [27] https://monroeaerospace.com/blog/how-often-do-commercial-airplanes-need-maintenance/#:~:text=Commercial%20airplanes%20require%20frequent%20maintenance,inspection%20once%20every%20few%20years.
    653 [28] https://web.mit.edu/nelsonr/www/Repenning=Sterman_CMR_su01_.pdf
    654 [29] https://boringtechnology.club/
    655 [30] https://www.openmainframeproject.org/wp-content/uploads/sites/11/2022/04/OMP_Annual_Report_2021_040622.pdf
    656 [31] https://news.ycombinator.com/item?id=33999718
    657 [35] https://github.com/dstroot/blog-next-13/blob/master/content/posts/2023-05-25-making_software_last_forever.mdx
    658 [36] https://twitter.com/danstroot
    659 [37] https://www.linkedin.com/in/danstroot
    660 [38] https://github.com/dstroot/blog-next
    661 [39] https://www.danstroot.com/analytics