Posts Tagged ‘software’

Improving Coding Standards? Start with Customer-Reported Defects

February 15th, 2011 by AccuRev

Agile teams have a focus of interest- to continuously improve product quality.  In pursuit of this end result, teams often develop and agree upon engineering process changes. And when assessing potential process changes, stricter coding standards usually make the cut. Development teams are asked to abide by a certain set of guidelines in the code they generate, refactor, or maintain.  In practice, sometimes these guidelines end up improving product quality as desired, but sometimes these guidelines have no affect on quality at all. Or worse, sometimes these guidelines add only non-beneficial incremental overhead to the development process.

While most software engineers would agree that coding standards make sense in a group programming environment, the success or failure of these standards is a function of which standards are adopted.  While popular coding standards of the day or team members previous work experiences guide this decision making process, another alternative is for customer-reported defects to guide the process.  When a root cause analysis is performed on the customer defects incurred by a software development team over time, a few prominent causes are bound to occur again and again. These causes can usually be avoided through process changes, and in particular, through coding standard changes.

Customer-Reported Defects

Looking internally at our customer-reported defects over time, we certainly discovered some recurring technical themes.  For example, there were many defects that were associated with the programmer selecting recursion over iteration in cases where the problem depth was potentially unbounded.  The result was a sleeping time-bomb for stack overflow.

Another example, there were many performance-related defects involving the selection of an inappropriate container abstraction, given the expected data access patterns and performance requirements of the problem at hand.  (Your mileage may vary, but you get the idea.)  If the same group of people is evolving a code base over time, it is likely that over time, similar mistakes will be.

Agile software development puts the accountability for product quality squarely on the shoulders of the team.  Accordingly, self-managed software teams should be continuously evaluating possible improvements to the team’s behaviors, and coding standards is a great place to start.  If you want to avoid the pitfalls of choosing the wrong standards, take a closer look at your customer-reported defects.

A New Mindset and New Toolsets are Needed to Speed Agile Adoption

February 7th, 2011 by AccuRev

In a previous post we examined an “Agile pain points” survey that highlighted some of the top obstacles organizations are facing when trying to adopt Agile practices.  Now that these obstacles have been identified, you might be asking – as we did – where do we go from here?

The Importance of Agile Tools

We think these findings reinforce the need for ALM tools to support Agile implementation, accelerate adoption and build a foundation to scale Agile.  Developers need integrated, yet flexible and customizable toolsets encompassing Software Configuration Management, Build and Release Management and Agile Lifecycle Management.

In addition to Agile tools, development organizations also need to adopt new approaches to support Agile adoption.Agile Roadmap

In addition to Agile tools, development organizations also need to adopt new approaches to support Agile. Here is a roadmap for organizations as they head down the Agile path:

- Take a fresh approach to capturing requirements. The first thing you should consider is that the focus of requirements in an Agile world shifts from developing a detailed specification, to collecting user stories.  Having a development process and the necessary tools to support gathering, tracking and managing of user stories is crucial when going Agile.

- Invest in test. Even when not practicing explicit test-driven development, the importance of testing – unit test, regression, and system-wide testing – is considerable throughout the Agile development process no matter what method is being used.

- Release early and often. Organizations should look for planning tools that track when user stories are done and ready for customer feedback, source code tools that show where user stories are in the development process, and build and release tools that create releases continuously.

- Build In-house expertise from the outside in. Organizations should work with vendors that have a full suite of training and coaching offerings, in particular seeking those vendors that go beyond generic Agile training and instead examine the organization’s existing processes and goals and customize training for their specific needs.

- Incorporate release aspects in early Agile plans. Building in real-world items like testing and deployment will allow issues to surface early, before they become entrenched in the code base and difficult to address.

- Recognize that scaling Agile reveals dependencies between projects and teams. Having the ability to track both Agile and traditional projects in the same tool interface can prove critical to ensure a smooth scaling out process.

- Don’t forget about requirements when going “all in” with Agile. Lastly, organizations should be sure tools and processes clearly show team members all key aspects of requirements and are flexible and powerful enough to keep pace with the dynamic nature of a fully realized Agile environment.

We’d like to hear what you think – what steps have you and your organization taken to support Agile adoption?  What have are some other steps organizations should consider?

For details on AccuRev’s findings and more on these recommendations, check out the full Agile Adoption Pain Points Survey report, available free for download at http://www.accurev.com/whitepaper/agile-pain-points-survey.

Agile Teams Move Quickly… Make Sure Your User Stories Can Too!

January 27th, 2011 by Bob DeMaria

It occurred to me recently how much emphasis is put on the need for an Agile Project Management tool as you begin to adopt and expand the use of Agile in your development environment.  While many, including myself, would argue that using post-it notes and physical story boards are the best ways to start and Agile pilot team (since I believe it instills good habits, like circling the team around a common goal) there is certainly a place for Agile Project Management as you begin to expand Agile within a larger organization.  Agile Project Management provides visibility across the development lifecycle and into teams spanning multiple time zones, allowing for a big picture view of the project.

User Stories are the Key

Driving development through the use of User Stories is often considered a determining characteristic of whether a shop is considered Agile or not.  And while I won’t go into the details here, it is important to have a ‘place’ to manage those user stories in a backlog.   It’s also important to be able to see and report which iteration the user story is assigned to, and the current status of a particular story.  Has it been scheduled for an iteration?  Have we started development on it?  Who’s working on it? Etc…

Understanding the state and status of user stories that are in development is crucial to accurately reporting the current state of an iteration as a whole.  If you are going to use burndown charts to know how many hours of work are left for an iteration, or a burnup chart to determine how many points are left to be accepted for an iteration, you are going to need accurate information.  Accurate data comes from updating user stories and tasks on a timely basis so you always have the freshest information.

How Accurate is Your Information?

One aspect of user stories that is often overlooked is the linkage between the user stories within an active iteration and the location of the actual code changes for those particular stories.  If you only have an accurate view of the stories from a development standpoint, but you have no idea where the code for that story is, then all of the information in your project management tool contains incomplete data.

Under more traditional development methodologies, the time to ‘check’ the linkage between closed issues and code that was changed in order to complete said closed issues happens on an infrequent basis.  Checking the linkage usually occurs toward the end of a long development cycle, when teams are getting close to a release point.  If we are executing on a 6 month release cycle, it probably won’t occur until 4 months in.

Identifying the status and locating the code for user stories happens weekly on an Agile team, regardless of the iteration length.  This requires you to have quick access to accurate information to track those stories from a development perspective.

Accurate Information… Quickly

In many traditional SCM systems, developers must manually indicate the linkage between the code and the story it is associated with as the code is checked in. At the end of the iteration, teams must determine what stories are fully completed and what stories are only partially done, and need to be retargeted to the next sprint.

Traceability and visibility into each story is necessary to see where code changes are located. The ability to easily associate code modifications with a user story will eliminate error prone manual linkage problems. In AccuRev, this information is stored in a Change Package, or a deep linkage between the user story that is related to project management and code. Change Packages can be tracked through the development cycle.  This gives developers visibility into the status of an individual user story without additional overhead, while providing traceability to Scrum Masters and Product Owners into the status of an iteration with increased accuracy.