Showing posts with label Software Requirements Specification. Show all posts
Showing posts with label Software Requirements Specification. Show all posts

Sunday, February 04, 2007

"My" Agile Documentation

In the last post I discussed agile programming and noted that I was managing documentation development in my projects the "agile way", even though I did not realize I was doing agile. Here I will summarize briefly some of "my" agile documentation principles.

At least do the Software Requirements Specification

I have written about this before - see here and here, so I will not repeat here. Just to recap. I can accept not writing any product documentation, except the SRS. But this one is not optional.

Start with something

I never thought that writing a full, complete, "perfect" document up-front was feasible. It almost never is. Trying to enforce that is futile. It will stress the team members, take an inordinate amount of time and effort and will become increasingly out of date as the project progresses. Soon, large parts of its content will be obsolete, which means (among others) that we have wasted a great deal of time and money.

Instead, start the document with a minimum and flash it out as you go. In the beginning, most everything is fuzzy and changing, hence, write only more general, more high-level things. As the project progresses, more and more things stabilize. update the docs with these things.

Update on the fly

As the project progresses, no need to go into heavyweight documentation cycles. Just update the documents as soon as new information is identified. Any team members can do that at any time. This makes the project dynamic and makes it easier to develop the documents quickly.

Review, approve, disseminate

Documents are useless if nobody uses them regularly. To make them useful you must make sure that what they say is

  • Acceptable - make sure the right people review the documentation and ultimately approve it.
  • Known - the best document in the world is useless if people don't use it. Most team members will not if you do not distribute the document formally and make sure people use it.

Keep changes at bay

