Monday, January 27, 2014

software development efficiency metrics



Most large companies invest heavily in application development, and they do so for a compelling reason: their future might depend on it. Software spending in the United States jumped from 32 percent of total IT corporate investment in 1990 to almost 60 percent in 2011 as software gradually became critical for almost every company’s performance. Yet in our experience, few organizations have a viable means of measuring the output of their application-development projects. Instead, they rely on input-based metrics, such as the hourly cost of developers, variance to budget, or percent of delivery dates achieved. Although these metrics are useful because they indicate the level of effort that goes into application development, these metrics do not truly answer the question: how much software functionality did a team deliver in a given time period? Or, put another way, how productive was the application-development group?

Applications have been developed over decades during which time personnel have changed, coding practices have changed, numerous fixes and patches have been applied, documentation standards have fluctuated and systems have become more complex.  As a result developers often find themselves poking around in the dark when it comes to maintaining systems; error searches can be quite elaborate even for the smallest of mistakes and it can take days or even weeks to understand the impact of code changes on related applications.  And a lack of, or inadequate analysis tools means cost-estimates for change requests have become a matter of 'gut instinct'.

There are technical reasons that organizations can address and with comparatively little investment could make a significant improvement to the efficiency of their development team.

Some tips to help you to improve the efficiency of your software development team:

Optimization : Optimize your application development; it is not necessary to embark on complex migration and transformation projects.
Software development augmentation : Make great business decisions about which change requests to implement: prove that the change links to a valued business outcome.
Code Quality: Improve code quality.  Purchase plugins that enable you to integrate your development standards into your development environment thus ensuring that the quality of your software improves bit by bit.  Quality plugins will also enable you to compare your program with market standards such as the maintenance index. This a continuous process
Code performance:  Improve the speed of application understanding.  Purchase plugins for the development environment which cover every conceivable aspect of code analysis, including impact analysis.  This will ensure that developers can analyze the sources of other team members very quickly from within their usual work environment, grasp dependencies and understand the data stream.  Ensure that the plugins also provide a database-based repository and symbol tables to serve as a foundation for executing code changes at the field level.
Reduce number of systems in Enterprise:  Integrate across software development tools with tools such as that from IBM Rational.
Build efficiency  measures: Establish a cycle of assessment, improvement and quality control to ensure that the team's efficiency does not regress.  Use reporting and dashboards as instruments of change to inspire learning and continuous improvement.

Let’s discuss the most easy way to start developing matrices for software development efficiency

Use cases : In addition to lacking a viable methodology for measuring productivity, organizations often don’t have a robust way to gather and organize functional and technical requirements for application-development projects. Instead, they list requirements in what often amounts to little more than a loosely structured laundry list. Organizations may have used this laundry-list approach over a long period of time, and it thus may be deeply entrenched.

As a result, these organizations find it difficult to fully and accurately capture requirements and align them with the needs of their internal or external business clients. Their application-development projects tend to suffer the inefficiencies of shifting priorities, last-minute change requests, and dissatisfied business users. In our experience, these changes often amount to cost overruns of 30 to 100 percent.

We believe use cases provide a logical and structured way to organize the functional requirements of an application-development project. Each use case is a description of a scenario under which the user of an application interacts with that application. For example, a UC for an online-banking application might describe each of the steps that a bank customer follows to log into her account and check the balance of available funds, as well as the transactions involved when that application calls on a database to pull up the stored information.

Another use case for that same application might involve the customer transferring funds from her checking to savings account. More specifically, UCs describe “actors”—the human users or systems that interact with the application in question. UCs also describe “transactions,” or how the application interacts with actors and performs a function. Related UCs can be logically organized into sections and chapters with a table of contents so that  developers and their business clients can understand the overall structure of the application.

By focusing first on business objectives and the functional requirements of applications rather than on the technical requirements, both business leaders and application developers find UCs easy to understand. Technical requirements and design choices can then be organized around UCs. This structure expedites the requirements-gathering phase of the software-development life cycle. It also lowers the risk of failing to incorporate the functionality required by the business and thereby reduces the amount of costly change requests and rework during the subsequent design and build phases. UCs also make it easier to write functional test cases—and thus expedite the testing process on the back end of development.

Use-case points :  Use-case points, as the name implies, are derived from the information captured in use cases. UCP calculations represent a count of the number of transactions performed by an application and the number of actors that interact with the application in question. These raw counts are then adjusted for the technical complexity of the application and the percentage of the code being modified. These are similar to function point in some way.

The members of one application-development group recently calculated the UCPs for 12 of their completed projects. The leader of that group, who was intimately familiar with the 12 projects, also independently gave each project a relative score representative of the software functionality delivered. The high correlation between the UCP calculations and the leader’s scores (greater than 80 percent) suggests that UCPs are highly reliable in measuring  output and can be used to accurately and equitably measure productivity across teams (exhibit). Based on our experience, productivity across  application-development teams can differ by more than 50 percent and often by as much as 100 percent. UCPs accurately measure software functionality to within 10 to 15 percent. Consequently, the accuracy of UCPs is more than sufficient to help determine the productivity of teams.  Moreover, UCPs do not take a lot of training to calculate, and the calculations can be completed in less than a day even for large projects. UCPs can be calculated early in a project’s life cycle and then refined as more requirements are specified and more of the design work is completed. As a result, they are useful for project planning, in-flight performance management, and retrospective performance evaluation.

In general, UCPs are applicable to waterfall4 development and can be used by teams following agile5 methodologies as long as the agile teams use UCs to gather requirements. UCPs, because they are simple to calculate, can also be easily rolled out across an organization.

The transformation challenge : Organizations that have successfully adopted use cases and use-case points have usually started with a pilot that may involve several teams and a portfolio of new projects on which to test the new approach. The organization will need to design the processes and tools to make use cases and use-case points operational. For example, the organization will need to address such questions as what template or tool the team should use for capturing UCs and calculating UCPs, how the organization will ensure that everyone is following the standard process, and how the metrics will be displayed and discussed.

Once the new design is complete, the pilot teams will train with the new processes and tools. Pilot teams can use previously completed projects to practice creating UCs and calculating UCPs. From there, the organization runs a pilot on actual projects to refine the processes and tools while addressing any gaps in the design. After completion of the pilot, organizations usually roll out UCs and UCPs more broadly in waves across the organization.

Throughout this process, it is critical to communicate a compelling change story. For example, the pilot team will need to explain the benefits of use cases to the business units, which naturally will be sensitive to any changes in the way requirements are gathered. Perhaps more important, there will likely be some resistance from within the development teams, whose members may not enjoy having their productivity measured.

What is critical for the ultimate acceptance of UCPs is how the leadership uses them. Developers will understand the rationale for using metrics to identify projects that are at risk of going off track. They will also understand the benefits of more accurately determining resources and timelines for projects, without over or under scoping functional requirements. There is little that is more frustrating to application-development teams than pulling all-nighters to deliver what the business doesn’t want or doesn’t need, and then having to redo much of their hard work. If, however, UCPs are used merely  as a means of rewarding or penalizing application developers, there is a much higher probability that there will be serious resistance.

The journey toward integrating a more efficient and effective way of gathering application-development requirements with a reliable output metric is not without its difficulties. However, the rewards are well worth the effort in a world where application development is an important key to success for almost any large enterprise.

Ravindra Pande is an certified estimator & Agile coach for various institutions & organizations. He implement Agile methodology , service augmentation for software development process, implementation of specific matrices for a given enterprise is his forte. Can be contacted at ravindrapande@gmail.com or skype RavindraRPande

No comments:

Post a Comment