There are many good definitions of System and Software Requirements
Specifications that will provide us a good basis upon which we can both
define a great specification and help us identify deficiencies in our
past efforts. There is also a lot of great stuff on the web about
writing good specifications. The problem is not lack of knowledge about
how to create a correctly formatted specification or even what should
go into the specification. The problem is that we don’t follow the
definitions out there.
We have to keep in mind that the goal is not to create great
specifications but to create great products and great software. Can you
create a great product without a great specification? Absolutely! You
can also make your first million through the lottery – but why take
your chances? Systems and software these days are so complex that to
embark on the design before knowing what you are going to build is
foolish and risky.
The IEEE (www.ieee.org) is an
excellent source for definitions of System and Software Specifications.
As designers of real-time, embedded system software, we use IEEE STD
830-1998 as the basis for all of our Software Specifications unless
specifically requested by our clients. Essential to having a great
Software Specification is having a great System Specification. The
equivalent IEEE standard for that is IEEE STD 1233-1998. However, for
most purposes in smaller systems, the same templates can be used for