<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://interactiveasp.net:443/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tag 'Requirements'</title><link>https://interactiveasp.net:443/search/SearchResults.aspx?a=1&amp;o=DateDescending&amp;tag=Requirements&amp;orTags=0</link><description>Search results matching tag 'Requirements'</description><dc:language>en-US</dc:language><generator>CommunityServer 2008 (Build: 30417.1769)</generator><item><title>Physics and the Law of Lossy Requirements</title><link>https://interactiveasp.net:443/blogs/softwarepsychology/archive/2010/11/05/physics-and-the-law-of-lossy-requirements.aspx</link><pubDate>Fri, 05 Nov 2010 19:11:44 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:6695</guid><dc:creator>BruceNielson</dc:creator><description>&lt;p&gt;&lt;a href="http://theeternaluniverse.blogspot.com/2010/10/computer-language-fragmentation-in.html"&gt;This post over at The Eternal Universe&lt;/a&gt; is a physicist complaining about how he’s not seeking a computer science degree, yet he has to keep learning computer languages just to publish physics papers.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/blogs/softwarepsychology/archive/2010/01/21/the-law-of-lossy-requirements.aspx"&gt;He should have read my previous post about the Law of Lossy Requirements&lt;/a&gt;. The cheapest way to capture all of the details of an algorithm is in code. English language specs never capture all the necessary details. So of course physics papers are often written in code. &lt;/p&gt;</description></item><item><title>Software is Not Coding, It’s A Cooperative Game of Communication by Bruce Nielson</title><link>https://interactiveasp.net:443/blogs/softwarepsychology/archive/2010/09/20/software-is-not-coding-it-s-a-cooperative-game-of-communication.aspx</link><pubDate>Mon, 20 Sep 2010 06:04:25 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:6680</guid><dc:creator>BruceNielson</dc:creator><description>&lt;p&gt;In my post on &lt;a href="http://interactiveasp.net/blogs/softwarepsychology/archive/2010/01/02/code-is-design-by-bruce-nielson.aspx"&gt;“code is really design”&lt;/a&gt; post, I mentioned that I would further address the paradox that &lt;a href="http://interactiveasp.net/blogs/softwarepsychology/archive/2009/11/25/tools-or-people.aspx"&gt;software is created in “thoughts units”&lt;/a&gt; but &lt;a href="http://interactiveasp.net/blogs/softwarepsychology/archive/2009/12/11/sure-it-s-the-people-but-which-people.aspx"&gt;the most important people to the success or failure of a project are the sponsor and customer&lt;/a&gt;. In this post, I’ll explore that paradox further by discussing Alistair Cockburn’s idea of Software as a cooperative game. &lt;/p&gt;  &lt;p&gt;In &lt;em&gt;Agile Software Development&lt;/em&gt;, Cockburn says:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Software development is therefore a cooperative game of invention and communication. There is nothing in the game but people’s ideas and the communication of those ideas to their colleagues and to the computer.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In &lt;em&gt;Crystal Clear: A Human-Powered Methodology for Small Teams&lt;/em&gt;, he writes: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[Successful teams] view developing software as an evolving conversation – an economic-cooperative game, actually. In any one move they go forward and create reminders for each other. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;But in what sense is software a game and how does this help us understand software development better?&lt;/p&gt;  &lt;p&gt;I’ve never been fully comfortable with Cockburn’s calling it a “game.” I’m not sure images of Monopoly and Halo (which is what comes to my mind, anyhow) is what he intended.&lt;/p&gt;  &lt;p&gt;It’s helpful to refer to other non-software examples that Cockburn uses. One of my favorite of his examples is making laws in a legislature. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Can You Estimate How Long it Will Take to Pass a Law? &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Imagine if the republicans asked the democrats, “How long will it take you guys to pass that new health care law of yours?”&lt;/p&gt;  &lt;p&gt;Now in theory, the democrats should be able to estimate this. It’s just a bunch of words on a pieces of paper, right? Someone has to sit down to write it, they have to talk to experts, they have to run a few numbers and come up with a budget, then they have to pass it through a committee, then bring it to the floor, and finally get a vote. So the question the republicans are asking seems reasonable on the surface. &lt;/p&gt;  &lt;p&gt;But in reality, part of what the democrats have to estimate is how long it will take them to convince enough republicans to pass a version of the bill. If this step were unnecessary, making an estimate would probably be easy. But if the democrats need to actually convince some key republicans to vote for the bill to get it passed, then part of their estimate will have to be an estimate for how long it takes to keep revising the bill until the republicans accept it – if ever. &lt;/p&gt;  &lt;p&gt;Once we realize that is the case, the republican’s question seems less legitimate. The Republicans have a significant say in determining when the bill is “done” and the democrats don’t actually control that part of the process. The democrats cannot, even in principle, make an estimate for how long it will take to pass the law. &lt;/p&gt;  &lt;p&gt;I see software much like this. We have customers and sponsors on the one hand and the development team (programmers, testers, designers, project managers) on the other hand. But instead of capturing ideas into specific laws to be interpreted by other humans, they are cooperating together to capture business rules into an automated programs that will be interpreted by computers. &lt;/p&gt;  &lt;p&gt;There is nothing else going on when we make software. There is no analogy here to building a house or a wall, or anything else physical. When my customers ask me “how long will it take to program the fitz-bart module?” I am literally incapable of answering them because part of my estimate would have to be how long &lt;em&gt;they will choose to iterate&lt;/em&gt; before they accept the software as matching their needs. There is literally no limit to how many times they might choose to keep tweaking the requirements and I’ve been in cases where they never become satisfied with it. &lt;/p&gt;  &lt;p&gt;If I didn’t have to worry about customers having to accept the software, estimates would be a lot easier. But with customer acceptance required, it’s impossible to estimate anything beyond the first iteration of the creation of the module.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;An Alternative – Cooperation&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Now consider an alternative example. Lets say that both the republicans and democrats both are anxious to pass a health care bill and they both have more or less synchronous goals. Now is it possible to estimate how long it will take to pass a health care law? &lt;/p&gt;  &lt;p&gt;Absolutely!&lt;/p&gt;  &lt;p&gt;Why? Because now both sides are working together to meet a target date. This means both sides are motivated to make the date and, more to the point, both will be willing to accept some compromises to meet that date. &lt;/p&gt;  &lt;p&gt;Software works the same way. If the customers/sponsors and the development team both want to make a certain release date or a specific budget target, there is almost always a way to come up with a workable (though usually manual, and thus less than ideal) solution to any software problem such that you can meet those goals. It just requires both sides to agree that they will make the target date or the target budget and to be willing to negotiate on scope until they match those goals.&lt;/p&gt;</description></item><item><title>The Law of Lossy Requirements by Bruce Nielson</title><link>https://interactiveasp.net:443/blogs/softwarepsychology/archive/2010/01/21/the-law-of-lossy-requirements.aspx</link><pubDate>Thu, 21 Jan 2010 19:15:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:6479</guid><dc:creator>BruceNielson</dc:creator><description>&lt;p&gt;&lt;strong&gt;Lossy Compression&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In computer science, compression is an indispensible tool. Anyone familiar with .zip files knows what I mean. Interestingly, there are two kids of compression, lossless and lossy. &lt;a href="http://en.wikipedia.org/wiki/Lossless_compression"&gt;Lossless compression&lt;/a&gt; is like .zip compression, you put a file of, say, 100kb in and the end result is a file of, say, 50k. But when you reverse the process, you get back your original 100kb file.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Lossless_compression"&gt;Lossless compression&lt;/a&gt; relies on the fact that in real life information contains patterns. Just imagine taking this post and finding the most common used words in it. Then replace the most common word with a the tag &amp;ldquo;&amp;lt;1&amp;gt;&amp;rdquo; and the next most common with &amp;ldquo;&amp;lt;2&amp;gt;&amp;rdquo;, etc. The end result would generally be a smaller file, yet by replacing &amp;ldquo;&amp;lt;x&amp;gt;&amp;rdquo; with the original words you could recover the original file in its entirety. &lt;/p&gt;
&lt;p&gt;I used to wonder what possible use &lt;a href="http://en.wikipedia.org/wiki/Lossy_compression"&gt;lossy compression&lt;/a&gt; could ever be. Why in the world would I ever want to save off a compressed version of my files if I couldn&amp;rsquo;t get them back to their original state ever again?&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;Of course for files, &lt;a href="http://en.wikipedia.org/wiki/Lossy_compression"&gt;lossy compression&lt;/a&gt; is useless but for computer graphics it&amp;rsquo;s quite useful. Because the human eye is not capable of picking up all the details in an image it&amp;rsquo;s possible to reduce the details in the image without the human eye being able to tell the difference. &lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s even more interesting is that you can continue to increase that lossy compression on an image until the human eye &lt;span style="text-decoration: underline;"&gt;can&lt;/span&gt; tell the difference, yet &lt;span style="text-decoration: underline;"&gt;the brain will still be able to tell what the image is.&lt;/span&gt; It just looks a bit more blurry. &lt;/p&gt;
&lt;p&gt;In fact, you can continue to compress and compress using lossy compression to any size. At some point you end up with a single solid color, of course, which isn&amp;rsquo;t useful, but even if you take a very large image &amp;ndash; let&amp;rsquo;s say 1024 x 1024 pixels &amp;ndash; and shrink it via lossy compression down to the equivalent of a 16 x 16 image, the human brain fills in the details and still makes sense of the image.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Requirements Are Lossy Compression&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If &lt;a href="http://interactiveasp.net/blogs/softwarepsychology/archive/2010/01/02/code-is-design-by-bruce-nielson.aspx"&gt;Code is Design&lt;/a&gt;, one of the most under appreciated points of software development is that requirements are equivalent to lossy compression of graphics, only in reverse. (See also &lt;a href="http://interactiveasp.net/blogs/softwarepsychology/archive/2009/12/30/tell-me-what-to-do-not-how-to-do-it.aspx"&gt;Tell Me What To Do, Not How to Do It&lt;/a&gt; for an example of this.)&amp;nbsp; &lt;/p&gt;
&lt;p&gt;What we call &amp;ldquo;requirements documents&amp;rdquo; (or even &amp;ldquo;design documents&amp;rdquo;) are really a blurry picture of what is to be built. In other words, requirements and design documents &lt;strong&gt;by definition do not contain all the details&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Why do we do this? There are actually many reasons, but here are two key reasons:&lt;/p&gt;
&lt;p&gt;1. Until the software is actually built, it doesn&amp;rsquo;t exist. So there isn&amp;rsquo;t really a choice but to imagine it with broad brush strokes and then refine it into reality.&lt;/p&gt;
&lt;p&gt;2. &lt;a href="http://interactiveasp.net/blogs/softwarepsychology/archive/2010/01/14/comprehensibility-vs-precision.aspx" class="null"&gt;As was discussed in a previous post&lt;/a&gt;, human beings more easily understand abstractions rather than precision. If we didn&amp;rsquo;t have abstract and blurry views of the design, no one but the programmer would ever understand what is to be done. Actually, even the programmer would only understand it in chunks and not holistically. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Law of Lossy Requirements&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you followed my argument so far, then &lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;The Law of Lossy Requirements&lt;/span&gt;&lt;/strong&gt; will now make sense to you. This law states:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;All requirements documents are a lossy compression of the business rules. If you made it non-lossy, the cheapest way to document it would be in code. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Therefore there are two corollaries to this law:&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Corollary 1:&lt;/span&gt; There will never be a point where you know all details of what software is to be created until the software is completed. &lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Corollary 2:&lt;/span&gt; There is no such thing as documenting everything in the software because to do so would require synchronizing essentially a second copy of the code.&lt;/p&gt;</description></item><item><title>Comprehensibility vs. Precision by Bruce Nielson</title><link>https://interactiveasp.net:443/blogs/softwarepsychology/archive/2010/01/14/comprehensibility-vs-precision.aspx</link><pubDate>Thu, 14 Jan 2010 19:13:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:6478</guid><dc:creator>BruceNielson</dc:creator><description>&lt;p&gt;&lt;strong&gt;Abstraction vs. Precision in Requirements&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I used to be an instructor for Rational Software&amp;rsquo;s RequisitePro software, which included a class called &amp;ldquo;Requirements College.&amp;rdquo; This useful class helped teach people how to elicit requirements from their customers.&lt;/p&gt;
&lt;p&gt;Three things that really stuck with me from the class were, first, the idea that one does not &amp;ldquo;gather requirements&amp;rsquo; per se, but elicits them. If taken literally, &amp;ldquo;gathering requirements&amp;rdquo; implies that requirements are readily available and you just have to pick them up and take them. This flies in the face of reality; requirements have to be created from nothing.&lt;/p&gt;
&lt;p&gt;The second was the idea that How and What are relative to a point of view. &lt;a href="http://interactiveasp.net/blogs/softwarepsychology/archive/2009/12/30/tell-me-what-to-do-not-how-to-do-it.aspx"&gt;I&amp;rsquo;ve written about this in the past.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The third was that, according to the course, abstraction and precision form a spectrum that affects comprehensibility.&amp;nbsp; The idea was that if you are too abstract, your writing won&amp;rsquo;t be comprehensible at all. But if you are too precise, it&amp;rsquo;s also not comprehensible. The following graph illustrates the idea:&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/softwarepsychology/Comprehensibility_5F00_69BDF1AB.jpg"&gt;&lt;img border="0" width="586" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/softwarepsychology/Comprehensibility_5F00_thumb_5F00_64DB3DEF.jpg" alt="Comprehensibility" height="363" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" title="Comprehensibility" /&gt;&lt;/a&gt;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Legalese is a good example of this. Legalese is very precise wording for legal purposes, but because its so precise, it&amp;rsquo;s difficult for anyone but a lawyer to understand &amp;ndash; and that&amp;rsquo;s not a fair comparison because the lawyer at least gets paid to slog through it. &lt;/p&gt;
&lt;p&gt;Therefore, according to the course, requirements should seek the sweet spot of maximum comprehensibility, where it&amp;rsquo;s neither too precise nor too abstract.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Useful, but Misleading&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This idea of avoiding too much precision to increase comprehensibility is a useful idea. But I couldn&amp;rsquo;t help but feel it also somewhat mislead.&lt;/p&gt;
&lt;p&gt;I kept thinking to myself: but what if that level of precision is what you need to come to an agreement on? &lt;/p&gt;
&lt;p&gt;Imagine dumbing down legalese so that it&amp;rsquo;s more &amp;ldquo;comprehensible.&amp;rdquo; Would that be a good thing? It&amp;rsquo;s not like legalese was created to keep lawyers employed (though sometimes it might seem that way.) On the contrary, legalese was created because a more comprehensible abstraction would also have multiple possible meanings. In a court of law, that&amp;rsquo;s precisely what we&amp;rsquo;re trying to avoid. Ergo, the need for legalese.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Are Software Requirements Like Legalese?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now if the point of requirements documents is to get everyone going in the same general fuzzy direction, I can see that a comprehensible abstraction would be the best way to handle it.&lt;/p&gt;
&lt;p&gt;But if the point of the requirements is to come to agreement on how to specifically implement something, there is no substitute for precision in details. I believe &amp;ldquo;requirements&amp;rdquo; (and also &amp;ldquo;design&amp;rdquo;) must therefore be considered as something closer to legalese in such a circumstance.&lt;/p&gt;
&lt;p&gt;In an ideal world, we&amp;rsquo;d probably want both. We&amp;rsquo;d want to start at the highest level of abstraction and work our way down, keeping every stakeholder informed and involved as we take the fuzzy abstraction and turn it into something specific and detailed. &lt;/p&gt;
&lt;p&gt;But in reality, the Marketing People drop out after the first details start to be filled in, Management&amp;rsquo;s eyes begin to glaze over once the &amp;ldquo;requirements document&amp;rdquo; is complete, and even the Technical Lead might to nod off once we get into the really nitty gritty details. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I see an essential tension between &amp;ldquo;comprehensibility&amp;rdquo; and the need to come to agreement on an actual implementation, which requires comprehending the actual details. I think this is one of the hardest problems in software development and I do not expect this to be a problem that can ever be overcome because it&amp;rsquo;s the essential nature of software itself.&lt;/p&gt;</description></item><item><title>Tell me What to Do, Not How to Do It! by Bruce Nielson</title><link>https://interactiveasp.net:443/blogs/softwarepsychology/archive/2009/12/30/tell-me-what-to-do-not-how-to-do-it.aspx</link><pubDate>Wed, 30 Dec 2009 09:00:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:4677</guid><dc:creator>BruceNielson</dc:creator><description>&lt;blockquote&gt;
&lt;p&gt;Never tell people how to do things. Tell them what to do and they will surprise you with their ingenuity. &amp;ndash; George Patten&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This sounds like good advice doesn&amp;rsquo;t it? It is, actually, but we need to understand it correctly. &lt;/p&gt;
&lt;p&gt;The first thing we need to notice is that there is no objective difference between &amp;lsquo;what&amp;rsquo; and &amp;lsquo;how.&amp;rsquo; The difference is purely relative.&lt;/p&gt;
&lt;p&gt;If I&amp;rsquo;m a marketing guy, I&amp;rsquo;m going to give you a &amp;lsquo;software spec&amp;rsquo; that might be a series of bullet points that says: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Make the Whiz-Bang 50% faster to improve the user experience &lt;/li&gt;
&lt;li&gt;Add the Gog Widget everyone keeps asking about &lt;/li&gt;
&lt;li&gt;Enhance the Dribblium feature to automatically look up user information &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If I&amp;rsquo;m the marketing guy &amp;ldquo;what&amp;rdquo; I&amp;rsquo;m doing is increasing sales. &amp;ldquo;How&amp;rdquo; I&amp;rsquo;m doing it is by the feature improvements listed above.&lt;/p&gt;
&lt;p&gt;But to the team manager, this looks a lot more like a list of &amp;ldquo;what&amp;rdquo; needs to be done with no details on &amp;ldquo;how&amp;rdquo; to do it.&lt;/p&gt;
&lt;p&gt;So the team manager takes this list of bullet points and creates what we (mistakenly) call &amp;ldquo;detailed requirements.&amp;rdquo; He now carefully lays out the details of &amp;ldquo;what&amp;rdquo; needs to be done but decides to leave it up to his tech lead on &amp;ldquo;how&amp;rdquo; to accomplish it.&lt;/p&gt;
&lt;p&gt;The tech lead then creates what is (mistakenly) called a &amp;ldquo;detailed design&amp;rdquo; where he makes a bunch of UML and designs out exactly &amp;ldquo;what&amp;rdquo; he wants his programmers to do but still leaves it up to them on the specifics of &amp;ldquo;how&amp;rdquo; to implement that design.&lt;/p&gt;
&lt;p&gt;Interestingly, the programmer then writes the code which, from the compiler's point of view (do compilers have points of view?) is really a specification of &amp;ldquo;what&amp;rdquo; the software needs to do, but leaves it up to the compiler of &amp;ldquo;how&amp;rdquo; to do it.&lt;/p&gt;
&lt;p&gt;So based on this example, we must accept that &amp;ldquo;what&amp;rdquo; and &amp;ldquo;how&amp;rdquo; are purely relative to a point of view. They do not objectively exist.&lt;/p&gt;
&lt;p&gt;Perhaps this is why we don&amp;rsquo;t usually make a separation between &amp;ldquo;what&amp;rdquo; and &amp;ldquo;how.&amp;rdquo; They tend to mingle freely in our minds. Have you ever called your spouse and said &amp;ldquo;Hey, what time were you planning to be home?&amp;rdquo; when what you really wanted to know was &amp;ldquo;How much longer can I stay out with the guys/girls?&amp;rdquo; I do this all the time.&lt;/p&gt;
&lt;p&gt;This is actually useful to know. Because it means that &lt;strong&gt;you &lt;i&gt;never&lt;/i&gt; have to take an instruction as &amp;ldquo;how&amp;rdquo; you have to do your job because what &lt;span style="text-decoration: underline;"&gt;people actually care about is &amp;ldquo;what&amp;rdquo; they wanted to accomplish.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I remember a customer that insisted that a certain field, I think a zip code, was to have exactly 6 characters in it. This was a hard fast requirement. &lt;/p&gt;
&lt;p&gt;It turned out that they were used to a DOS-based program where the program moved to the next screen upon finishing typing in the last field on the previous screen. The zip code was the last field, so they wanted to be able to enter it and &lt;i&gt;not&lt;/i&gt; move to the next screen before having a change to review it. (For those of you under 30, DOS is a quaint little program that lets you type stuff and then it deletes all your files)&lt;/p&gt;
&lt;p&gt;Of course in a windows based program (for those of you under 20, Windows is that thing you see just before you click on the browser) this was a non-issue. The correct &amp;lsquo;requirement&amp;rsquo; was actually &amp;ldquo;allow me to review the screen before I move to the next&amp;rdquo; which is built into windows anyhow.&lt;/p&gt;
&lt;p&gt;But that&amp;rsquo;s my point. You should &lt;i&gt;&lt;strong&gt;never&lt;/strong&gt;&lt;/i&gt; just assume that because your customer told you &amp;ldquo;how&amp;rdquo; to do something that they weren&amp;rsquo;t actually trying to tell you &amp;ldquo;what&amp;rdquo; to do and just didn&amp;rsquo;t know how to ask it right. &lt;/p&gt;
&lt;p&gt;So don&amp;rsquo;t just blindly follow requirements. Instead, make a real effort to understand &amp;lsquo;what&amp;rsquo; the customer really wants to accomplish and come up with your own suggestions of &amp;lsquo;how&amp;rsquo; to accomplish it. Think of requirements as the starting point of the discussion, not the ending point of &amp;lsquo;what&amp;rsquo; you&amp;rsquo;ll finally deliver.&lt;/p&gt;</description></item><item><title>Does Robert Glass’ Formula for Estimation Success Actually Work? by Bruce Nielson</title><link>https://interactiveasp.net:443/blogs/softwarepsychology/archive/2009/12/17/does-robert-glass-formula-for-estimation-success-actually-work.aspx</link><pubDate>Thu, 17 Dec 2009 15:00:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:4675</guid><dc:creator>BruceNielson</dc:creator><description>&lt;p&gt;&lt;a href="http://interactiveasp.net/blogs/softwarepsychology/archive/2009/12/04/what-are-water-breathers.aspx"&gt;In a previous post&lt;/a&gt; I mentioned Robert Glass’ “fact” that estimates are made at the beginning of the project before the problem is even defined, thus the estimate is invalid from the get go.&lt;/p&gt;  &lt;p&gt;While I don’t disagree with Glass, I do believe he is under estimating (pun intended!) why we human’s prefer estimates – even known bad ones – over no estimate at all. I referred to this phenomenon as “water breathing” because if you are about to drown anyhow, you might as well see if you can breath under water. &lt;/p&gt;  &lt;p&gt;Up front estimates are much the same – if you don’t make them at all, you’ve failed. If you make them and they are bad, you might (and often will) have time to correct them later. So that’s the real reason we make bad up front software estimates regularly. It’s a good reason once properly understood.&lt;/p&gt;  &lt;p&gt;I know this probably sounds defeatist and I don’t mean it to be. In later posts I’ll discuss alternatives to making bad upfront estimates, even when you have “no choice.” But before I explore alternatives, I think we could benefit from looking at all of Glass’ “facts” about estimation. (See &lt;i&gt;Facts and Fallacies of Software Engineering&lt;/i&gt;, p. 27 – 42)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Fact 8:&lt;/strong&gt; One of the most common causes of runaway projects is poor estimation.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Fact 9:&lt;/strong&gt; Most software estimates are performed at beginning of the life cycle. This makes sense until we realize that estimates are obtained before the requirements are defined and thus before the problem is understood. Estimation, therefore, usually occurs at the wrong time.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Fact 10:&lt;/strong&gt; Most software estimates are made either by upper management or by marketing, not by the people who will build the software or their managers. Estimation is, therefore, done by the wrong people.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Fact 11:&lt;/strong&gt; Software estimates are rarely adjusted as the project proceeds. Thus those estimates done at the wrong time by the wrong people are usually not corrected.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Fact 12:&lt;/strong&gt; Since estimates are so faulty, there is little reason to be concerned when software projects do not meet estimates targets. But everyone is concerned anyway.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Fact 13:&lt;/strong&gt; There is a disconnect between management and their programmers. In one research study of a project that failed to meet its estimates and was seen by its management as a failure, the technical participants saw it as the most successful project they had ever worked on. &lt;/p&gt;  &lt;p&gt;Look over that list carefully. I can see everyone nodding their head approvingly. “Yup, it’s all so true! Those stupid pointy haired managers are the real cause of the bad estimates!” &lt;/p&gt;  &lt;p&gt;While these facts all seem generally correct to me, I feel like something is missing. Glass seems to be advocating that if we do the inverse, we’ll be fine. Likewise, as you shake your head knowingly and wag your finger at management, you are advocating the same. But is this really true?&lt;/p&gt;  &lt;p&gt;Let’s try taking the inverse of all his facts and see if we really believe the software estimation problem is solved. Can you honestly say you’ll agree with the following statement as being factually correct?&lt;/p&gt;  &lt;p&gt;You’re software estimates will all be wildly successful if you just:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Make good estimates instead of poor ones (inverse of fact 8) by… &lt;/li&gt;    &lt;li&gt;Making the estimates after the problem is defined – so after requirements gather is completed (inverse of fact 9) &lt;/li&gt;    &lt;li&gt;Have the developers make the estimate, not marketing or management (inverse of fact 10) &lt;/li&gt;    &lt;li&gt;And adjust your estimates when there are clear changes to the scope of the project (inverse of fact 11) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Since all of the above are true for your project, we can then conclude that it’s perfectly acceptable for management to get very concerned if you miss your estimates, since they “did it all the right way” (inverse of fact 12) and so we know there will never be another disconnected between management and programmers again. (inverse of fact 13).&lt;/p&gt;  &lt;p&gt;Do you believe it? &lt;/p&gt;  &lt;p&gt;I don’t. &lt;/p&gt;  &lt;p&gt;Personally, I have never let management or marketing make estimates for the programming team (except to add fudge factor on top), I’ve always performed the estimate after requirements gathering when we’d supposedly “defined the problem”, and I always adjust my estimate for clear changes of scope. But even when I “do it all right” my experience is that programmers still can’t generally keep to their estimates. &lt;/p&gt;  &lt;p&gt;So my conclusion is that while Glass has hit on a series of true problems about software estimation – and I’d agree if you don’t &lt;i&gt;at least&lt;/i&gt; do the above, you have no hope at all in making your estimates – I feel he is failing to address the true underlying problems with software estimation. &lt;/p&gt;  &lt;p&gt;So then what are the real reasons we all seem to suck at software estimation? To find that answer, we need to learn a lot more about how software and human psychology collide before we have any real hope of finding a solution to the problem. &lt;/p&gt;</description></item></channel></rss>