As I noted in previous posts, unlike the agile principle, I do not "welcome" change. I treat change as unavoidable (don't want to say "evil") in the project. So, I know very well that it will come. However, nobody says you must accept it unquestionably. On the contrary, do question the need for any change. If you can avoid the change, all the better. If not, make sure it's reflected in the documentation, especially, if the documents already cover this topic.

Keep the documentation in sync with the code

Ideally, the documentation should drive the code. In reality a lot of changes are decided and implemented in the code without updating the document. This renders the documents obsolete very fast. Get your team into the habit of updating the documentation at the same time they update the code. It's actually easy because if they keep it up to date all the time, the updates are done in many small steps, rather than major update efforts.

Formatting is not critical

I had cases where we did cut-and-paste directly from emails or from comments in code into the document. This creates a rather sloppy-looking document but it's much better than no document at all and often better than spending all that time/money on high-quality tech-writing. The high quality can follow later. Just make sure that the document is understandable, updated and correct.

Solidify as the release approaches

Changes and updates to the documentation should be harder as the release gets closer. If the project is managed properly, this will be natural. If changes continue to arrive in large quantities even as the release is near, something is wrong. To me, it will indicate that the product is immature and unstable. this will prompt me to consider pushing the release date out. on the other hand, if things are done right, the pressure for changes will go down as the release approaches.

But this is not enough. You (project manager) should implement some process that will intentionally make it harder to get new changes in as the release approaches. People should have stronger and stronger justification to incorporate changes as the release approaches.

Instead, concentrate more on changes to the documentation that do not imply changes to the product (code). Corrections and more details are always good. They improve the documentation without requiring changes in the code.

I can probably think of some more but this is a good start and it's getting late...

-----------------------------------------------------------------------------

Saturday, December 30, 2006

Risk Management is not hard, do it

This is another area where Software Project Managers are not very good at: Risk Management. Why not? I found 2 main things and both are typical of the SW industry:

  • There is no pressure on PMs and no expectation that they perform risk management. Most executives know about risk management but they don't realize that it's part of a PM's responsibilities.
  • Too many PMs in the SW industry just don't have hard skills, so even if they understand the importance of risk management, they don't know how to do it. So they just don't.
Interesting anecdote: I occasionally teach SW Project Management at the local community college. One of my ex-students asked me to come to his workplace and make a presentation to the PMs in the company. In order to decide the topic, he ran a poll among the PMs, asking them for the topic they would most be interested in. Interestingly, Risk Management came in first with 22 votes (second place had a much lower rank - Stakeholder Management with 16 votes). So, this was clearly at the top of their mind. Not big statistics but I was not surprised. I have not yet given the presentation (scheduled for late January) but I will try to understand why they were so concerned about Risk Management.

Anyway, just as I noted in Cost Management is not Optional, I think that Risk Management shouldn't be optional either. It's important for the project and for the PM as a skill. And, it's really pretty easy. I don't want to "teach" Risk Management here. As I noted before, text books can do it much better than a blog. But I do want to give some tips here:

  • It's not hard. Any basic book on project management gives the basics of Risk Management. Take a little time to learn it. It has a lot of overlap with Issue Management, which most PMs do regularly.
  • Use mitigation to avoid contingency. A lot of PMs forget that it's much better to get rid of the risk before the risk event happens, rather than execute the contingency plan after the risk event has happened. Why be the smart guy (or gal) if you can be the wise one?
  • Assign risk owners. You don't have to resolve all the risks all by yourself. You have a team. Let them help out. In fact, there will be risks which you are not the right person to own anyway.
  • Track regularly. Risks are like issues. You need to track them regularly to make sure they are being taken care of.
  • Find a risk log template . Templates make life so much easier. Don't waste time re-inventing the wheel. There are zillions of templates out there.
Once you start to do regular risk management on your projects, you will see that it's not hard and you'll enjoy the benefit of better project control and the appreciation of all of your stakeholders.

Let me know what you think.
---------------------------------------------------------------
Technorati Tags: , , , ,
------------------------------------------------------

Sunday, November 12, 2006

Software Requirements Specification Is King - Part 2

In Part 1, I explained why the Software Requirements Specification (SRS) is the most critical and valuable product document. In this part - Part 2, I will provide some guidelines, suggestions, tips, etc. that Project Managers need to know in order to make the SRS experience good and beneficial.

We will start where I left off in Part 1:

If you don't intend to use it seriously, don't bother to write it.

This is actually applicable to all project and product related documents. So many project teams write so many documents (sometimes even reviewing and approving them) only to put them in the drawer and forget them forever. What's that good for? A frustrating and boring task, expanding resources with no benefit. So, don't bother.


Those of you who have seen a well written SRS know that it's not a trivial undertaking at all. Writing a high-quality SRS is very demanding, both in quality and quantity. This is one of the main reasons why it's often hard to get the team to write it. I have found in my experience that you - the PM - can make things easier if you and the team follow some simple rules.

  • Substance is more important than form. In the beginning, don't worry too much about the appearance and format. Just make sure that the info is there. Worry about looks later. In fact it will probably be best to get a tech writer for that.
  • Something is better than nothing. Trying to write a full, complete, comprehensive spec in the first shot is discouraging. It's a very large task. Encourage your team to start with something. Start small and add as you go.

These 2 principles will allow the team to start with a relatively small effort and get something started. The team will routinely add and improve and over time the document will be high quality.

Now we want to cover some important principles for the contents of the SRS. I will not cover this material here. There are tons of books out there and I don't need to repeat that. No added value. But I do want to recommend that you take a look at Scott Sehlhorst's article: Big Ten Rules - Writing Correct Requirements. This is a very good review of the characteristics of good requirements. It is probably more than you want to know or do for starters. But as you improve the quality of your SRS, this is certainly something that you should look at. The only thing that I want to add here is: if you start the SRS small, as I recommend, then, IMHO, the most important principle in Scott's blog above is actually the last one - correct. The important point here is: errors are unacceptable. They cause more damage than if there was no SRS in the first place. So scrutinize the SRS very carefully for correctness. Worry about the other rules later.

This is it for now. I covered some principles for generating the SRS. Sometime in the future (sooner than later, if there is interest), I will cover the principles for using the SRS.
Let me know what you think.

 

--------------------------------------------------------------------------------

-------------------------------------------------------------------------------

Thursday, November 09, 2006

Software Requirements Specification Is King - Part 1

One of the problems that Software Project Managers encounter is the struggle with the team over product development documentation. Documents, documents, documents. Theory says that the development of the SW product must be accompanied by a series of documents: Market Requirements Specification, Software Requirements Specification (SRS, SW Architecture, SW Design, SW Detailed Design, test documentation, Release... On and on.

People usually hate to write documents. They like to do their job, be it market research, SW design, SE architecture, etc. But they hate to sit down and put all their knowledge on paper. And on top of that, there are the theorists who claim that documenting is a bad idea anyway (especially if they have to do it :). And to make matters even worse, even if they finally agree (or are forced) to write one of these documents, it's usually bad quality because they are not skilled in writing such documents. This surely does not add to the popularity of generating and maintaining documentation.

In this post, I don't intend to go into this debate about: does a SW product need documentation? This will require a rather elaborate discussion. To be clear, I do have an opinion - I think documentation is very important as long as it's done wisely, but this is for another discussion. What I want to cover here is the following rule that I strongly believe in:

If nothing else, at least maintain and use a decent Requirements Specification.

The Software Requirements Specification (SRS) is the most important and useful of the various SW development documents. It tells everybody, and I mean everybody, what this piece of SW should be doing. If you think for a moment, I think you will be surprised when you realize the long list of project stakeholders that will find the SRS useful and beneficial (and that's why I say everybody). Here is a list (let me know if I forgot anybody):

  • Product Manager - needs to be able to tell potential customers what the product does
  • Sales Manager - needs to be able to tell potential customers what the product does
  • SW Architect - uses it to develop the architecture.
  • SW Designer - uses it to design the product.
  • Programmer - uses it to make sure his implementation provides the correct features/behavior
  • QA will test against the SRS
  • Customer will know what to expect and what to test (acceptance testing)
  • Technical Writer will use it as the reference for the user's documentation (User's Guide, User's Manual, etc.).
  • Executives will use it for various purposes (such as in case of dispute, especially with the customer).

Without a SRS, every stakeholder has their own picture in their mind of what this product should do and how it should behave. How many times have you seen the bewildered Product Manager asking why is this feature different form what we agreed? Or the angry customer asking what is this new thing that was never mentioned to us? What does it do? How do we use it? Why do we need it? Did you ask us if we needed it? And where is this important feature that we did want to have and you agreed to provide? Or the angry engineer who says to the QA tester "Why does this test fail? The implementation is correct. You don't know how to write tests". And the tester answering "according to my information, this should behave differently. My test is correct". And who is right? If it's not written down, who knows?

No other document has this power of putting all the stakeholders on the same page like the SRS. So, please, if you don't write any other document, please, at least, write a Requirements Specification.

I will continue in the next post and provide some useful suggestions to make the chore of writing and maintaining the SRS easier. I will also suggest some rules for maintaining the SRS and how to effectively use it. I will just give you a little heads-up here as a teaser:

If you don't intend to use it seriously, don't bother to write it.

--------------------------------------------------------------------------------------------------------

Technorati tags: , , ,

--------------------------------------------------------------------------------------------------------