Skip to main content

Make Your Life (and Work) Easier

One way of improving your performance is to identify common tasks, processes, and data. 

Do you find yourself doing the same things over and over again?  Compare yesterday to today.  Were any of the steps, even just a few, the same?

Here’s a simple process for standardizing some of your work products and automating their production.

  1. Identify
    What do you do over and over again? What tasks do you share with your co-workers? What processes are in common across your company or your industry?
  2. Document
    Write down the specific steps for executing this task or draw up a diagram of the process. This is the most important step as often simply putting the task or process in writing illustrates the strengths and weaknesses of a particular approach and puts you on the path to considering alternatives. 
  3. Re-use
    Can you create a template or sample document to re-use? Are you collecting the same types of data every time? Creating a set of standard documents for re-use can go a long way. 
  4. Automate
    Can a script or simple program execute some of the steps outlined? Can parts of the documented tasks be outsourced to a less expensive resource? 
  5. Train and Replicate
    Get in the habit of using the standard process and templates yourself. If the task is common to others then train your colleagues. Give them the standard templates. Multiply the return on investment by helping others follow the improved process.

Authoring Requirements in an Agile World

Equipping and Empowering the Modern BA

The principles of agile development were proven before agile – as a defined approach – became vogue.  Agile principles were being practiced to varying degrees in most organizations as a natural reaction to the issues surrounding a rigid waterfall approach.

Every individual task on a software project carries some degree of risk.  There are many sources of these risks – some third party component may not function as advertised, some module your work is dependent on may not be available on time, inputs to the task were ambiguous and you made an incorrect assumption when ‘filling in the blanks’, the list is endless.  All these risks in the individual tasks contribute to the overall project risk and, quite simply, risk isn’t retired until the task is done.  Putting it another way, the risk associated with building something is really only retired when the thing is built.  That’s the principle behind iterative and incremental development.

So instead of leaving the first unveiling of a new or enhanced application until toward the end of the project, break it down so that pieces (functional pieces) can be built incrementally.   While this doesn’t always mean the portions are complete and shippable, stakeholders can see them working and try them out.  This offers several advantages: it retires risk, as mentioned before.  It often also exposes other hidden risks.  These risks will surface at some point, and the earlier the better.  Exposing hidden risk and retiring risk early makes the estimating process more accurate.  This increases the probability of delivering applications of value that address the business needs in terms of capability as well as budget and schedule needs.

While agile is becoming main stream on small and mid-sized projects, challenges do exist elsewhere such as how to manage this approach on larger projects and in distributed development.   Another challenge for many is how to apply a requirements lifecycle to agile projects.   Many agile principles such as “just enough and no more”, to “begin development before all requirements are complete”, to “test first”, can be counter-intuitive.   Also, what about non-functional requirements?  What about testing independence?  How can we cost something if we don’t know what the requirements are?

This article attempts to describe some ways to handle these challenges.  It is based on an example of real, ongoing, and very successful product development that uses agile with a globally distributed team.  It describes one set of techniques that is known to work.

Process Overview

There are many “flavors” of agile, but at a high level they all essentially adhere to the following basic principles:

PRINCIPLE

DESCRIPTION

Iterative

Both Requirements and Software are developed in small iterations

Evolutionary

Incremental evolution of  requirements and software

Just Enough “requirements details”

Time-Boxed

Fixed duration for requirements and software build Iterations

Customer Driven

We actively engage our customers in feature prioritization

We embrace change to requirements/software as we build them

Adaptive Planning

We expect planning to be wrong

Requirements details as well as macro level scope are expected to change as we progress through our release.

For the purposes of this article, our example uses a Scrum-based Agile process1.  In this approach the iterations (sprints) are two weeks in duration.  A sprint is a complete development cycle where the goal is to have built some demonstrable portion of the end application.  It should be noted that while the initial sprints do involve building a portion of the application, often this is infrastructure-level software that’s needed to support features to be developed in later sprints. This means there may not be much for stakeholders to “see”. 

Each organization needs to determine the sprint duration that’s optimal for them.  It needs to be long enough to actually build something, but not long enough for people to become defocused and go off track (thereby wasting time and effort).  We found two weeks to be optimal for our environment.

Key during the first part of the process is to determine and agree on project scope, also known as the “release backlog”.  Determining the release backlog itself could be a series of sprints where the product owner and other stakeholders iterate through determining relative priority or value of features along with high level costing of these features to arrive at a release backlog.  

