<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://interactiveasp.net/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>Software Psychology : Design, Software Develoment Psychology</title><link>http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Design/Software+Develoment+Psychology/default.aspx</link><description>Tags: Design, Software Develoment Psychology</description><dc:language>en</dc:language><generator>CommunityServer 2008 (Build: 30417.1769)</generator><item><title>Software is Not Coding, It’s A Cooperative Game of Communication by Bruce Nielson</title><link>http://interactiveasp.net/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><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://interactiveasp.net/blogs/softwarepsychology/rsscomments.aspx?PostID=6680</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://interactiveasp.net/blogs/softwarepsychology/commentapi.aspx?PostID=6680</wfw:comment><comments>http://interactiveasp.net/blogs/softwarepsychology/archive/2010/09/20/software-is-not-coding-it-s-a-cooperative-game-of-communication.aspx#comments</comments><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;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=6680" width="1" height="1"&gt;</description><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Human+Factors/default.aspx">Human Factors</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Software+Develoment+Psychology/default.aspx">Software Develoment Psychology</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Estimation/default.aspx">Estimation</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Requirements/default.aspx">Requirements</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Project+Management/default.aspx">Project Management</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Coding+As+Design/default.aspx">Coding As Design</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Design/default.aspx">Design</category></item><item><title>The Law of Lossy Requirements by Bruce Nielson</title><link>http://interactiveasp.net/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><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://interactiveasp.net/blogs/softwarepsychology/rsscomments.aspx?PostID=6479</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://interactiveasp.net/blogs/softwarepsychology/commentapi.aspx?PostID=6479</wfw:comment><comments>http://interactiveasp.net/blogs/softwarepsychology/archive/2010/01/21/the-law-of-lossy-requirements.aspx#comments</comments><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;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=6479" width="1" height="1"&gt;</description><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Human+Factors/default.aspx">Human Factors</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Software+Develoment+Psychology/default.aspx">Software Develoment Psychology</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Estimation/default.aspx">Estimation</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Requirements/default.aspx">Requirements</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Project+Management/default.aspx">Project Management</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Coding+As+Design/default.aspx">Coding As Design</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Design/default.aspx">Design</category></item><item><title>Code is Design by Bruce Nielson</title><link>http://interactiveasp.net/blogs/softwarepsychology/archive/2010/01/02/code-is-design-by-bruce-nielson.aspx</link><pubDate>Sat, 02 Jan 2010 09:00:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:5075</guid><dc:creator>BruceNielson</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://interactiveasp.net/blogs/softwarepsychology/rsscomments.aspx?PostID=5075</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://interactiveasp.net/blogs/softwarepsychology/commentapi.aspx?PostID=5075</wfw:comment><comments>http://interactiveasp.net/blogs/softwarepsychology/archive/2010/01/02/code-is-design-by-bruce-nielson.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;The Story So Far&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s return to the primary concern with Software. We&amp;rsquo;ve talked about how &lt;a href="http://interactiveasp.net/blogs/softwarepsychology/archive/2009/12/11/sure-it-s-the-people-but-which-people.aspx"&gt;most software projects either fail altogether or run significantly over budget&lt;/a&gt;. Along with that thought, we considered the statistics that show that the development team itself &lt;a href="http://interactiveasp.net/blogs/softwarepsychology/archive/2009/12/11/sure-it-s-the-people-but-which-people.aspx"&gt;plays little role in the success and failure of the project in comparison to users and sponsors&lt;/a&gt;. However, contrasting that we&amp;rsquo;ve looked at how software development is really developed in &lt;a href="http://interactiveasp.net/blogs/softwarepsychology/archive/2009/11/25/tools-or-people.aspx"&gt;&amp;ldquo;thought units&amp;rdquo; more so then actual code&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;These two facts seem on the surface to be at odds with each other. If software is really developed in &amp;ldquo;thought units&amp;rdquo; then why do users and sponsors have more control over the success and failure of the project then the developers?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Coding As Design&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I will now explore this question further in a series of posts. But first, we need to look at the concepts of &amp;ldquo;software design&amp;rdquo; vs. &amp;ldquo;software coding&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;Rumor has it that software is an engineering discipline and because of that, our industry adopted much of the vocabulary and process used by real engineers. This led to the creation of the both famous and infamous &amp;ldquo;waterfall methodology&amp;rdquo; where we pass through water tight stages that start with Requirement Gathering, move on to a documented Design, and then finally Construct what was designed, finishing off with Testing and then Release.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s all a bunch of posh, of course.&lt;/p&gt;
&lt;p&gt;Actually, despite it&amp;rsquo;s recent (and partially deserved) bad reputation, the waterfall methodology has a lot to recommend it. To this day, I&amp;rsquo;ve never come across any methodology, Agile or otherwise, that doesn&amp;rsquo;t owe a great debt to the Waterfall methodology. So let&amp;rsquo;s not throw out the baby with the bath water. &lt;/p&gt;
&lt;p&gt;However, what we software developers do is not really engineering in the true sense and probably never will be. This is why a strict waterfall approach, which serves so well in other engineering fields, has failed us miserably.&lt;/p&gt;
&lt;p&gt;Jack W. Reeves classic article, &lt;a href="http://www.developerdotstar.com/mag/articles/reeves_design.html"&gt;&amp;ldquo;What is Software Design?&amp;rdquo;&lt;/a&gt; addresses this directly. (&lt;a href="http://www.developerdotstar.com/mag/articles/reeves_design_main.html"&gt;See also this link, for further information&lt;/a&gt;.) What Reeves correctly points out is that what we call &amp;ldquo;Software Design&amp;rdquo; is not a complete design at all, but is rather what he calls a &amp;ldquo;high level structural design&amp;rdquo; yet we treat it as if it&amp;rsquo;s some sort of complete detailed design (even often calling it &amp;ldquo;The Detailed Design&amp;rdquo;).&lt;/p&gt;
&lt;p&gt;Now maybe you&amp;rsquo;re now thinking, &amp;ldquo;So it&amp;rsquo;s a high level design instead of a detailed design. So what, who cares?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Yet, as I&amp;rsquo;ll show in future posts, &lt;em&gt;&lt;strong&gt;this seemingly small distinction might just be the entire difference between understanding the real problems of software development and turning a blind eye to them.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;But let&amp;rsquo;s let Reeves speak for himself. He says: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;For almost 10 years I have felt that the software industry collectively misses a subtle point about the difference between developing a software design and what a software design really is. &amp;hellip; This lesson is that programming is not about building software; programming is about designing software. &lt;/p&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;p&gt;&amp;hellip;the software industry has created some false parallels with hardware engineering while missing some perfectly valid parallels. In essence, I concluded that we are not software engineers because we do not realize what a software design really is&lt;/p&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;p&gt;A program listing is a document that represents a software design. &lt;span style="text-decoration: underline;"&gt;Compilers and linkers actually build [manufacture or construct] software designs&lt;/span&gt;.&lt;/p&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;p&gt;&amp;hellip;it is cheaper and simpler to just build the design and test it than to do anything else. We do not care how many builds [constructions or manufactures] we do&amp;mdash;they cost next to nothing in terms of time.&lt;/p&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;p&gt;[The] designs will be coded in some programming language and then validated and refined via the build/test cycle.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Is Programming a Form of Engineering at All?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Reeves questions if Programmers should be called Engineers if they don&amp;rsquo;t even realize that programming isn&amp;rsquo;t &amp;ldquo;manufacturing&amp;rdquo; or &amp;ldquo;construction&amp;rdquo; at all, but is really &amp;ldquo;detailed design.&amp;rdquo; But Reeves never quite questions if programming might not be Engineering at all.&lt;/p&gt;
&lt;p&gt;But this leaves one uncomfortable. If our industry is full of programmers that do detail design and think they are doing &amp;ldquo;manufacturing&amp;rdquo; (i.e. &amp;ldquo;construction or building of a design&amp;rdquo;) how could they possibly misunderstand their own engineering discipline so severely?&lt;/p&gt;
&lt;p&gt;Agile Maven, Alistair Cockburn, suggests how by questioning the very notion of &amp;ldquo;software engineering&amp;rdquo;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Software development is not &amp;ldquo;naturally&amp;rdquo; a branch of engineering. It was proposed as being a branch of engineering in 1968 as a deliberate provocation intended to stir people to new action [Naur-Randell]. As a provocation, it succeeded. As a means for providing sound advice to busy practitioners, however, it cannot be considered a success. After 35 years of using this model, our field lacks a notable project success rate [&lt;a href="http://interactiveasp.net/blogs/softwarepsychology/archive/2009/12/11/sure-it-s-the-people-but-which-people.aspx"&gt;Standish&lt;/a&gt;], we do not find a correlation between project success and use of tidy &amp;ldquo;engineering&amp;rdquo; development processes [Cockburn 2003a], and we do not find practitioners able to derive practical advice to pressing problems on live projects. (See &lt;a href="http://alistair.cockburn.us/The+end+of+software+engineering+and+the+start+of+economic-cooperative+gaming"&gt;link&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://alistair.cockburn.us/Foundations+for+Software+Engineering"&gt;Elsewhere, Cockburn points out&lt;/a&gt; that the whole notion of &amp;ldquo;software engineering&amp;rdquo; was actually just an attempt to provoke less than obvious parallels between programming and true engineering fields. &amp;ldquo;The term &amp;lsquo;software engineering&amp;rsquo; was coined in 1968, in the NATO Conference on Software Engineering,&amp;rdquo; &lt;a href="http://alistair.cockburn.us/Foundations+for+Software+Engineering"&gt;Says Cockburn&lt;/a&gt;, &amp;ldquo;It is fascinating to read the verbatim reports of that conference and compare what those attendees were saying with what we have created since then.&amp;rdquo; &lt;/p&gt;
&lt;p&gt;He then quotes from that conferences notes on the background of the conference:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The Study Group concentrated on possible actions which would merit an international, rather than a national effort. In particular it focused its attentions on the problems of software. In late 1967 the Study Group recommended the holding of a working conference on Software Engineering. The phrase &amp;lsquo;software engineering&amp;rsquo; was deliberately chosen as being provocative, in implying the need for software manufacture to be based on the types of theoretical foundations and practical disciplines, that are traditional in the established branches of engineering.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It may well be time for us to abandon the very notion of &amp;ldquo;Software Engineering&amp;rdquo; and to base our development techniques off of some more natural match. &lt;a href="http://www.developerdotstar.com/mag/articles/reeves_design.html"&gt;Reeves agrees&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In many ways, software bears more resemblance to complex social or organic systems than to hardware.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Ramifications of Software As Design&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rethink, for a moment, how accepting &amp;ldquo;Coding&amp;rdquo; as really being &amp;ldquo;Design&amp;rdquo; changes the way we think of software development. The ramifications are substantial. &lt;/p&gt;
&lt;p&gt;First of all, it means software development, being a design activity, will always change after the requirements gathering and high level design are &amp;ldquo;completed.&amp;rdquo; We would no more expect software to merely follow the &amp;ldquo;original design&amp;rdquo; (which we now know is only a high level design without all the needed details) then we&amp;rsquo;d expect Intel to design their next generation process only at a high level and then lock it in permanently. Any attempt to do so would be met with the same sort of frustration that plagues the software industry.&lt;/p&gt;
&lt;p&gt;Another ramification is that it often makes sense to &amp;ldquo;get to coding&amp;rdquo; (i.e. detailed design) as quickly as reasonable. Contrary to popular belief, not all rushes to code are &amp;ldquo;hacking.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Indeed, any methodology that encourages &amp;ldquo;design&amp;rdquo; (i.e. high level design) to be simultaneous with &amp;ldquo;coding&amp;rdquo; (i.e. detailed design) will be superior to one that doesn&amp;rsquo;t. This explains the popularity of methodologies such as &amp;ldquo;spiral,&amp;rdquo; &amp;ldquo;rapid prototyping,&amp;rdquo; and now &amp;ldquo;agile.&amp;rdquo; &lt;/p&gt;
&lt;p&gt;Furthermore, testing software is actually a design activity as well. It&amp;rsquo;s how we validate the design details. Thus any methodology (a la Agile) that encourages testing during &amp;ldquo;coding&amp;rdquo; will be more successful than one that doesn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion: It&amp;rsquo;s All Design&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wait! Did you read that right? Is it really true that design, construction, &lt;strong&gt;and&lt;/strong&gt; testing phases are &lt;strong&gt;all&lt;/strong&gt; really just design?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.developerdotstar.com/mag/articles/reeves_design.html"&gt;As Reeves so aptly put it&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The overwhelming problem with software development is that everything is part of the design process. Coding is design, testing and debugging are part of design, and what we typically call software design is still part of design. Software may be cheap to build, but it is incredibly expensive to design.&lt;/p&gt;
&lt;/blockquote&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=5075" width="1" height="1"&gt;</description><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Human+Factors/default.aspx">Human Factors</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Software+Develoment+Psychology/default.aspx">Software Develoment Psychology</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Project+Management/default.aspx">Project Management</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Coding+As+Design/default.aspx">Coding As Design</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Design/default.aspx">Design</category><category domain="http://interactiveasp.net/blogs/softwarepsychology/archive/tags/Software+Engineering/default.aspx">Software Engineering</category></item></channel></rss>