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