At the other end of the project, development of new code doesn’t extend to the last day of the last sprint.  We typically reserve the last few sprints, depending on the magnitude of the release, for stabilization.   In other words, in the last few sprints only bug fixing is done, and no net new features are developed.   This tends to go against the agile purists approach to software development as each sprint should, in theory, develop production ready code.  However, to truly achieve that requires significant testing and build automation that most organizations don’t have in place.  This is always a good goal to strive towards, but don’t expect to achieve this right away.

Requirements Definition in this Process

There are several ways you could perform requirements definition in an agile process, but again our goal is to introduce an example that’s been tried and is known to work.   This example begins with the assumption that you already have a good sense of the “business need”, either inherently in the case of a small and cohesive group, or by having modeled the business processes and communicating in a way that all understand.  So we begin at the level of defining requirements for the application.

Requirements at the Beginning

Begin with a high-level list of features.  Each feature is prioritized by Product Management or Business Analysts (depending on your organization).  These features are typically then decomposed to further elaborate and provide detail and are organized by folder groupings and by type.   If needed to better communicate you should create low-fidelity mockups or sketches of user interfaces (or portions) and even high-level Use Cases or abstract scenarios to express user goals.  We sometimes do these and sometimes not, depending on the nature of what’s being expressed plus considering the audience we’re communicating with.  For example, if we’re communicating a fairly simple concept (how to select a flight) and our audience is familiar with the problem space (they’ve built flight reservation applications before) then clear textual statements may be “just enough” to meet our goals at this stage.  These goals are to establish rough estimates (variance of 50-100%) and based on these and the priorities, to agree on the initial scope of the release (what features are in and which are out). 

Once reviewed, this list of features becomes the release backlog.  The features are then assigned to the first several sprints based on priority and development considerations.

authoring1_small.png
Click image for larger view
Example High Level Features with Properties

Requirements During the Sprint

With respect to the requirements, the principle of “just enough” is paramount.  If the need has been expressed to a degree adequate enough to communicate and have it built as intended, then you’re done.  Going further provides no additional value.   This means you’ll have a varying level of detail for the requirements across the breadth of the product.  For some parts of the product a high-medium level of detail may be “just enough”, while for other more complex areas a very fine level of detail may be needed. 

In each sprint there are tasks of every discipline taking place.  Requirements, design, coding, integration, and testing tasks are all being performed concurrently for different aspects of the system.   The requirements being defined in one sprint will drive design and coding in a subsequent sprint.  The net effect is that all these disciplines are active in every sprint of the lifecycle, but the relative emphasis changes depending on what stage you’re at in the project.  For example, requirements tasks are being performed in all sprints, but they are emphasized more in the earlier sprints.

In each sprint, the high level features are elaborated into greater levels of detail.  This more detailed expression of the requirements usually begins with usage scenarios/stories and/or visuals and it’s expressed in the form of a model.  The models can emphasize user interface, use cases, scenarios, business rules, and combinations of these, depending upon the nature of what is being expressed.  Sometimes these are created collaboratively but more often in our experience, one person creates an initial version and then holds a review with others for feedback.   In our case it is typically the product managers and/or business analysts who create these models and usually between one to three reviews are held with the developers, testers and other stake holders.  The review serves multiple purposes including:

  • To facilitate knowledge transfer to all stakeholders including architects, UE designers, developers, testers, and executive sponsors on what is needed
  • To allow the architects, UE Designers and developers to assess feasibility
  • To determine if there is sufficient detail in the requirements to allow development to proceed

With appropriate technology, tests are automatically generated from the requirements producing tests that are 100% consistent with the requirements and enable the immediate testing of code developed during sprints.

Continuous and Adaptive Planning

With this approach planning is continuous and adaptive throughout the lifecycle allowing resources to be redirected depending on new discoveries that come to light during each sprint.  This ability to course correct in mid-flight is what gives projects their “agility”.   At the end of each sprint we take stock of what was achieved during the sprint and record progress actuals.  The work of the next sprint is adjusted as necessary based on this but also based on testing results, feedback from reviews of that sprint’s build, any new risks or issues that surfaced or others that were retired, and also any external changes in business conditions.  Estimates and priorities are adjusted accordingly and any changes to release scope and sprint plans are made.  In general we try not to make major mid-flight corrections during a sprint, which is one of the reasons why we like two week sprints.  If sprints were, say, four weeks then we would lose agility.  Also a two week sprint is easier and more accurate to estimate than a four week one.

authoring2_small.png 
Click image for larger view
Example Story with Tasks, and Estimates

