Software Maintenance Implications on Cost and Schedule

Abstract The dictionary defines maintenance as, “The work of keeping something in proper order.” However, this definition does not necessarily fit for software. Software maintenance is different from hardware maintenance because software doesn’t physically wear out, but often gets less useful with age. Software is typically delivered with undiscovered flaws. Therefore, software maintenance is: “The process of modifying existing operational software while leaving its primary functions intact.” Maintenance typically exceeds fifty percent of the systems’ life cycle cost . While software maintenance can be treated as a level of effort activity, there are consequences on quality, functionality, reliability, cost and schedule that can be mitigated through the use of parametric estimation techniques.1. INTRODUCTION One of the greatest challenges facing software engineers is the management of change control. It has been estimated that the cost of change control can be between 40% and 70% of the life cycle costs . Software engineers have hoped that new languages and new process would greatly reduce these numbers; however this has not been the case. Fundamentally this is because software is still delivered with a significant number of defects. Capers Jones estimates that there are about 5 bugs per Function Point created during Development . Watts Humphrey found “… even experienced software engineers normally inject 100 or more defects per KSLOC . Capers Jones says, “A series of studies the defect density of software ranges from 49.5 to 94.5 errors per thousand lines of code .” The purpose of this article is to first review the fundamentals of software maintenance and to present alternative approaches to estimating software maintenance. A key element to note is that development and management decisions made during the development process can significantly affect the developmental cost and the resulting maintenance costs.2. SOFTWARE MAINTENANCE Maintenance activities include all work carried out post-delivery and should be distinguished from block modifications which represent significant design and development effort and supersede a previously released software package. These maintenance activities can be quite diverse, and it helps to identify exactly what post-delivery activities are to be included in an estimate of maintenance effort. Maintenance activities, once defined, may be evaluated in a quite different light than when called simply “maintenance”. Software maintenance is different from hardware maintenance because software doesn’t physically wear out, but software often gets less useful with age and it may be delivered with undiscovered flaws. In addition to the undiscovered flaws, it is common that some number of known defects pass from the development organization to the maintenance group. Accurate estimation of the effort required to maintain delivered software is aided by the decomposition of the overall effort into the various activities that make up the whole process.3. APPROACHING THE MAINTENANCE ISSUE Maintenance is a complicated and structured process. In his textbook, Estimating Software Intensive Systems, Richard Stuzke outlines the typical software maintenance process. It is apparent that the process is more than just writing new code.The following checklist can be used to explore the realism and accuracy of maintenance requirements.o Which pieces of software will be maintained?o How long will the system need to be maintained?o Are you estimating the entire maintenance problem, or just incremental maintenance?o What level of maintenance is required?o Is that which is being called maintenance in fact a new development project?o Who will do the maintenance? Will it be done organically by the original developer? Will there be a separate team? Will there be a separate organization?o Will maintainers be using the same tools used during development? Are any proprietary tools required for maintenance?o How much Commercial-Off-The-Shelf (COTS) is there? How tightly coupled are the interfaces?o Some follow-on development may be disguised as maintenance. This will either inflate maintenance figures, or else cause shortfalls if basic maintenance gets pushed aside. These questions will help you ask whether maintenance is being honestly represented.o Is the activity really an incremental improvement?o Are healthy chunks of the original code being rewritten or changed?o Will additional staff be brought in to perform the upgrade?o Is the maintenance effort schedule regular and fairly flat, or does it contain staffing humps that look like new development?4. SANITY CHECKS Although sanity checks should be sought on a year-by-year basis, they should not be attempted for overall development. The reason for this is that maintenance activities can be carried on indefinitely, rendering any life-cycle rules useless. As an example, consider Grady (p. 17):We spend about 2 to 3 times as much effort maintaining and enhancing software as we spend creating new software.This and similar observations apply at an organizational level and higher, but not for a specific project. Any development group with a history will be embroiled in the long tail ends of their many delivered projects, still needing indefinite attention. Here are a few quick sanity checks:o One maintainer can handle about 10,000 lines per year.o Overall life-cycle effort is typically 40% development and 60% maintenance.o Maintenance costs on average are one-sixth of yearly development costs.o Successful systems are usually maintained for 10 to 20 years.Finally, as in development, the amount of code that is new versus modified makes a difference. The effective size, that is, the equivalent effort if all the work were new code, is still the key input for both development and maintenance cost estimation.5. FIVE ALTERNATIVE APPROACHES All software estimation techniques must be able to model the theory and the likely real world result. The real world scenario is that over time, the overlay of changes upon changes makes software increasingly difficult to maintain and thus less useful. Maintenance effort estimation techniques range from the simplistic level of effort method, through more thoughtful analysis and development practice modifications, to the use of parametric models in order to use historical data to project future needs.5.1 Level of Effort As is sometimes the case in the development environment, software maintenance can be modeled as a level of effort activity. Given the repair category activities and the great variance that they show, this approach clearly has deficiencies. In this approach, a level of effort to maintain software is based on size and type.5.2 Level of Effort Plus Stuzke proposed that software maintenance starts with basic level of effort (minimum people needed to have a core competency and then that that basic core staff must be modified by assessing three additional factors; configuration management, quality assurance, and project management. His process addressed some of the additional factors affecting software maintenance.5.3 Maintenance Change Factor Software Cost Estimation with COCOMO II (Boehm 2000) proposes a deceivingly simple, but also quite useful methodology for determining annual maintenance. Maintenance is one of the menu selections in the menu bar. In COCOMO II Maintenance encompasses the process of modifying existing operational software while leaving its primary functions intact. This process excludes:o Major re-design and re-development (more than 50% new code) of a new software product performing substantially the same functions.o Design and development of a sizeable (more than 20% of the source instructions comprising the existing product) interfacing software package which requires relatively little redesigning of the existing product.o Data processing system operations, data entry, and modification of values in the database.The maintenance calculations are heavily based upon the Maintenance Change Factor (MCF) and the Maintenance Adjustment Factor (MAF). The MCF is similar to the Annual change Traffic in COCOMO81, except that maintenance periods other than a year can be used. The resulting maintenance effort estimation formula is the same as the COCOMO II Post Architecture development model.As stated previously, three cost drivers for maintenance differ from development. Those cost drivers are software reliability, modern programming practices, and schedule. COCOMO II assumes that increased investment in software reliability and use of modern programming practices during software development has a strong positive effect upon the maintenance stage.Annual Maintenance Effort = (Annual Change Traffic) * (Original Software Development Effort)The quantity Original Software Development Effort refers to the total effort (person-months or other unit of measure) expended throughout development, even if a multi-year project.The multiplier Annual Change Traffic is the proportion of the overall software to be modified during the year. This is relatively easy to obtain from engineering estimates. Developers often maintain change lists, or have a sense of proportional change to be required even before development is complete.5.4 Managing Software Maintenance Costs by Developmental Techniques and Management Decisions During DevelopmentWhen it comes to maintenance, “a penny spent is a pound saved.” Better development practices (even if more expensive) can significantly reduce maintenance effort, and reduce overall life cycle cost. The more effort put into development, the less required in maintenance. As an example, the software development cost and schedule can be significantly impacted (reduced) by letting the number of defects delivered grow. This cost and schedule reduction is more than offset by the increase in maintenance cost. The following discussion is an example of how management decision can significantly affect/reduce software maintenance costs.Lloyd Huff and George Novak of Lockheed Martin Aeronautics in their paper “Lockheed Martin Aeronautics Performance Based Software Sustainment for the F-35 Lightning II” propose a series of development and management decision designed to impact and reduce software maintenance costs. They propose an eight step process to estimate and control software maintenance . Their proposed steps are:1. Strive for Commonality2. Apply Industrial Engineering Practices to Software3. Engage4. Adopt a Holistic Approach to Sustainment5. Develop Highly Maintainable Systems and Software6. Manage the Off-the-Shelf Software7. Plan for the Unexpected8. Analyze and Refine the Software Sustainment Business Case (use Parametric software sustainment cost estimates)5.5 A Parametric Assessment of Software MaintenanceParametric models like SEER for Software allow maintenance to be modeled in either of two ways:Estimating maintenance as a part of the total lifecycle cost. Choosing the appropriate Maintenance category parameters will include an estimate of maintenance effort with the development estimate for the individual software program. Several reports and charts show breakdowns of development vs. maintenance effort. This method is best used to evaluate life cycle costs for each individual software program.Estimating maintenance as a separate activity. Using the appropriate maintenance parameters for the software to be maintained you can model the maintenance effort as a separate activity. This method will allow you to fine tune your maintenance estimate by adjusting parameters. Maintenance size should be the same as development size, but should be entered as all pre-existing code. This method can also be useful in breaking out total project maintenance costs from project development costs.A good parametric estimate for maintenance includes a wide range of information. Critical information for completing a software maintenance estimate is the size or amount of software that will be maintained, the quality of that software, the quality and availability of the documentation, and the type or amount of maintenance that will be done. Many organizations don’t actually estimate maintenance costs; they simply have a budget for software maintenance. In this case, a parametric model should be used to compute how much maintenance can actually be performed with the given budget.Estimating and planning for maintenance are critical activities if the software is required to function properly throughout its expected life. Even with a limited budget, a plan can be made to use the resources available in the most efficient, productive manner. Looking at the diagram above, you can see that not only are the multiple inputs that impact the maintenance, but there are several key outputs that provide the information necessary to plan a successful maintenance effort.6. Conclusion The conclusions of this article are:o Software maintenance can be modeled using a simplistic method like Level of Effort Staffing, but this technique has significant drawbacks.o Software maintenance costs can be significantly affected by management decisions during the developmental process.o Software maintenance can be accurately estimated using parametric processes.o Software maintenance is best modeled when development and management decisions are coupled with parametric cost estimation techniques.REFERENCES [1] Software Maintenance Concepts and Practices (second Edition) by Penny Grubb and Armstrong Takang, World Scientific, 2005.[2] Estimating Software Intensive Systems; Richard Stuzke, 2005, Addison-Wesley.[3] Lloyd Huff, George Novak; Lockheed Martin Aeronautics; Lockheed Martin Aeronautics Performance Based Software Sustainment for the F-35 Lightning II.[4] G. Edward Bryan, “CP-6: Quality and Productivity Measures in the 15-Year Life Cycle of an Operating System,” Software Quality Journal 2, 129-144, June 1993.[5] Software Sizing, Estimation, and Risk Management; Daniel D. Galorath, Michael W. Evans, 2006, Auerbach Publications.

How To Pay Off Your Mortgage In 5 Years

My wife and I were “home buyers” for at least 7 years on our current residence. Notice that I said home “buyers,” and not home “owners.” There is a common misconception that when you take out a mortgage, you are immediately a home “owner”

Assuming that you have a 30 year mortgage, the reality is that you are simply in the process of buying the home over a 30 year period. The bank, is the true owner of the property. If you don’t believe me, try missing a few mortgage payments, and see what happens.

3 months ago, we paid off our 30 year mortgage (in 7 years, or 23 years early). Now we are true home “owners.” In this article, I’m going to show you step by step how we were able to accomplish this. Using our existing income, and without incurring any additional debt.

Equity

Let’s talk about “Equity.” Equity, or appreciation, is the difference between what your home is worth and what you owe to the bank. So if you owe $100,000 and your house is worth $300,000, then you have $200,000 of Equity in your home.

We had roughly $250,000 of Equity on our house. We owed the bank $115,000 and our house was worth $367,000.

This $250,000 is dormant. Meaning, it looks good, but it wasn’t doing anything for us.

Home-Equity Line of Credit (HELOC)

So the first thing that we did was we ‘tapped’ into this equity. We went to the bank and took out an Home Equity Line of Credit for $50,000.

What is an equity line of credit? Also called a HELOC, an home equity line of credit is a liquid line that you are able to draw funds from at any time for any purpose. It’s like a gigantic credit card.

Although the HELOC had a limit for $50,000, the amount that we owed on it was $0 at the time that we took it out. This is because, similar to a credit card, you don’t owe anything until you actually use it.

Use HELOC to Pay Down Mortgage

Immediately after we got the HELOC, we withdrew $20,000 and applied it to our Mortgage (additional principal payment).

So at this point, we have $20,000 due on the HELOC, but our mortgage has been paid down by $20,000 (from $115,000 to $95,000).

Use HELOC as “new” Checking Account

Before I go on, let me mention that after we used the $20,000 to pay down our mortgage, we still had the same $115,000 of debt ($20,000 on HELOC and $95,000 on Mortgage).

So to payoff the HELOC, we just used it as our new checking account. When we got paid, we took 100% of our paychecks and applied it to the HELOC.

Now you may be wondering, “with all of our money going to the HELOC, how did we pay our bills?” Remember the HELOC is a “liquid” line. So at the end of each month, we made 1 withdrawal from the HELOC to pay our bills (including our mortgage).

100% of Cash Flow

For us, our monthly paychecks totaled roughly $6,000. Our bills, including our mortgage, and all of our living expenses (gas, groceries, etc.) totaled approximately $3,500. So by applying 100% of our monthly checks to the HELOC, and then using the HELOC to pay our bills, we were able to use 100% of our monthly cash flow to pay the $20,000 HELOC off.

So with and estimated $2,500 of cash flow ($6,000 minus $3,500) the $20,000 was paid off in 8 months.

Repeat The Process

We repeated this process until the remaining $95,000 was paid off (approximately 2 years).

What Do You Need?

1. Cash Flow – You must have positive cash flow in your household budget

2. Credit Score – A decent credit score (650 or above)

3. Equity – Positive equity in your home.

What You Should Know

VERY IMPORTANT: The HELOC should be used to paydown your mortgage. It should not be used to fund a vacation, buy a car, or a boat.

ALSO IMPORTANT: The HELOC is not a Home Equity Loan (HEL). A Home Equity Loan is a 2nd mortgage, and it is treated the same.

Business Advertisement

Business advertisement brings profits in sales. The key goal of such advertising is to convince the potential buyers to purchase manufactured goods and services. There are various avenues through which the customers get information about the true marketable products and services. These are television, radio, newspaper, magazine and recently online advertisement. The truly marketable product brand has now brought forth a novel integrated tactic that proves rewarding. The maintaining and cultivating the strategy by using the right tools at the right moment and in the right place is extremely necessary. The actual aim of the advertisement is to make people aware of products and services accessible under the brand name rather than selling the product.Significance of AdvertisementProduct publishing plays an important role in creating brand awareness among the general public. The potential buyers are persuaded to reach out for the products. In addition, the satisfied buyers make verbal publicity among the neighbors, friends and relatives. This leads to the increase of profits of companies by increasing its revenue. The expenses of advertisement in turn get good height in earnings. The popular modes of publishing goods and services are newspapers, pamphlets, brochures, magazines, journals and books.Advertising in print media is comparatively cheaper than availing through electronic media. By using this, one can cover a wide range of audiences belong to different age groups. For example, if a brand name is advertised on television the brand would get access to every home and offices, and also in other public places. With time, advertising on the internet is getting more popular. The internet is the most workable platform available till date not only in case of an advertisement, but in case of sharing new and creating universal awareness by sending them to every corner of the world.What Advertising Agencies Do?Many of the firms advertise their products to the potential buyers through their own advertising department. But, others depend upon some advertising agencies for promoting their brands and services. Organizations pay to these agencies for promoting their brand name. They are always there for recommending, and making the most of your advertisement costs of promoting your brand name on the right place.Advertising, therefore, is proper promotion of the products, not selling of items. It helps to give proper information about the brand. On the other hand, it facilitates general people know about the products and to buy the advertised brands more consciously. So, advertising is the link between company and their customers. Advertising not only gives the proper awareness of the products but also offers a nice introduction of the company. Attractive advertisements create demand in the public mind that in turn boost sales of the brand.Online AdvertisingOnline publishing of products and services promote the products in the best way as it is not limited by time and space. The different kinds of advertising sites are available for promoting products. We can select them based on our needs. The different kinds of methods available are Pay Per Click, banner ads, text ads, intext adds, link ads, flash ads, slider adds, hovering adds, pop up ads, pop in to add etc. You can take up as per wish. Online advertising is very specific to the audience. The advertisers use keywords or phrases in their online ads that are employed by the potential buyers in order to search for the products and services. More is, the online ads are region specific also. Banner advertising is a popular form of online advertising. Advertiser can advertise their banner by coming to an arrangement with online companies and publish their banner. It is more cost effective than other forms of advertising. There is just one time start up cost of creating a website. There are no associated costs like postage, storage, repeated design fee etc.A study by Google confirms that nearly 30% of internet-users read newspaper and they are likely to go online to research at least one product that they find in a newspaper. Internet advertising when combine with newspaper advertising can help advertisers to reach to targeted audiences. Whatever may be the media, without advertisement, business owners experience a much harder time to orient the business field in their support.