top of page

Software Requirements

Software development has many aspects, but the most important aspect is Requirements.  Why?

​

Here’s a simple thought experiment that my esteemed colleague, Amir Kolsky, coined to illustrate why:

Imagine you have two teams.  One team is an expert team, but they’re working against bad requirements.  The other team is just a regular team, but they’re working against good requirements.  Which team do you think is going to build a better product?

​

Even if you have the best team in the world, if they’re working against bad requirements, they’re not going to produce a good product.  

The most important thing here is good requirements.  So, what makes a requirement good?

​

Bad requirements are imprecise, ambiguous, missing stuff, and have unnecessary stuff.  This results in defects, delayed delivery, unhappy customers, and wastes resources.

​

Good requirements precisely and unambiguously specify the functionality needed, at the time, to be usable, and only that functionality.  Good requirements result in faster delivery of the functionality that is needed right now, and it allows us to get faster feedback on it.

​

Specification

The world of software development has seen many types of requirements, such as Business Requirements Documents (BRDs), Use Cases, and User Stories.  However, of all the types of software requirements, the only type that I've found that completely fits the definition of a good requirement is Behavioral Specifications.  The simple reason for this is that all software is behavior, and because of this, the most efficient and precise way to document requirements for software is by directly specifying the software's behaviors.  To this end, Behavior-Driven Development (BDD) is the practice that requires all software development to be driven from behavioral specifications, regardless of whether you're creating new software or changing existing software.

​

Scoping

When it comes to requirements scope, there are so many different scenarios that may need to be supported by the software and so many different customers/stakeholders/experts whose expectations of the software we must capture that it requires people who are dedicated to this responsibility who use appropriate practices to discover and document these expectations.  There are many practices that help with eliciting requirements, but the best by far, in my opinion, is called Behavior-Based Analysis and Design (BBAD).

​

BBAD employs a comprehensive set of analysis techniques to identify potential scope and potential stakeholders/experts to consult.  This practice results in scenarios that, if chosen to be in scope, can then be specified as behavioral scenarios.

​

Product Knowledge Management

Software can be amazingly complex with thousands of individual behavioral scenarios that must be specified and supported, and all of that information, along with other information such as customers, stakeholders, and experts, and various different aspects of the software, such as architecture, UI, UX, reporting, etc., must be captured and kept current.  Correctly maintaining all of this product documentation requires a product knowledge management practice.  You can read more about that on my product knowledge management page.

​

Training and Coaching

The concepts of BDD, BBAD, and product knowledge management are fairly simple and can be explained in a couple of hours.  However, they're hard to implement because it requires the dismantling of entrenched ideas around software and the development and management of software requirements, and it requires training, coaching, and an organizational dedication to adopting these practices and the right responsibilities.

​

You can read more about BDD here.

​

You can read more about product knowledge management here.

​

Amir and I developed a webinar that explains this in much greater detail, and we've developed a set of comprehensive training courses and workshops.  Please reach out using my contact page if you're interested in learning more.

​

You can see a list of related training and coaching workshops that I've led on my training & coaching page.

bottom of page