With respect to the requirements, for those features assigned to the sprint along with any high-level requirements models, development creates high-level goals for the particular feature and estimates them.   The goals express what aspects of the feature they will attempt to build during that sprint, recognizing that one sprint is often not enough time to implement an entire feature.  The feature and its high-level goals become the content of the “story”.  Once the story is defined the developer then details and estimates the tasks to be done for that story over the next two weeks (sprint) and proceeds with development, tracking daily progress against these tasks in an agile project management tool, and covering issues in the daily scrum.

What about the Non-functional Requirements?

The various agile approaches have evolved several techniques to express system functionality.  These are things like user stories, use cases, or usage scenarios, that represent “observable system behaviors and artifacts that deliver value to users” like screens, reports, rules, etc.   These functional requirements express “what” the system is to do.  Examples of this could be things like “generate a stock-level report”, “make a car reservation”, “register for a webinar”, or “withdraw cash”.

Associated with the functionality of a system are its “qualities”.  These express “how well” the system is supposed to do what it does – how fast, how reliably, how usable, and so on.  Sometimes these non-functional requirements are associated with certain functional requirements and other times they apply to whole portions of the system or the entire system.   So how do these very important requirements get accounted for in our agile process?

They are expressed at the high-level in the form of textual statements.  For example:  “Any booking transaction shall be able to be completed by a user (as defined in section a) in less than three minutes, 95% of the time”. 

As functional requirements are decomposed and derived any associated non-functional requirements should similarly be decomposed, derived, and associated to lower levels.  For example the above performance requirement is associated with all the “booking transaction” functional requirements (book a car, book a flight, book a hotel).  If the functional requirements are decomposed into the lower level requirements “select a car”, “choose rental options”, and “check-out”, then the non-functional requirement may similarly be decomposed into requirements for selecting a car in less than 30 seconds, choosing options in less than one minute, and checking out in less than 1.5 minutes.

During review sessions the functional requirements take center stage.  However, during these reviews any non-functional requirements that are relevant need to be presented and reviewed as well.  Traceability is usually relied on to identify them. Any non-functional requirements relevant to the functional requirements of the story need to be expressed as part of the story, so the developer can take these into account during development. 

QA needs to create tests to validate all requirements, including the non-functional requirements.  Sometimes before a feature has been completely implemented, non-functional requirements can be partially tested or tested for trending, but usually cannot be completely tested until the feature is completely implemented (which can take several sprints).

What about Testing?

The high degree of concurrency in agile processes means that testing is performed in every sprint of the lifecycle.  This can be a considerable change from traditional approaches and offers several benefits.  First, it tends to foster a much more collaborative environment as the testers are involved early.  It also, of course, means that items which wouldn’t have been caught until later in the lifecycle are caught early when they can be fixed much more cheaply.

In agile, Product Owners play a very big role in the testing process and they do so throughout the development lifecycle.  Whereas many traditional approaches often rely on requirements specifications as “proxies” of the product owners, agile places much more reliance directly on the product owner effectively bypassing many issues that can arise from imperfect specifications.  In addition to the product owners, developers also test.  Test-driven development is a prominent technique used by developers in agile approaches where tests are written up-front and serve to guide the application coding as well as performing automated testing, which helps with code stability.  To augment test driven development, which is primarily focused at the code level testing done by developers, new technologies that can auto-generate functional tests from functional requirements  enable a QA team to conduct functional testing based on test cases that are not “out of sync” with the requirements specification.  This enables the QA team to conduct testing on a continuous basis, since executable code and test cases are available throughout the lifecycle.  In our example, all three are employed – product owner, development staff, and independent QA – on a continuous basis.

The requirements that we develop in our example are a decomposition of high-level text statements augmented by more detailed requirements models that give a rich expression of what is to be built.  Requirements reviews are based on simulations of these models and they are incredibly valuable for a number of reasons.  First, just as agile provides huge benefit by producing working software each sprint that stakeholders can see and interact with, simulation lets stakeholders see and interact with ‘virtual’ working software even more frequently.  Second, people often create prototypes today trying to do much the same thing.  The difference with prototypes, however, is that simulation engines built for requirements definition are based on use cases or scenarios and, therefore, guide the stakeholders in how one will actually use the future application, providing structure and purpose to the requirements review sessions.   Prototypes, including simple interactive user interface mock-ups, on the other hand, are simply partial systems that ‘exist’ and provide no guidance as to how they are intended to be used.  Stakeholders have to try to discover this on their own and never know if they’re correct or if something has been missed.  It is important to note that the principle of “just enough” still applies when producing these models. We rely on the requirements review sessions held with designers/developers to determine when it is “enough.”  This approach produces very high quality requirements and it is from these requirements that the tests are automatically generated.  In fact, such thorough testing at such a rapid pace without automatic test generation is likely not possible.

