+ All Categories
Home > Documents > Large Legacy Software Sample

Large Legacy Software Sample

Date post: 16-Aug-2015
Category:
Upload: tom-chambers
View: 218 times
Download: 0 times
Share this document with a friend
Description:
A sample of the large legacy software book
Popular Tags:
22
Transcript

Conquering Large Legacy SoftwareMike LongThis book is for sale at http://leanpub.com/largelegacysoftwareThis version was published on 2014-10-30This is a Leanpub book. Leanpub empowers authors and publishers with the LeanPublishing process. Lean Publishing is the act of publishing an in-progress ebookusing lightweight tools and many iterations to get reader feedback, pivot until youhave the right book and build traction once you do.2014 Mike LongContentsIntroduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1Why this book? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1About this book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2About the author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Credits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Part One: Legacy Redux . . . . . . . . . . . . . . . . . . . . . . . . . . 5Chapter 1: You can conquer large legacy software . . . . . . . . . . . . . 6What is legacy software? . . . . . . . . . . . . . . . . . . . . . . . . . . . 6What does conquered software look like?. . . . . . . . . . . . . . . . . . 8Why measurement is essential . . . . . . . . . . . . . . . . . . . . . . . . 8Fear is the enemy, communication is your weapon . . . . . . . . . . . . . 10Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10In Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Chapter 2: Is bankruptcy an option? . . . . . . . . . . . . . . . . . . . . . . 12Rewrite or improve? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18Rewrite AND improve? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19In Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19IntroductionWhy this book?There is no shortage of books on software development. Most of themfocus on howtowrite perfect software, at least, according with one persons definition of perfection.This ideal is noble and necessary because the ambition for software perfection pushesforward our craft and allows us to learn best from example.We now have a huge body of knowledge concerned with approaches to managing,designing, coding, and testing software projects from scratch. However, this type ofGreenfield development is a rare experience for the majority of software profession-als. Most of our time is invested in working on software that already exists - andfor good reason. Software that is already providing value to a business is more likelyto receive continued investment by expanding its scope of functionality. Softwarethat is under heavy use is more likely to have its defects discovered and fixed. Froma business perspective, it is clear that focusing resources on existing software is ano-brainer compared to the risks associated with new product development.As the years roll by, continued investment in a software project will result in alarge system. Some grow large slowly and deliberately, guided by technologicaloverseers with the best resources at their disposal. Others grow large quickly, fromintense pressure to capture a market and make an impact. Whatever their origins,all large projects have one thing in common: success. Success motivates continuousinvestment over time that is the prerequisite for becoming massive. And, despitethe best of intentions, it is a rare project that that grows large and still manages tomaintain a high quality bar.As projects grow and age the software becomes harder to change. Seemingly smallchanges take much longer than expected. More and more overhead seems to invadethe development cycle. At a tipping point, the project is labelled legacy andbecomes a self-fulfilling prophecy.Introduction 2So if the majority of work we do is on large legacy software, where do we look forguidance? That is where this book aims to come in handy. Think of it as a field manualfor dealing with large, long-lived projects. It focuses on attacking technical debtsand maximizing business value to give successful software projects the sustainablefutures they deserve. It is an attempt to find a place in our technical bookshelf forlong-lived valuable software alongside all the treatises on working with softwarethat does not already exist.If your project is small in scale this is not the book for you. If the developmentteam are content with the internal code quality of the project and the developmentprocess has little waste this is not the book for you. If your end-users are satisfiedwith the quality they experience using the product, this is not the book for you. Ifyour stakeholders have perfect trust in the direction of the project and require littleconvincing to pay back technical debt, this is not the book for you. If your projecthas little in the way of business expectation, this is not the book for you.If this book is not for you, congratulations; you are experiencing a rare anduntroubled software career!The intended audience for this book is anyone concerned with turning around thefortunes of a large legacy code base, be that a manager, a business stakeholder, ora technical contributor. While the subject is technical there will be little code here.And while all the advice is built on a solid technical foundation this book is focusedmore on the what to do versus the how to do.About this bookThis book is divided into 3 parts.Part 1 - Legacy ReduxPart one is a re-introduction to the concept of legacy software. It defines a legacyrestoration project, looks at what can be done with legacy software (and why not tocast it away), introduces technical debt, and describes internal and external softwarequality.Beyond that, it looks at the cost a lack of knowledge and understanding can incur ona development process. How out of date technologies, code no-one understands, andIntroduction 3business or domain requirements that nobody can explain should be measured andmanaged.Part 2 - Legacy SoftwarePart two introduces the reader to a variety of tools and techniques for measuringthe internal quality of large legacy software and shows how to use them to directimprovements. The types of improvement are categorized at the code level, the designlevel and the architecture level.Part 3 - Legacy ProcessPart three looks at the huge opportunities for waste reduction in typical legacyprojects. It show how to get huge gains in productivity by improving the testingand development working practices.Introduction 4About the authorMike LongMike Long is a software consultant, currently based in Oslo,Norway. His specialties include coaching and mentoring teamsto adopt modern technical practices in hostile legacy environ-ments.He has over 10 years professional software engineering experi-ence, working in a variety of cultures and business domains.Mike considers software as a craft, and enjoys sharing thepursuit of technical excellence with fellow professionals.Mike is active in the software community. As founder and organizer for the BeijingSoftware Craftsmanship Meetup he has helped bring together passionate softwarecraftsmen to share experience and skills. He is also a regular speaker and workshopfacilitator at international conferences in Europe and China, with focus areas onCleaning Code, Testing Legacy C, Long Life Software, and C++ Toolchains inaddition to organizing and facilitating workshops such as coding dojos and coderetreats.His previous experience working with embedded systems development in Norwayand England have instilled a great passion for test driven development, code craft,and avoiding oscilloscope debugging as much as humanly possible.Mike is the creator of the Fake Function Framework, the founder of the Beijing Soft-ware Craftsmanship Meetup Group, and an organizer for the Beijing HomebrewingSociety. Company: http://valtosconsulting.com/ Personal Blog: http://meekrosoft.wordpress.com/ Twitter: @meekrosoft Github: https://github.com/meekrosoft/CreditsCOVER DESIGN: Jonathan CoullCOVER IMAGE: (Mountain) ShutterstockPart One: Legacy ReduxThis book has a simple premise: large legacy software systems can be improved, andthe best way to do this is to provide a clear business case for improvement. The toolsand techniques in this book are designed to provide you with ways to measure andtrack the the costs associated with legacy systems.Part one of this book provides all the tools and information you need to set the stagefor improvement.Chapter 1: You can conquerlarge legacy softwareIf you are reading this book you probably work on a large software system. It mighteven be described as a legacy system. You may be lucky enough to have a job titlelike Maintenance Engineer or Sustaining Manager. In more reflective momentsyou might have asked yourself questions such as: Why do we live with legacy software systems? Does no one see the huge amount of waste here? Is there any hope of improving this mess? Why do simple changes take so much time? Am I crazy??Relax. These feelings are normal. Large legacy software projects can be difficultplaces to work. Sometimes it can seem like the inertia in the system makes anyimprovement insignificant and any success fleeting.But there is hope. Large legacy software projects can be improved. I know thisbecause Ive seen it, and others have seen it too. And it doesnt require rocket science.All it takes is some basic software practices and the will to apply them.This book will teach you tools and techniques for conquering large legacy software.But what is legacy software? And what does it look like when its conquered? Theseterms are open to interpretation, so lets begin by taking a moment to consider exactlywhat this book is really about.What is legacy software?Wikipedia defines a Legacy System asChapter 1: You can conquer large legacy software 7A legacy system is an old method, technology, computer system, orapplication program This isnt very helpful. All it says is that its old. We might as well call it OldSoftware but that wouldnt really capture the exact nature of what we want toexpress. Thankfully, there are more informative descriptions available.Michael Feathers has this to say:To me, legacy code is simply code without testsI think it is safe to say that this is not the most common definition of the term.Additionally, there are many examples of systems with huge test suites that we wouldstill recognize as legacy software.I have heard others describe legacy software as:Code that is hard to changeThis echoes Michael Featherss description in the sense that code without tests ismuch harder to change. However, every commercial software product could probablyfit this definition of legacy because once you have customers software becomes hardto change. You would also struggle to find any developer who would describe hiswork as making easy changes to software. All software would be defined as legacyby that standard!I think there are two concepts missing from both of these definitions: Quality andOrigin. The most common understanding of legacy is where software has qualityissues that are hard to change. A corollary is that it is software left behind by othersas an inheritance. In short, it means the people currently working on the softwarewere not around when it was written.We can merge the two main ideas about legacy code: code with insufficient qualitydeveloped by people who are no longer around. So, when you ask your averagedeveloper to define legacy code he might give a definition closer tohttp://en.wikipedia.org/w/index.php?title=Legacy_system&oldid=629360625Preface, Working Effectively with Legacy Code, Michael FeathersChapter 1: You can conquer large legacy software 8some crap made by someone elseAnd, honestly, I dont think there is a better definition around.What does conquered software look like?Now lets turn to the title of the book: what does it mean to conquer legacysoftware? What does conquered software look like?When you conquer large legacy software you restorethe software to meet the quality expectations of thebusiness.At first, it may appear counterintuitive to find that this definition does not proposean objective quality goal. Nor does it mean returning the software to the qualitythat the software team wishes, or the customer wishes, or even the project managerwishes. The reason is that good enough is an investment decision.So, the challenge is set: if the business gets to choose, how do you give yourstakeholders the information they need to make the right choices? How do youarticulate the quality needs of the software as business goals? And how do youprioritize improvements alongside functional requirements?This is the premise of this book: the only way to improve a software system is to beable to define improvements in measures that the business stakeholders understand.Let me explain whyWhy measurement is essentialFixing a large legacy software project is a huge task. It is not something that canbe done casually and it will not succeed as a side project. Unfortunately, there reallyare no silver bullets.This also means that it is a huge investment requiring an equally large commitment.And the bigger the mess, the greater the commitment needed. But big investmentsChapter 1: You can conquer large legacy software 9need to be justified in terms of their return. Will this really be worth it? What arethe hidden costs? What are the hidden returns? How do you know if you are gettinggood value from the investment?This is why improving software is such a hard sell. Marketing and sales teams willbe able to paint a convincing picture about the value of new features and quick bugfixes. However, they typically do not have the necessary experience to be able toexpress how internal improvements in quality and development efficiency wouldpositively impact the business, much less propose this type of work. That leaves youwith the responsibility of championing the value of such work.As front line engineers or managers youre probably familiar with the huge costs ofpoor quality, but at the strategic planning level this knowledge is lost. So, it is yourresponsibility to make the case for improvement. No one else in the organization hasthe insight and context for providing this information. And you have to live withthe consequences. It is you who has to worry about the release quality, developmentschedules, and team happiness. If you do nothing all of this is at risk.When working with project stakeholders the most important thing to remember isthis: internal quality and development waste is invisible in the non-technicalranks so it must be made real and meaningful to the business for any action tobe taken.So, you must be a communicator. You have to be able to speak clearly about thecurrent issues, and speak persuasively about the benefits and tradeoffs of proposedimprovements. Sensible business stakeholders will only invest in something that is: Transparent: everyone has a clear understanding of what improvement is Quantifiable: objective measures can be used to understand the size of theproblem and also track progress on achieving the goal Valuable: There is a strong business case in undertaking this workMeasurements provide all of this.Chapter 1: You can conquer large legacy software 10Fear is the enemy, communication is yourweaponSoftware development is an expensive pursuit. Salary costs dominate the budget inproduct development, and it is hugely wasteful to spend engineering time on internalimprovements which dont bear economic value. This is why it is so hard to convincebusiness stakeholders of the importance of internal improvements, and for goodreason. If it were too easy to convince a business to focus on internal work we mightnever deliver any value to our customers.For everyone involved in the project allocating resources comes at a very real price,so there needs to be equally tangible business benefits that everyone can share.Fuzzy goals with unmeasurable results will condemn improvement work to failurebecause resources initially earmarked for quality improvement will be re-assigned totasks with clear and present business value. However, concrete goals can resist thepressures of re-prioritization by giving everyone a meaningful justification for theirwork.I believe that there is always a business case for improving software. Poor qualitysoftware causes financial damage to a company, both in terms of escaped defectsand development efficiency. If you become skilled at communicating these costsyou will provide your company with the information needed to prioritize internalimprovements alongside new features.The communicated value of internal improvementsmust overcome the fear of financial wastePrerequisitesI have said that I believe there is always a case for improving large legacy software,but there are a couple of important prerequisites that must be in place. Firstly, thesoftware in question must be valuable to the business in some way. Secondly, theremust be a desire among stakeholders to improve the situation.Chapter 1: You can conquer large legacy software 11Valuable softwareIt doesnt make business sense to invest quality in software unless the software hassignificant business value. Without a valuable project it is impossible to obtain thebusiness commitment necessary to turn around a large codebase.The good news is that most production and commercial software has a considerablevalue even if it isnt obvious at first glance. As a rule of thumb - the larger the teamworking on a project the more valuable the software is to the business.Business commitmentIf there is no basic desire from the business to improve the software any attemptsfrom the technical ranks to make a change will always be under threat. It is vital toget the development teamand business stakeholders to agree and maintain a commonvision. Without a shared objective it is all too easy for the project to stumble towardsa premature end.In SummaryTo improve large legacy software your task is to restore the software to meet thequality expectations of the business. To do this well you need to communicateeffectively, in business terms and using objective measures, about the current statusand the overall goals. All you need is some valuable software, business commitment,and the desire to make a difference!Try this: Give your improvement program a name!Software perfection is never a business goal. However, creating softwarethat is easy to adapt and cheap to maintain most certainly is. Knowingthis, companies often undertake projects to improve large legacy software.Some typical titles include Quality Improvement Program, XXX TaskForce, or sustaining projects, but they all share a common theme: a specificproject to turn around the quality of a product.The best names are more inspirational than that. Try to dig deep and finda common banner under which to fight from.Chapter 2: Is bankruptcy anoption?It is easier to write a new code than to understand an old one - Johnvon Neumann to Marston Morse, 1952 If you have worked on a legacy system for any length of time you will probably havehad the following thought on more one occasion:Wouldnt it just be better to throw this out and start again? We havemore knowledge now, and can re-implement this faster with moderntechnologyThere are many reasons that can force you to consider a rewrite. You might wantto resolve a technical limitation of the current system. Maybe quality issues cause aloss of reputation with customers and reduce development progress to a snails pace.Whatever the reason, the lure of the fresh start is a powerful temptation. But a freshstart is a risky undertaking. Should you take the opportunity to shed the burden ofthe current system and plunge into greenfield development at full pace? Or shouldyou dig in your heels and improve the current system?Rewrite or improve?There are cases where a rewrite is the correct approach and there are other caseswhere incremental improvement is justified. Both approaches pose significant risksso you need to analyze the options carefully.There are five major dimensions that need to be considered before making a decision:This quote appears at the head of chapter 18 of Turings Cathedral by George Dyson.Chapter 2: Is bankruptcy an option? 13 Time: How much time do you have? Size: Is your project too big to fail? Money: Do you have a business case for re-implementing existing code? Skill: Can you do a better job the second time around? Risk: Can you mitigate the risks of a rewrite?Time: How much time do you have?In software, so much of our history can be traced back to Melvin E. Conway. In1968 he wrote what became a classic paper in our cannon, How Do CommitteesInvent? This was to be the first exploration of how organizational structure affectsthe technical outcomes of projects.The most quoted line of the paper is in its conclusion:organizations which design systems are constrained to producedesigns which are copies of the communication structures of theseorganizations.This came to be known as Conways Law. Nearly half a century later Conwaysobservation has lost none of its validity.I dont want to start exploring organizational structures here, however, there is an-other illuminating but lesser known quote from the paper that is worth highlighting:This point of view has produced the observation that theres neverenough time to do something right, but theres always enough timeto do it over [emphasis mine].I call this Conways Second Law.Dr. Conway was talking about how systematic top-down design processes breakdown in the face of the uncertainty of discovering a software design. He went on toexplain that this breakdown causes us to abandon our creations with predictableregularity.Chapter 2: Is bankruptcy an option? 14But how often do we get the opportunity to do our software over these days? Is itreally common to throw away our projects and start again? How much time do wespend re-implementing systems compared to extending the systems we have?I have worked on both greenfield rewrites and legacy improvement, but I think itis much rarer these days to start our projects over. In my experience most softwareinvestment is on existing systems.Howmuch time would it take to do the project again?Can you estimate how many man years have been invested on yourcurrent project? How does this differ from the investment requirements ofa rewrite? It could be that much of the existing features of the software areno longer relevant and a simpler solution could be cheaper to build andmaintain. On the other hand, maybe the rising engineering costs wouldmake a rewrite much more expensive than the first time around.Size: how big is your project?Another interesting question raised by Conways second law is this: what haschanged since the 1960s if we no longer have time to do it over?One of the key changes in software projects since the 60s is that they have becomebigger. Even though we work in higher level languages we write more code than everbefore.Two important changes in the way we do software development have enabled this.Firstly, we have learned to leverage Conways (first) law to create organizationscapable of producing software at scale. In the 60s software was still very much in itsinfancy, and the only approach was to borrow the project management techniquesfrom other engineering disciplines like architecture and civil engineering. However,there is now a large body of knowledge about how to manage large software projectsand how to use the org-tree to influence team communication structures. This trendhas been amplified in recent years due to the agile software movement which hasput emphasis on incremental delivery and early integration.Secondly, we have developed better technologies. We have moved to higher-levellanguages that eliminate many common defect types, such as memory errors,Chapter 2: Is bankruptcy an option? 15that slow down development pace. We are also utilizing higher-level libraries andleveraging more components from third parties. And, most importantly, we havereduced the code-compile-test loop from days down to minutes.Another key technology change is that hardware and operating systems are muchmore stable. Programs written 15 years ago for Unix or Windows still run withoutany problems today, delivering return on investment for a longer period. Since thesesystems can stay in production for longer they accumulate more effort year-on-yearand become harder to replace.As software systems grow investment in them becomes too significant to write off.A potential version 2.0 is such a huge undertaking that a business will only pursue itif the project is in deep technological crisis...Too big to fail?The events which led to the financial crisis of 2008 offer several parallels with theprecursors that produce a typical legacy software project.First there is period of huge growth and success. The profit opportunities lead to agold rush where the only sensible business decision is to surge ahead at full pace.Voices calling for restraint, however sensible, remain unheard during this period.At the same time there is massive underlying risk that is invisible. Our analogousfinancial crisis had risk hidden in repackaged debt. In legacy software the risk ishidden in technical debt.And when the software is so successful that it becomes a core part of business itbecomes, like large financial institutions, too big to fail.The too big to fail theory asserts that certain financial institutionsare so large and so interconnected that their failure would bedisastrous to the economy. Therefore, they must be supported bygovernment when faced with difficulty http://en.wikipedia.org/w/index.php?title=Too_big_to_fail&oldid=623803778Regardless of quality, truly successful large software projects can never be rewrittenChapter 2: Is bankruptcy an option? 16from scratch: the revenue streams they provide are the lifeblood of a company. Theeffort required to rewrite a large project is so great it can fend off competing rewriteprojects.Money: what is the business case?It is illustrative to explore the evidence for and against the too big to fail contention.Lets begin with the examples that support the counterargument. There are many ex-amples of fantastic open source software projects that have been initiated specificallyas replacements to existing systems.Linux, probably the most successful open source project in history, is cited as arewrite of the Minix operating system. Apache, the software serving the majorityof webpages on the internet, was itself a rewrite of NCSA httpd. Libgit2, the corelibrary that drives github and many other git based software system, was completelyrewritten.So why does it work in this context?In the world of open source software most projects are labours of love. Developersare scratching their own itch without the time-to-market or financial imperativesthat typically constrain software development in the commercial setting. In fact, thisis one of the key attractions for developers - the pursuit of software without thebusiness obligations.However, the dynamics that work in the open source community dont often translatewell to a commercial setting. Business people know how expensive it is to producecode. They look at a room full of engineers and immediately perform the calculation:burn-rate = headcount * fully loaded engineer costSo, when the engineering team suggest a rewrite a business person looks nervouslyat burn-rate multiplied over the duration of a rewrite project. For a small project withhigh maintenance costs it might be financially sensible to rewrite because the outlayhttp://en.wikipedia.org/wiki/Rewrite_(programming)#Famous_exampleshttp://httpd.apache.org/ABOUT_APACHE.htmlhttps://github.com/blog/752-libgit2-a-git-linkable-libraryChapter 2: Is bankruptcy an option? 17would be small and the return would be immediate. But, for large projects, theywould conclude that even if the maintenance costs were likely to be significantlylower (which is never a guarantee) and the project was scheduled to come in onbudget (highly unlikely) the costs of the outlay would never be worth the risk of anegative return on investment.Indeed, their conservatism is well grounded. In some cases a version 2.0 rewrite hasproven to be commercial suicide. It was an attempt at a rewrite of the NetscapesNavigator web browser that doomed the company to bankruptcy.Skill: how can you do a better job the second timearound?If the team has lived with a system for a long period it will be well versed in thelimitations of its design. Perhaps making simple user interface changes will requireseveral other changes cascading down to the database access layer, or, maybe addinga new datatype will require changes to the build system. Sometimes systems havecomplex interactions that makes changes error prone or hard to test.These design limitations manifest themselves in the everyday friction of performingchanges to the codebase. Developers are acutely aware of this pain and, thoughregrettable, its very valuable because this knowledge can be mined to help providea technical direction.The danger?This understanding leads us to have too much faith in our own abilities second timearound. After all, we know so much more now than we did then. And there are somany ways to improve this design! We could use xml code generation, or templatemetaprogramming, or no-sql databases! What are we waiting for?The temptation of a second chance brings with it this peril: the second systems effect.This second is the most dangerous system a man ever designsTheresult, as Ovid says, is a big pile. http://www.joelonsoftware.com/articles/fog0000000069.htmlBrooks, The Second Systems EffectChapter 2: Is bankruptcy an option? 18Fred Brooks saw this first hand in the OS/360 project at IBM, and its effects havebeen observed in many projects since. The main risk in trying to address every flawin the current system, to pursue one uber-software that will rule for eternity, is thecreation of an overly complex design which is hard to estimate and implement.The end result is long delays in shipping software to real customers.Risk: how is this software supposed to work?Even if there is a good business case for a rewrite the technical risks cannot beignored. One of the most difficult issues facing a rewrite project is defining howand why the current software works the way it does. With the original team alreadygone is there anyone in the project familiar with all the quirks and bug fixes that arelong forgotten?As Joel Spolsky says:When you throw away code and start from scratch, you are throwingaway all that knowledge. All those collected bug fixes. Years of program-ming work. And the older the system is, the tougher it becomes. Even if we can define how thecurrent system works the why is still missing. So even a prefect re-implementationwill have mysteries carried over into the new system. And these mysteries will adda cognitive burden to the project as it evolves.EvaluationLike most decisions in software development, the decision to rewrite an existingproject is a multi-dimensional trade-off. For most large projects a rewrite is anextremely risky proposition and most likely a financial disaster. That being said,there are a few contexts where a rewrite might make sense:Things you should never do, Part 1, http://www.joelonsoftware.com/articles/fog0000000069.htmlChapter 2: Is bankruptcy an option? 19 Platform obsolescence: A rewrite might be the only option if a hardwareplatform, programming language or operating system has become obsolete.This is a likely risk for embedded systems and other ecosystems where toolingvendors dont typically have a long shelf life. Missing source code: If you no longer have the source code required to buildthe system and you want to make changes, a rewrite may be your only choice. As a learning exercise: if the time spent on a rewrite needs no financialjustification you can learn a lot by rewriting software. Re-implementing asystem you know well using a new language or technology can be veryinstructive.Rewrite AND improve?Choosing one of these options does not necessarily eliminate the other. You can doboth.For example, you might want to rewrite a troubled subcomponent of a system as partof a larger improvement program. See chapters 7 & 8 for more techniques about howto do this.In SummaryRe-writing a software system has considerable attractions but there are very real andworrying risks associated with that course. For a rewrite to be worth it: Time: you really have enough time to do it over Size: your project is small Money: you can afford to re-implement existing features Skill: you can mitigate the second systems effect Risk: you can mitigate the knowledge lossMost large legacy projects cannot say this. That leaves improving the current systemas the only option available.


Recommended