Just a quick note. After reading through some of the feedback on my recent post on "the root causes of poor software requirements," I had to agree with some of the respondents: I had forgotten a branch in the analysis.
So, for the past week, I've been stealing a few minutes here and there to review the analysis and add updates. I just posted an updated analysis, adding a new top-level branch (at the end) and adding a sub-branch about half-way through.
Feel free to check it out.
Now, to take this to the next step: anyone can figure out the steps and costs involved with improving your requirements-gathering practices. Here are the steps.
a) Steal the list right from the post.
b) Load it into an Excel spreadsheet. Add the following columns: Score, Mitigation type, Mitigation Tactic
c) For each item, add a score, from 0-5. See the weighted ranking below.
Score 0 if this cause does not happen in your environment Score 1 if this cause occurs but is easily overcome in your environment Score 2 if this cause occurs but it doesn't occur frequently or drive substantial quality problems Score 3 if this cause occurs occasionally, and the business analyst or program manager finds the flaws Score 4 if this cause occurs frequently, and/or the software developers or testers find the flaws Score 5 if this cause occurs frequently and the flaws are found in deployment or production
d) For each item that ranked 3,4, or 5, write a statement for how you think you should mitigate it in the Mitigation Tactic column. Feel free to brainstorm many possible ways, but then select the way that you believe is most feasible.
e) For each mitigation, add a value in the Mitigation Type column. use one of the types below or create your own list.
Use type 'Training' if your mitigation is focused on improving the skills of a participant Use type 'Automation' if your mitigation is focused on moving information efficiently or using workflow tools Use type 'Data' if your mitigation is focused on improving the information collected or making it available Use type 'Process' if your mitigation is focused on analyzing workflow, allocating responsibility, or insuring accountability Use type 'Staffing' if your mitigation is focused on adding staff to a role or creating a role that doesn't already exist
f) Sort your analysis by type and score. For each group of mitigations by type, you have a workstream (or sub-project). That effort can be estimated and an approximate cost established. For the 'Data' and 'Automation' groups, you have a list of objectives that can be used to select software for requirements management.
g) Pull together a project proposal from your cost estimates and propose a project to your management that outlines the steps you intend to take, the problems you intend to solve, the amount of money that you believe it will cost, and (here is the hard part) the value of the quality gains that you expect to reap.
Good Luck!
If I had a nickel for every time I've heard a developer complain about poor quality requirements, I'd... well... have a lot of nickels. Let's look, for a moment, at the root causes of poor requirements and business rules. While I consider this to be a business problem, and not a technology problem per se', I'll use root cause analysis (discussed in a prior post) to organize the analysis.
The problem, as perceived by developers, can be quoted this way:
Problem Statement: The requirements for software, as delivered by typical business analysts, is not sufficiently clear, insightful, or well understood to develop software systems that meet the needs of business users.
There is an assumption here. One that I won't challenge (today) but one that probably should be qualified:
Assumption: Improving the quality of software requirements will have a net positive effect on the quality, reliability, applicability, usability, and value of custom software as perceived by the business users who use it.
Interesting assumption, that one. Perhaps fodder for a later blog post.
So, how do we help software developers deliver timely valuable code without driving the business users crazy with technical details that they'd rather not bother with or understand? Let's look at the causes of our problem.
What follows is a (long) root cause analysis of "poor" software requirements. This can be used to understand the problem, which is the first step to addressing it.
How to read this analysis:
Each entry is seen as a "cause" of the problem. Indented below each are the answers to the question "why" or "what is the cause of this cause?" As you read this list, insert the word "because" at the start of every sentence. The text may look a little odd because of the indenting. An analysis like this looks good on an Ishikawa diagram, but that's pretty tough to do on a blog. The ultimate goal is to ask why five times, or to get to five levels deep. The numbering does not go from 1. to 1.1 to 1.1.1 as the levels increase. That is due to a limitation of my blogging tool. I also don't go to "five levels deep" in many areas when there is no value in doing so.
Each entry is seen as a "cause" of the problem. Indented below each are the answers to the question "why" or "what is the cause of this cause?" As you read this list, insert the word "because" at the start of every sentence.
The text may look a little odd because of the indenting. An analysis like this looks good on an Ishikawa diagram, but that's pretty tough to do on a blog. The ultimate goal is to ask why five times, or to get to five levels deep. The numbering does not go from 1. to 1.1 to 1.1.1 as the levels increase. That is due to a limitation of my blogging tool. I also don't go to "five levels deep" in many areas when there is no value in doing so.
Note: A SME is a Subject Matter Expert. An Analyst will gather requirements from a SME, but may then need to review those requirements with other business stakeholders.
Problem: The requirements for software, as delivered by typical business analysts, is not sufficiently clear, insightful, or well understood to develop software systems that meet the needs of business users.
Whew. That list is long, and probably missing a few things, but it is a fairly good attempt at describing the root causes of "poor software requirements." (There are 149 184 listed 'causes' of poor software requirements in the list above, only counting the leaf levels of the analysis).
Some takeaways from this effort:
There is a joke that I sometimes like to refer to, more as an allegorical story than anything else. This version is from AJokeADay.com:
A man in a hot air balloon realized he was lost. He reduced altitude and spotted a woman below. He descended a bit more and shouted,” Excuse me, can you help? I promised a friend I would meet him an hour ago, but I don't know where I am." The woman below thought carefully for five minutes, and then replied, "You are in a hot air balloon hovering approximately 30 feet above the ground. You are between 40 and 41 degrees north latitude and between 59 and 60 degrees west longitude." "You must be an engineer," said the balloonist. "I am," replied the woman. "How did you know?" "Well," answered the balloonist, "you took a long time to respond, and everything you told me is technically correct, but it is of no value to my problem. I am still lost. Frankly, you've not been much help so far." The woman below responded, "You must be in management." "I am," replied the balloonist, "but how did you know?" "Well," said the woman, "you don't know where you are or where you are going. You have risen to where you are, due to a large quantity of hot air. You made a promise which you have no idea how to keep, and you expect people beneath you to solve your problems. The fact is you are in exactly the same position you were in before we met, but now, somehow, it's my fault!"
A man in a hot air balloon realized he was lost. He reduced altitude and spotted a woman below. He descended a bit more and shouted,” Excuse me, can you help? I promised a friend I would meet him an hour ago, but I don't know where I am."
The woman below thought carefully for five minutes, and then replied, "You are in a hot air balloon hovering approximately 30 feet above the ground. You are between 40 and 41 degrees north latitude and between 59 and 60 degrees west longitude."
"You must be an engineer," said the balloonist.
"I am," replied the woman. "How did you know?"
"Well," answered the balloonist, "you took a long time to respond, and everything you told me is technically correct, but it is of no value to my problem. I am still lost. Frankly, you've not been much help so far."
The woman below responded, "You must be in management."
"I am," replied the balloonist, "but how did you know?"
"Well," said the woman, "you don't know where you are or where you are going. You have risen to where you are, due to a large quantity of hot air. You made a promise which you have no idea how to keep, and you expect people beneath you to solve your problems. The fact is you are in exactly the same position you were in before we met, but now, somehow, it's my fault!"
So it’s funny, but it is a useful story as well.
All architecture, in any real sense, is an attempt to communicate a complex set of ideas.
Architecture is an answer to a question. So many architects strive for accuracy in their “answers” (the architectural diagrams they produce), and we see countless discussions of the “correct” way to model this thing or that… but while accuracy is great, usefulness is so much more important.
In some ways, that is what the IEEE 1471 / ISO 42010 standard is all about. For those of you not familiar with IEEE 1471, it is a metamodel for all architecture. This simple document frames architecture as an attempt to communicate, using the language of architectural models.
But what is more important in the standard is not that architecture communicates… it is the fact that architecture, in order to succeed, must communicate to the specific concerns of specific stakeholders. In other words, you must consider the needs of the audience before delivering the requested information, and then deliver what they need in a clear manner, even if it is not technically what they asked for.
In the joke, an engineer responds to the question from stranded businessman that he is 30 feet off the ground. Accurate but unhelpful. An architect would consider the businessman to be a stakeholder, and would take his concerns into account.
Instead of replying with data that is of no value, the architect would toss up a cell phone to allow the businessman to call his friend and reschedule. The businessman would still be lost, and hovering in a balloon… but at least his pressing concerns would be met.
Honestly, what else could you ask for?
Well, it is February 2nd, and today, the Open Group is announcing the general availability of TOGAF version 9.0. For those of you not familiar with TOGAF, it is an ambitious and maturing Enterprise Architecture Framework created by the members of the Open Group.
I’ve had the good fortune to be allowed early access to the TOGAF 9.0 specification, so while most of the readers of this blog will be seeing TOGAF for the first time today, I’ve been typing these notes for about a week now. This is going to be a bit of a random discussion of good points and opportunities to improve the TOGAF, now that their new direction is clear.
I’m not a certified TOGAF practitioner. That caveat aside, I am someone who has studied multiple frameworks, and created an architectural framework, so I can draw on a good bit of experience when reviewing one. I spent some time reviewing the prior version of TOGAF, and my first impression of the new version is this: Substantial and Deep Improvements.
The new version has a comprehensive model for the content, insuring that the stakeholders for architecture have separate sections of the framework dedicated to each of their varied concerns. This makes navigation and adoption considerably easier. In addition, substantially new content, along with new models and a richer set of descriptions, have been added. The new framework is more readable and more usable than it’s predecessor.
The focus of TOGAF 9.0 has been sharpened, drawing the distinctions between different concepts and activities into the light. This was needed for strategic architecture to be successful in to TOGAF model. The terminology is more consistently described and used, and the attention to detail is refreshing.
The TOGAF is, and probably always will be, a work in progress. It is a community effort, and the community that worked on this version have expended considerable effort. That effort shows. I really like where this framework is going.
Here is my call to action: for the first time, I’m willing to say this: The TOGAF is enterprise ready. If your organization does not have a framework, or if you are using Zachman with some home-grown methods, I recommend that you serious consider TOGAF 9 for adoption.
The use of a metamodel
While the TOGAF metamodel is new and untested, I strongly appreciate that the framers of TOGAF were aware of metamodels at a sufficient level to include one at all. This is a huge improvement. In the coming weeks, I may get a chance to review the TOGAF metamodel in detail and provide insight into specific elements.
Partitioned Architecture
For years, the Zachman framework (ZF) has stood as the de-facto partitioning model for architecture. In many organizations, the only thing that the CIO knew about enterprise architecture was a single word: Zachman. So teams around the world adopted John Zachman’s framework. The problem is: the framework is not universally useful. It is an implementation of a core concept: separate the different attributes of an architectural description and categorize your model. Zachman not only demonstrates the concept, he implements it, and as a result, obscures the right of others to implement the same concept in a different way. But there are other viewpoints than the rows represented in the Zachman Framework, and other subject areas than the columns he chose. The concept is good, but the ZF implementation is not the only rational view. The TOGAF 9 takes a “metamodel” view of Zachman, providing a set of attributes that can be used to partition architectural models. The ZF can easily be viewed as one implementation within the Partitioned Architecture mechanism described in TOGAF. In this way, the framers of TOGAF have given us the language to get past the ZF and allow many more views to emerge, without being bound to the ZF partitioning model, while remaining respectful of the ZF implementation as a valuable contribution to Enterprise Architecture.
For years, the Zachman framework (ZF) has stood as the de-facto partitioning model for architecture. In many organizations, the only thing that the CIO knew about enterprise architecture was a single word: Zachman.
So teams around the world adopted John Zachman’s framework. The problem is: the framework is not universally useful. It is an implementation of a core concept: separate the different attributes of an architectural description and categorize your model. Zachman not only demonstrates the concept, he implements it, and as a result, obscures the right of others to implement the same concept in a different way.
But there are other viewpoints than the rows represented in the Zachman Framework, and other subject areas than the columns he chose. The concept is good, but the ZF implementation is not the only rational view.
The TOGAF 9 takes a “metamodel” view of Zachman, providing a set of attributes that can be used to partition architectural models. The ZF can easily be viewed as one implementation within the Partitioned Architecture mechanism described in TOGAF.
In this way, the framers of TOGAF have given us the language to get past the ZF and allow many more views to emerge, without being bound to the ZF partitioning model, while remaining respectful of the ZF implementation as a valuable contribution to Enterprise Architecture.
Clarification of “Service”
TOGAF defines Information System Services as being different from Business Services. As my prior blog points out, I couldn’t be happier!
The addition of Guidance
The good folks who worked on this current version are clearly in touch with the pain points that any adopting organization would feel when attempting to use the TOGAF, especially if they are not familiar with Enterprise Architecture already. One of those pain points goes like this: This is a great way to “think” about architecture, and “develop” architecture, but how do I “use” the framework in my business? A new guidance section attempts to begin to answer that question. The guidance section is currently small, and I think it should be quite large (suggestions for improvement follow). However, it is a start, and I’m glad to see that the start is there.
The good folks who worked on this current version are clearly in touch with the pain points that any adopting organization would feel when attempting to use the TOGAF, especially if they are not familiar with Enterprise Architecture already. One of those pain points goes like this: This is a great way to “think” about architecture, and “develop” architecture, but how do I “use” the framework in my business? A new guidance section attempts to begin to answer that question.
The guidance section is currently small, and I think it should be quite large (suggestions for improvement follow). However, it is a start, and I’m glad to see that the start is there.
Use TOGAF 9.0. It is major step forward in architectural development. While I had a few suggestions, they are not obstacles. There is nothing in the TOGAF that prevents TOGAF v.9 from being useful as it stands today.