Although we strive to have shipable code at the end of each sprint, this goal is not always achieved, and we may need to use the last sprint or two to stabilize the code.  Since testing has already been taking place continuously before these final sprints, the application is already of considerably high quality when entering the stabilization phase, meaning risk is manageable and rarely is ship date missed.

What about Estimating?

Remember in agile it is typically ‘time’ that is fixed in the triad of time, features, and quality.  In our approach also remember that, with continuous testing and the reserving of the final sprints for stabilization, quality tends to be fairly well known as well.  This leaves the features as variable so what we’re actually estimating is the feature set that will be shipped. 

As always, the accuracy of estimates is a function of several factors but I’m going to focus on just three

  • The quality of the information you have to base estimates on,
  • The inherent risk in what you’re estimating, and
  • The availability of representative historical examples that you can draw from.

In our approach, estimates are made throughout the development cycle, beginning in the initial scoping sprints.  As mentioned earlier, once the list of candidate features is known and expressed at a high (scoping) level, they are estimated.  Naturally at this point the estimates are going to be at their most “inaccurate” for the project lifecycle, since the requirements have not been decomposed to a detailed level (quality of information). This mean there is significant risk remaining in the work to be done.  Similar projects done in the past may help mitigate some of this risk and help increase the accuracy of the estimates (e.g. we’ve done ten projects just like this and they were fairly consistent in their results).  

The initial estimates are key inputs to the scoping and sprint-planning processes.   As the project proceeds, with each sprint risks are exposed and dealt with, requirements are decomposed to finer levels of detail, and estimates naturally become more accurate.   As you might guess, estimation is done toward the end of each sprint and is used in the planning of future sprints.

What about Distributed Teams?

Today distributed development is the norm.  For reasons of efficiency, cost reduction, skills augmentation, or capacity relief, distributed development and outsourcing is a fact of life.  There’s no free lunch however – there are costs associated with this approach, and much of these costs are borne in the requirements lifecycle.  Chief among these is “communication”.  There are practices and technologies that can mitigate this issue, so that the promised benefits of distributed development can be realized.  The approach in this we’ve looked at here, for example, uses the following and has been very successful:

  • Concerted effort for more frequent communication (daily scrums, and other scheduled daily calls)
  • Liberal use of requirements simulation via web-meeting technology
  • Direct access to shared requirements models via a central server
  • Automated generation of tests and reviewing these in concert with the requirements to prove another perspective of what the product needs to provide.

Conclusion

“Have you heard that England is changing their traffic system to drive on the right-hand side of the road?  But to ease the transition they’ve decided to phase it in –  they’ll start with trucks”.

A common mistake of development organizations making the shift from waterfall to agile is that their organization  mandates they still produce their big, heavy set of documents and have them reviewed at the same milestones, clinging to these familiar assets like security blankets. It doesn’t work.  As scary as it might seem all significant aspects of the approach, like documentation, need to change in unison if it’s to be successful, and requirements are one of those significant aspects. 

However if you still want that security blanket and you want to have some benefit of agile, at least generate your requirements specification in an agile manner (iterative, evolutionary, time boxed, customer driven, adaptive planning) that includes simulations integrated and driven by use cases traced to feature.  This is one way to reap some agile benefits without making the leap all at once.

Risk is the ‘enemy’ on software projects.  High risk profiles on projects drive uncertainty, render estimates inaccurate, and can upset the best of plans.   One of the great things about agile is that its highly iterative nature continually ‘turns over the rocks’ to expose risk early and often so it can be dealt with.   

On the other hand, one of the great challenges for larger and distributed teams is keeping everyone aligned as course-corrections happen sprint by sprint.   A big part of this is the time and effort it takes to produce and update assets and the delays caused by imperfect and strained communication. The good news is that tools and technologies now exist to produce many of the assets automatically, and to also dramatically improve communication effectiveness, allowing agile to scale.

With the right approach, techniques and technology, distributed agile can be done.  We’ve done it.  So can you.


Tony Higgins is Vice-President  of Product Marketing for Blueprint, the leading provider of requirements definition solutions for the business analyst. Named a “Cool Vendor” in Application Development by leading analyst firm Gartner, and the winner of the Jolt Excellence Award in Design and Modeling, Blueprint aligns business and IT teams by delivering the industry’s leading requirements suite designed specifically for the business analyst. Tony can be reached at [email protected].

References

1  The Scrum Alliance   http://www.scrumalliance.org/

2  Approaches to Defining Requirements within Agile Teams
Martin Crisp, Retrieved 21 Feb 2009 from Search Software Quality, 
http://searchsoftwarequality.techtarget.com/tip/0,289483,sid92_gci1310960,00.html 

3  Beyond Functional Requirements on Agile Projects
Scott Ambler, Retrieved 22 Feb 2009 from Dr.Dobb’s Portal, 
www.ddj.com/architect/196603549

4  Agile Requirements Modeling
Scott Ambler, Retrieved 22 Feb 2009 from Agile Modeling, 
http://www.agilemodeling.com/essays/agileRequirements.htm 

5  10 Key Principles of Agile Software Development
Retrieved 22 Feb 2009 from All About Agile, 
http://www.agile-software-development.com/2007/02/10-things-you-need-to-know-about-agile.html

6  Agile Requirements Methods
Dean Leffingwell, July 2002, The Rational Edge         

7  Requirements Honesty
Francisco A.C. Pinheiro, Universidade de Brasilia

8  Requirements Documents that Win the Race
Kirstin Kohler & Barbara Paech, Fraunhofer IESE, Germany

9  Engineering of Unstable Requirements using Agile Methods
James E. Tomayko, Carnegie Mellon University

10  Complementing XP with Requirements Negotiation
Paul Grunbacher & Christian Hofer, Johannes Kepler University, Austria

11  Just in Time Requirements Analysis – The Engine that Drives the Planning Game
Michael Lee, Kuvera Enterprise Solutions Inc., Boulder, CO.                                                            03/09

Combining Productivity with Creativity

If I may state the obvious, high productivity is good; low productivity is bad. That applies both to individuals and to projects. A number of factors affect individual productivity. Internal factors such as a person’s basic sense of self worth and the amount of discipline they bring to the workplace directly affect their output. Workplace environment and their supervisor’s management style can directly affect personal productivity.

The perfect business analyst would appear at work, immediately put their head down, and come up for air eight hours later, having generated prodigious amounts of high quality output. The reality is that most people only spend a fraction of their work day actually doing productive work. It is hard to maintain the needed focus, and people find many creative, and often unconscious, ways to avoid it. There are techniques that individuals can apply to significantly reduce this wasted time. The business of bringing systems into existence is by its very nature creative. But most of the time, IT professionals tend to behave like plodders. We all get creative inspirations, but few of us recognize or act on them. Those who do so regularly are seen as creative geniuses.

A manager’s personal style has a direct impact on the productivity of their staff. While I think a supportive style works better that an aggressive one, there are plenty of the latter types around. Unfortunately, we are programmed to respond to fear and intimidation, so it can work. But when an aggressive manager’s behavior turns outright abusive, disaster will result. I once had to rescue a contract where the program manager had driven off every single first and second level manager and senior analyst on the contract within six months of taking control.

The ability of a project manager to effectively utilize the capabilities of the staff assigned to them can have a huge impact on the quantity, quality and timeliness of the work products of the project team as a whole. In some respects this is just Management 101. The key to real success is a combination of deep knowledge of what team members can do, combined with a great deal of flexibility in making and adjusting work assignments, including a willingness to jump outside of normal schedule when roadblocks are encountered. In addition, better results can be achieved if people are used in multiple roles.

My personal favorite is to use the same business analyst(s) who have elicited requirements to do system testing. Who else is better qualified to know whether a system has met its objectives? Quite a few immigrants come to America every year to work in the IT industry. These individuals tend to be hard workers, and can be very productive, but linguistic and cultural differences can be barriers to achieving that productivity. A supportive manager who is sensitive to these differences can work with these individuals to overcome these differences and realize their full potential.


John L. Dean is a seasoned IT professional with many years experience, including systems engineering, systems analysis, requirements analysis, systems architecture and design, programming, quality assurance, testing, IV&V, and system acquisition, equally split between technical and management. He has worked both the contractor and government sides of the fence, has been an employee of large (IBM, CSC, Booz-Allen, MITRE, ACS) as well as very small companies, and is currently an independent consultant. He has a Masters degree in Operations Research from Clemson University. You can reach him at [email protected].

Seven Tips to Ensure Requirements Management Success

The path to building great software goes through requirements management.  It’s easy to forget some times, but the world relies on great software.  Software operates the cars we drive, the planes we fly in, the cell phones we can’t live without and the tools we use every day to get our jobs done.  Software is everywhere.

As a software professional, you know all too well that software development isn’t easy.  A software product is never completed.  There’s always an opportunity to improve functionality and there’s no shortage of challenges to overcome along the way:

  • Lots of people involved in the process
  • Customers have difficulty articulating their real needs
  • Requirements constantly change
  • Teams are spread across multiple geographies
  • There’s growing pressure to release products faster
  • The complexity of software doubles every 2-3 years
  • More projects fail than succeed

Whether you’re building a revenue-generating product or an internal system, your company’s overall success largely relies on your software team’s success.  And, the path to building great software goes through requirements management.  Organizations that embrace this concept enjoy greater results.  They experience fewer errors and frustration, faster planning and development cycles and they’re able to deliver higher quality products to their customers.

What You’ll Learn:  The goal of this article is to provide you seven essential tips to help you be more successful with requirements management.  For some, these tips might be new.  For others, these tips will serve as a good reminder of the fundamentals that are easy to lose sight of during the heat of a project. 

Tip #1. Stay Connected

You can eliminate most issues by keeping everyone connected.

Much attention is placed on the high failure rates of software projects, and for good reason.  Any time there’s billions of dollars at stake and failure rates ranging between 60%-80%, people are going to pay attention.  But, what you don’t hear as much about is the root cause.  Last year, in The State of Requirements Management Report we polled over 200 professionals about the top challenges they faced in eliminating project failure, and the resounding theme boiled down to one thing – communication.  If you can get connected and stay connected throughout the entire development process, you can eliminate the vast majority of issues.

Terminology

Simple Definition

Collaboration

Keeping your entire team connected throughout the development process

Traceability

Keeping all the requirements, artifacts and other related information connected

There are two parts to staying connected.  First, there’s the connectedness of your team, which has been popularized recently as “collaboration” – new buzzword, same meaning.  Analysts, project managers, developers, testers, product managers, executives, stakeholders and customers – is everyone on the same page about what you’re building and why?

Keeping everyone connected is often easier said than done, but it’s absolutely critical to the success of your project.  Depending on the size and location of your team, you can do this manually through meetings, phone calls and documents or you can use a tool to help keep your team connected.  It depends on your situation and the complexity of what you’re building.  See Tip #7 for the tipping points when a tool might be valuable.

Second, there’s traceability – the act of connecting up the requirements and other artifacts such as use cases, test cases, tasks, defects and even user documentation – all the details that are related to each other within a project.  For complex development projects, there can easily be hundreds or thousands of items involved and it’s critical to establish the traceability relationships between these items – both upstream and downstream.  

For example, when a high-level business requirement changes 30 days into a project, through trace relationships you can immediately assess the impact it has on any downstream functional requirements, tasks and defects that a developer or tester might be working on.  This helps minimize errors and costly rework because the team members affected are aware of the specific change and its impact.

Implementing traceability and a change control process that’s appropriate for your situation is one of the most important steps to ensuring success.  As a simple first step to establishing change control, you can use a change request form manually to document changes right now.

Tip #2. Take Action Now

Don’t wait for your process to be “perfect.” 

Doing something is better than nothing. It’s easy to fall victim to what you might call “process perfectitis” – a condition reached by teams that get paralyzed by process and analysis versus delivering working software.  How many times have you heard someone say, “Well, we’ll get to that project as soon as we really lock down our process? ”  Is any process perfect?  More importantly, should that really be your team’s highest goal? 

Whether your team is practicing some flavor of Agile or not, there’s one thing we can all take away from the principles of Agile – it’s that working software is the primary measure of progress.  Don’t get us wrong, optimizing your process is important, very important.  We’re constantly tweaking our process.  However, if you have a better process and no product, you still have nothing to show your customers.

Doing something is better than nothing.  Start small, identify a few critical requirements and take the approach of continuous improvement where you build, reflect, refine and repeat.  Then, with each release cycle you’ll learn more about the needs of your customers and continuously improve and expand upon the software solution you deliver to them.  If you think your team suffers from process perfectitis, look for these symptoms:

•·         Requirements definition phase seems to drag on and on and on

•·         In the last month more time when spent talking about process, while your product stayed the same

•·         Lack of a decision-maker to make the call when to move forward with development

Tip #3. Eliminate Ambiguity

Successful requirements management begins with writing good requirements.

One of the things you can do immediately is make a “do not use” word list and post it up on the walls in your office.  Visual reminders will help you to avoid using ambiguous terms when writing requirements.  Karl Wiegers, a well-respected requirements management consultant, in his book Software Requirements provides a good list of ambiguous terms to avoid in requirements specifications.  Here’s a snapshot of a few them.

Ambiguous Terms

Ways to Improve Them

fast

Specify the minimum acceptable speed which the system performs some action.

flexible

Describe the ways in which the system must change in response to changing conditions or business needs.

acceptable, adequate

Define what constitutes acceptability and how the system can judge this.

simple, easy

Describe system characteristics that will achieve the customer’s needs and usability expectations.

shouldn’t

Try to state requirements as positives, describing what the system will do, instead of what it won’t do.

robust

Define how the system is to handle exceptions and respond to unexpected operating conditions.

Source:  Software Requirements by Karl Wiegers, 2nd Edition, Microsoft Press, 2003

Tip #4. Reconnect with Your Customer

You don’t have to be an expert to capture the voice of your customer – just committed.

This may sound obvious, but it’s easy to lose sight of customer needs as a project gets underway and the team gets to work building the solution.  Keep in mind, we use the word “customers” to refer the end-users of the product you’re building – these customers could be external consumers for commercial products or internal users in the case of internal IT systems where other departments and employees are your customers. 

Capturing the voice of the customer isn’t a one-time effort.  Most project teams do a thorough requirements gathering session at the beginning of a project, but rarely does the customer interaction carry through to the end.  Successful requirements management practices include constant communication with customers.  Otherwise you risk falling into the classic trap of delivering a product that end-users reject because it doesn’t resonate with how they expect to use it.

There’s definitely an art to eliciting feedback and requirements from customers and clearly some people are better at it than others.  There’s a plethora of books and courses out there to provide training for this specific skill.  However, you don’t need to be a requirements management expert to capture the voice of your customers. The fundamental skill required is commitment.  Commit to picking up the phone every week and talking to customers.  Commit to getting out of your office and sitting down with customers in their real environments.  These are things everyone on the team can do, and should do.  Even in Agile it’s not always possible to have an on-site customer present, so you have to commit to getting that feedback other ways.  

Here’s a quick list of Dos and Don’ts to follow as reminders for how to stay connected to your customers.

Dos

Don’ts

Be a journalist – ask open-ended questions

Think you know best what customers want

Talk to your customers every week

Assume past experience is representative of current needs

Be open and flexible to change

Assume customer needs are static

Just pick up the phone and call customers

Elicit requirements & feedback only at the start of a project

Listen with an open mind during elicitation

Sell customer on your idea for how a solution should work

Sit with a customer and watch how they work

Assume customers know how to articulate their exact needs

Close the loop with customers when their feedback has been implemented in the product

Forget to capture and share the evidence you gather with your team

Tip #5. Prioritize Objectively

Avoid building functionality that customers don’t need and may never use.

Development time is so valuable.  There’s nothing more frustrating for everyone than wasting time building features that customers don’t actually use and don’t provide value back to your company.

This is where requirements prioritization is essential.  You need to avoid the common pitfalls of building features that seem cool or that someone thought a customer might need.  Too often, requirements prioritization happens subjectively.  The team holds a meeting and in a debate over the requirements the loudest voice wins; or a request comes in from a salesperson who just spoke to a customer and the most top-of-mind request becomes the hottest priority du jour.  With each new feature request or high-level requirement, ask these questions to determine if this is a must-have or a nice-to-have feature:

  • What percentage of our customers will benefit from it?
  • Does it fit our brand values and enhance a competitive differentiator?
  • What is the trade-off if we prioritize this ahead of other requirements?

It’s best to establish an objective prioritization model that quantifies the variables that matter most and that each high-level requirement gets evaluated against.  That way, by getting agreement on the scoring model, it’s easier to get consensus on the highest priority requirements your team should focus on, objectively.

Tip #6. Minimize Overhead Select the right tools to get the job done.

If you’re a small team in the same office developing a fairly straight-forward product, you can use a whiteboard, task cards and daily face-to-face meetings to manage requirements.  A specialized tool in this case could create unnecessary overhead.  Likewise, if your team is building a product where the requirements are all agreed upon upfront and won’t change much throughout the course of development, then documents and periodic status meetings may work just fine. 

As projects grow in complexity and teams grow in size and geography, so do the communication challenges and overhead of trying to keep everyone and everything in sync.  It’s in these scenarios, where a requirements management tool can add value because the overhead of using the tool is far less than the manual overhead it takes to keep track of changes, manage trace relationships, update documents and communicate with everyone on the team.

Here’s a checklist of a few common tipping points where a specialized tool makes sense and can help reduce overhead by automating the process of keeping people and all the related information connected.

Variable

Tipping Point

Benchmarks

Complexity

The more complex the project, the greater the need.  If you have over 100 requirements.

72% of teams have projects that on average have 100+ requirements.

Team Size

The bigger the team, the greater the need.
If you have over 25 people involved.

Over 40% of teams have at least 25 members and stakeholders.

Location

The more geographically distributed the team, the greater the need.  If 10%+ are virtual.

Over 60% of teams have at least 10% of their team working in different locations.

Change

The more changes, the greater the need.  If you spend 10% or more of your time managing changes to requirements.

Over two-thirds of teams spend 10% or more of their time managing change.

Traceability

If traceability is a priority for meeting standards or government regulation, a tool is valuable for automating the management of trace relationships, change control and version history.

Benchmarks:  The State of Requirements Management Report by Jama Software and Ravenflow, 2008

Tip #7. Don’t Reinvent the Wheel There are many existing templates and resources you can leverage right away.

Even though every company, project and team is unique, the resources needed to help you be successful, in most cases, already exist.  In minutes you can do a search on Google and find a wealth of best practices information.  As a starting point, here’s a link to more resources from Jama Software and Karl Wiegers for free companion resources to this article: http://www.jamasoftware.com/requirements_management_resources.php


Eric Winquist is CEO and founder of Jama Software. In March 2006, Eric founded Jama with the vision of providing customers a more collaborative way to develop new products and eliminate the common frustrations with traditional approaches to requirements management. Eric is an accomplished entrepreneur, business analyst and project manager with over 14 years experience working with a wide range of organizations. Previous to Jama, Eric founded Redside Solutions, a software development consulting firm.

John Simpson is director of customer outreach, Jama Software. John represents the voice of the customer and leads Jama’s product strategy and communications.  John has over 12 years experience working at software technology companies including Microsoft, WebTrends and Omniture. He has contributed to several books, whitepapers and presentations.

They can both be reached through the following: 503.922.1058       [email protected]  I  www.jamasoftware.com                                3/09

Making Better Business Decisions

Decision-making errors exist within all levels of organizations. Some common examples include:

  • focusing on the symptoms instead of on the problem; 
  • having no clear picture of the desired outcome; 
  • becoming fixated on only one option; 
  • making decisions that do not align with the overall goals of the organization; 
  • missing opportunities to set decision criteria; and 
  • failing to evaluate enacted decisions.

It is important to recognize and accept (without blame or shame) that mistakes occur. Then it is time to move on—to apply a process that will enable successful decision making.

Here are eight common steps that can be taken to aid in making better business decisions.

Define the Problem: Get clarity on the actual business problem by examining the symptoms and gathering input from all stakeholders. State the problem clearly in business terms. Avoid technical jargon.

Know the Strategic Agenda: Find out what is on the strategic agenda of the organization. Ensure that the business problem outlined aligns with the direction of the organization.

Identify the Desired Outcome: Know exactly what you want to see happen. Know your goals and objectives before you consider the route to get there. Consider aligning with the strategic, tactical and operational levels of the organization.

Establish the Solution Domain: Consider ideas that might work within the Solution Domain, that is, within the goals, objectives, rules and constraints of the organization. The Solution Domain establishes the context for which alternative solutions can be considered.

Determine Alternative Solutions: Brainstorm ideas. Have an open session where all ideas are tossed into the ring—no judgment. Refrain from implementation thinking. Focus on solution alternatives. Choose a minimum of three possible solutions for one business problem.

Establish the Evaluation Criteria: Become clear on what is important by creating a list of criteria. Define each of these criteria. Establish the decision-making approach. Ensure that the approach fits within the context of the organization.

Go for It: Choose one solution. Enact it. Allow time for it to work.

Evaluate. Investigate to decide if the solution has been successful. If a satisfactory result has not been achieved, revisit and rethink the solution. Make adjustments as necessary.

Decision making is a challenge, especially in complex organizational environments. A clearly-defined, consistently-applied approach—one that spans all organizational lines—is the key to making better business decisions.


Richard A. Lannon partners with business and technology organizations to help clarify their goals and objectives and train their leadership and professionals on how to achieve them. He provides the blueprint for you and your organization to be SET (structured, engaged and trained). Richard Lannon can be reached at [email protected]; 403-476-8853 or visit www.braveworld.ca 3/09