<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">

<channel>
	<title>Building Better Software</title>
	
	<link>http://www.stellman-greene.com</link>
	<description>because for some weird reason, users want their software to work</description>
	<pubDate>Mon, 17 Nov 2008 22:59:28 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/BuildingBetterSoftware" type="application/rss+xml" /><item>
		<title>Building a great programming career</title>
		<link>http://www.stellman-greene.com/2008/10/23/building-a-great-programming-career/</link>
		<comments>http://www.stellman-greene.com/2008/10/23/building-a-great-programming-career/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 13:47:40 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
		
		<category><![CDATA[Careers]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=173</guid>
		<description><![CDATA[
Ever since Jenny and I wrote Head First C#, I&#8217;ve gotten a lot of e-mail and questions from developers just starting their careers. (I think it has to do with the fact that our book has become one of the most popular ways to learn how to program in C#.) But there&#8217;s a big topic [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.stellman-greene.com/blog/wp-content/uploads/2008/10/billy-ponders-his-career-choices.png"><img class="alignnone size-full wp-image-175" title="billy-ponders-his-career-choices" src="http://www.stellman-greene.com/blog/wp-content/uploads/2008/10/billy-ponders-his-career-choices.png" alt="" width="500" height="583" /></a></p>
<p>Ever since Jenny and I wrote <a title="Head First C#" href="http://www.headfirstlabs.com/books/hfcsharp/">Head First C#</a>, I&#8217;ve gotten a lot of e-mail and questions from developers just starting their careers. (I think it has to do with the fact that our book has become one of the most popular ways to learn how to program in C#.) But there&#8217;s a big topic that we don&#8217;t cover in the book, a topic that a lot of our readers really want to know about: how to get a better development job once you&#8217;ve finished the book and feel pretty confident with C#.</p>
<p>We get this question every now and then on the <a href="http://www.headfirstlabs.com/phpBB2/viewforum.php?f=14">book&#8217;s forum</a>. And when it comes up, I usually point people to <a href="http://www.headfirstlabs.com/phpBB2/viewtopic.php?p=11683#11683">something I posted there earlier this year</a>. I&#8217;ve gotten a lot of good feedback from people who were happy to see that advice. But I&#8217;ve been getting more e-mails from people who want a little more information. More and more people are looking to improve their job prospects, maybe because they&#8217;ve been reading headlines about the economy. So I wanted to delve a little deeper into managing your career in software development.</p>
<p>First things first. It sounds a little silly to state it outright, but it’s worth repeating: the most important thing that makes a good professional programmer stand out is his programming skill. Our readers already know this, because we said it in the intro:</p>
<blockquote><p>There’s only one way to learn to program: <strong>writing a lot of code</strong>. And that’s what you’re going to do throughout this book. Coding is a skill, and the only way to get good at it is to practice.</p></blockquote>
<p>That’s why we included a whole lot of programming puzzles and exercises throughout the whole book – not just pen-and-paper puzzles, but actual programming problems that need to be solved by writing code. One thing that a lot of junior programmers don’t realize is that programming is about more than just coding. It’s about solving problems, sometimes really tough ones. Solving the kind of problems that you come across at work is a skill, one that improves with practice. And the only way to get practice is to find problems and solve them.</p>
<p>Obviously, Jenny and I think that Head First C# is a great way to get that practice. But it’s certainly not the only way. There are all sorts of projects that you can do. And if you don’t have a project that needs to be done, try thinking of one. That’s what I did back in 1994 or so, when I wanted to learn Perl and I also wanted to learn about these newfangled web servers that everyone was talking about. So I decided to give myself a project: write a simple web server in Perl. Doing lots of projects like that (sometimes for myself, sometimes for others) made me a better programmer, and doing lots of projects will make you one, too.</p>
<p>There’s another thing that I think really helps expand your programming horizons: learn more than one language. There are a lot of peculiarities specific to any one language. On the other hand, there are many general concepts that are common to entire classes of programming languages, or all languages in general. If you’ve only worked with one language, then it’s very hard to know what’s specific to the language you know.</p>
<p>So if you’re starting to feel comfortable as a C# programmer, I definitely recommend giving yourself a Java project; if you’re a Java programmer, do a little C# coding. The two languages are very similar, but you’ll learn a lot from the differences. But if you really want to push yourself and learn something valuable, move away from managed languages and try writing a little C or C++ code. Try picking up a functional language like LISP. Personally, I love assembly languages, and I’ve had a lot of fun learning about microcontrollers over the years. Simply taking a few days to learn enough about a new language to do a simple project can be a very valuable experience for a programming starting out a career. Plus, it gives you something to talk about in an interview!</p>
<p>Coding and problem solving aren’t the only skills a professional software developer needs. There’s another necessary skill, one that’s arguably just as important: working with a team. That’s something I’ve been thinking a lot about lately (since it’s the subject of <a title="Beautiful Teams" href="http://oreilly.com/catalog/9780596518028/index.html">our next book</a>): what makes a good team, and what programming team members and leaders can do to work better and build better software. There are so many facets to working with project teams, from understanding and interacting with different personalities to finding and fixing roadblocks that keep the work from getting done. And while there are certainly some great books on project teams and teamwork, a lot of them probably won’t make all that much sense to someone who’s completely green.</p>
<p>This used to be a catch-22: you need experience on a software team to get a job working on one, but you can’t get a job working on a software team without experience. But there’s a solution to the problem now that wasn’t available when I was first starting out. There are plenty of open source projects looking for contributors, and even a new developer can make a valuable contribution.</p>
<p>Even if you just volunteer as a tester, or try your hand at fixing a few bugs, you’ll learn a lot about how people work together on software teams. In fact, you can learn a lot just by lurking in the forums and learning how the project is set up. What kind of version control system does it use? Can you figure out how to check out the code and get it to compile? Do they use a continuous integration system like <a href="http://cruisecontrol.sourceforge.net/">CruiseControl </a>to automatically do periodic builds? How do the team members <a href="http://www.stellman-greene.com/2008/09/20/how-to-hold-a-more-effective-code-review/">review each others’ code</a>?</p>
<p>Before you start working on an open source team, I highly recommend reading Karl Fogel’s excellent book, <a title="Producing Open Source Software" href="http://producingoss.com/">Producing Open Source Software</a>. You can buy it from O’Reilly, but you can also read it for free on the book’s website. It will teach you a lot about both the mechanics and culture of open source teams. (A little disclosure: I was a technical reviewer for the book, and was really impressed with it when I read it.)</p>
<p>I originally meant this to be advice for people looking to start a programming career. But reading back over this, I think that veteran programmers could learn from it too. Of course, if you’re looking for a programming job, clearly there’s no substitute for actually putting years working as a professional developer. But doing these things can help push your career forward, even if you’re already partway through it.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/429876389" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2008/10/23/building-a-great-programming-career/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to hold a more effective code review</title>
		<link>http://www.stellman-greene.com/2008/09/20/how-to-hold-a-more-effective-code-review/</link>
		<comments>http://www.stellman-greene.com/2008/09/20/how-to-hold-a-more-effective-code-review/#comments</comments>
		<pubDate>Sat, 20 Sep 2008 18:45:21 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<category><![CDATA[Quality]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=158</guid>
		<description><![CDATA[
A lot of programmers feel like being asked to go to a code review is like being told by mom to eat our veggies. We&#8217;ll complain about it, and even if we do eventually swallow them we&#8217;re determined not to enjoy them.
It&#8217;s something I&#8217;ve seen over and over again: programmers groaning about having to go [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.stellman-greene.com/blog/wp-content/uploads/2008/09/sally-code-review.png"><img class="alignnone size-full wp-image-157" title="Sally learns an important lesson about code reviews" src="http://www.stellman-greene.com/blog/wp-content/uploads/2008/09/sally-code-review.png" alt="" width="500" height="428" /></a></p>
<p>A lot of programmers feel like being asked to go to a code review is like being told by mom to eat our veggies. We&#8217;ll complain about it, and even if we do eventually swallow them we&#8217;re determined not to enjoy them.</p>
<p>It&#8217;s something I&#8217;ve seen over and over again: programmers groaning about having to go to a code review, usually because someone gets some big idea about making things better, and decides this is how you do it. There&#8217;s sometimes a little nervous joking at the beginning of the meeting about how nobody really wants to be there. And after it&#8217;s done, a lot of us get the distinct feeling that it was a waste of time.</p>
<p>The thing is, code reviews can be a really good thing. And not only that, they don&#8217;t have to be a chore. If you do them right, people on the team can start to appreciate them and even - heaven forbid - <em>enjoy</em> them.</p>
<p>So how do we make code reviews more palatable? We need to think about what motivates us as programmers. Programmers love to code. We love building things, and we love solving problems. But we hate anything that seems bureaucratic or tedious, and we definitely hate meetings. But most of all, we hate being in uncomfortable social situations that require us to confront people face-to-face. We&#8217;re not alone in that; most people hate situations like that.</p>
<p>I think that&#8217;s a pretty big part of why programmers intuitively dislike code reviews. It&#8217;s not that we&#8217;re afraid of putting our work out there for our peers to see. That&#8217;s actually something we look forward to: we love to show off code that we&#8217;ve worked so hard on, and we definitely appreciate the input from the people around us. But it&#8217;s almost never the person whose code is being reviewed who groans about it. No, it&#8217;s usually the people who are asked to attend the review. And I think I know why: it&#8217;s because we don&#8217;t like being asked to criticize the work of others, openly and without hesitation, for the good of the team. I think we naturally feel uncomfortable putting someone else in the position of having to openly confront their errors, because it&#8217;s so easy to imagine ourselves in that same position.</p>
<p>And that may be the secret to holding code reviews that people <em>actually look forward to attending</em>: make it about helping make the code better, not criticizing and finding its flaws. If you can come up with a way to avoid bitter arguments about tiny details and stubbornly-held opinions, and instead concentrate on helping someone improve his or her code, then people will stop thinking about code reviews as an uncomfortable meeting and start thing about them as a way to build better software.</p>
<p>That sounds like a tall order. How do you do it?</p>
<p>Well, you start out by thinking about one of the best things that can happen in a code review, something that I&#8217;ve seen many times. It usually happens about two thirds of the way through the review, about the time when the first signs of meeting fatigue are starting to set in. Someone points out another problem with the code, and a conversation starts up about an aspect of it that nobody really thought of. Uh-oh &#8212; it&#8217;s a bug, a particularly nasty one that. Then everyone kind of looks at each other with a weird mixture of relief and disgust, because we found a bug that a) definitely would have made it into production, and b) would have taken hours or days to track down and fix.</p>
<p>I&#8217;ve said this many times before: programmers are very practical people, especially when it comes to our own time. If something will save us time down the road, we&#8217;ll definitely do it. If you can show a programmer that a tool or technique (like a code review) saves more time than it costs, that&#8217;s a great way to get him or her to start thinking positively about it.</p>
<p>That doesn&#8217;t change the fact that a lot of people get nervous about code reviews, even people who have done them a bunch of times. So I spent a little time thinking of advice I&#8217;ve given about code reviews over the years. Some of this is pretty standard code review stuff, but I think it&#8217;s worth repeating because people have so many different views on how to do code reviews effectively. And I think that if you think about them, and get other people on your team thinking the same way, it could definitely help you hold effective code reviews.</p>
<p>So here&#8217;s some advice about holding better code reviews &#8212; you can think of them as code review tools (or even code review best practices, although I&#8217;m not a huge fan of that term) that can make your software better:</p>
<ul>
<li>First things first: there are a lot of different ways to do a code review. Some people like to follow a very strict process. Personally, I like to keep them informal; the more it seems like an everyday conversation, the more work we actually get done.</li>
</ul>
<ul>
<li>It&#8217;s important to keep the meeting to under two hours &#8212; any more than that and meeting fatigue sets in. Most code review teams can handle between 200 and 400 lines of code in a two-hour review meeting. (Your mileage may vary.)</li>
</ul>
<ul>
<li>Don&#8217;t forget to distribute the code before the review, and make sure you give everyone enough time to actually look through it. Send around a PDF of the code (<a href="http://www.gnu.org/software/a2ps/">a2ps</a> is a good way to make it readable, and it&#8217;s got stylesheets for almost every language). Also make sure that everyone also has access to the source, and that they know how to build and run it. Sometimes it&#8217;s a lot easier to prepare for a code review if you can actually debug your way through the code.</li>
</ul>
<ul>
<li>Make sure that everyone knows you appreciate their time. It&#8217;s easy to forget that, but it helps the team see the review as a useful tool and not just another boring meeting. Remember, you&#8217;re pulling half a dozen or more people into a room for two hours, plus preparation time &#8212; that&#8217;s the equivalent of taking a top developer off of all projects for two days. That&#8217;s also why it&#8217;s very important to choose a good block of code to review. Choose one that&#8217;s inherently risky: a difficult algorithm, code from a library that many other people depend on, an interface a lot of people will use, a particularly nasty bit of spaghetti code.</li>
</ul>
<ul>
<li>Code reviews and <a href="http://refactoring.com/">refactoring</a> work really well together. Look for opportunities to extract methods, rename variables, replace literals with constants, etc.</li>
</ul>
<ul>
<li>Pay attention to <a href="http://en.wikipedia.org/wiki/Object-oriented_programming#Fundamental_concepts">OOP principles</a>, especially encapsulation. Improving encapsulation is an easy and effective way to prevent bugs.</li>
</ul>
<ul>
<li>The code review isn&#8217;t just about bringing up issues &#8212; it should also be about giving some indication of how to resolve those issues. Ideally, the programmer whose code is being reviewed should be able to read through the results of the review and very quickly implement the fixes, because in the meeting we wrote down exactly what needs to be fixed and how to fix it. (We don&#8217;t actually have to write down lines of code, of course &#8212; just enough information so it&#8217;s clear what to do.) A good way to do this is to make the goal of the meeting to be to <strong>produce a log</strong>, or a list of fixes that need to be made to the code.</li>
</ul>
<ul>
<li>Instead of storing the log in a spreadsheet, Word document, or wiki page (I&#8217;ve done all three), try having the moderator put the results of the review directly into the code as comments (which includes an easily searchable unique string like &#8216;// %%TODO: CODE REVIEW 8/28/08%%&#8217;, so the programmer can find them all). The results of the review meeting can be e-mailed out a link to a diff report in the source repository. When the programmer goes back to update the code, he or she can alter the comments to make sure they make sense in context &#8212; but they can stay in the code because they&#8217;ll make more sense, and it&#8217;ll be clear why the code is the way it is if someone is maintaining it in the future.</li>
</ul>
<ul>
<li>A good way to focus the discussion is to guide the conversation away from arguments about coding in general, and towards what to write down in the log to resolve the current issue. Make a good effort to figure out how to resolve the issue: most can be resolved in the meeting. Any issue that can&#8217;t be resolved in a reasonable amount of time gets added to the log as an open issue.</li>
</ul>
<ul>
<li>I&#8217;ve always gotten a lot of mileage out of using a moderator. The moderator&#8217;s job is to keep track of the discussion, and keep the discussion on track. If people are getting off onto a tangent that won&#8217;t benefit the code, or if they&#8217;ve gotten into a disagreement where there are merits on both sides of the issue and it clearly won&#8217;t be resolved, the moderator should suggest that we log it as an open issue and move on. You can always follow up later and resolve the issue.</li>
</ul>
<ul>
<li>Some people get very strict about making sure that the moderator stays at arm&#8217;s length, and doesn&#8217;t get involved with the review. Personally, I think code reviews are hard enough without imposing arbitrary rules like that (because we&#8217;re laying someone&#8217;s code bare and dissecting it, which can be difficult for anyone who&#8217;s not used to it). We&#8217;re all adults here, and we can trust any of us not to &#8220;abuse&#8221; a moderator role. If the moderator has something to say, he or she should say it. If it&#8217;s easier, replace &#8220;moderator&#8221; with &#8220;note-taker&#8221; or something like that.</li>
</ul>
<ul>
<li>Don&#8217;t be pedantic, and try to avoid theoretical discussions. It&#8217;s really easy to get bogged down with a discussion that doesn&#8217;t go anywhere about whether this variable declaration should be here or there, whether this type of structure or that is slightly more efficient, if we could do something better in theory if we scrapped a large amount of code and rewrote it. If a discussion isn&#8217;t going to directly lead to a change, even if it&#8217;s an interesting topic, note it in the log as an open issue and move on. And <strong>definitely don&#8217;t point out spelling errors</strong><em>.</em> A lot of grate programmers are lousy spelers.</li>
</ul>
<ul>
<li>Make sure variable names make sense, but don&#8217;t worry about naming conventions. Some people love underscores in front of parameters, some people hate them. I&#8217;m sure you can come up with at least three different &#8220;official&#8221; conventions for any programming language. There are few things less useful during a code review than an argument over whether to use <a href="http://en.wikipedia.org/wiki/CamelCase">PascalCase or camelCase</a>.</li>
</ul>
<ul>
<li>One way people like to do reviews is to have people &#8220;read&#8221; the code - interpret it out loud. I&#8217;ve had some success with going around the table and having people take turns &#8220;reading&#8221; each chunk of code. If there&#8217;s a chunk that is difficult to &#8220;read&#8221;, it&#8217;s not clear enough and is a good candidate for refactoring.</li>
</ul>
<ul>
<li>Before you distribute the code to the team, run it through a static code analyzer (like <a href="http://findbugs.sourceforge.net/">FindBugs</a> or <a href="http://msdn.microsoft.com/en-us/library/bb429476.aspx">FxCop</a>) and fix issues that are found. There&#8217;s no need to waste discussion time on problems that a tool can catch and log for us.</li>
</ul>
<ul>
<li>I&#8217;ve had a lot of success with a kind of review called a &#8220;high impact inspection&#8221; (that&#8217;s a term that was developed at HP about fifteen years ago). Basically, it boils down to having everyone do the code review independently and e-mailing their issues to a moderator. The moderator puts the issues into one big list, sends them back out to everyone, and then the review meeting itself is focused on just going through those issues. Jenny and I developed a <a title="Inspections for distributed teams" href="http://www.stellman-greene.com/aspm/content/view/25/40/">code review process similar to high impact inspections</a> to let us hold inspections in teams outsourced to India (where time zone differences make it very difficult to regularly schedule two-hour meetings). We ran it a bunch of times, and it worked really well.</li>
</ul>
<p>When Jenny and I were writing the section on code review techniques in our first book,<a title="Applied Software Project Management" href="http://www.stellman-greene.com/aspm"> Applied Software Project Management</a>, we came up with <a title="Code reviews" href="http://www.stellman-greene.com/code_reviews">a checklist of things that you should look for during a code review</a>. That should give you a good starting point for coming up with a good review.</p>
<p>Good luck with your code reviews! If you end up with a good code review success (or failure!) story, I&#8217;d love to hear about it.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/398308286" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2008/09/20/how-to-hold-a-more-effective-code-review/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Beautiful Teams coming into the home stretch</title>
		<link>http://www.stellman-greene.com/2008/09/07/beautiful-teams-coming-into-the-home-stretch/</link>
		<comments>http://www.stellman-greene.com/2008/09/07/beautiful-teams-coming-into-the-home-stretch/#comments</comments>
		<pubDate>Sun, 07 Sep 2008 17:26:59 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=149</guid>
		<description><![CDATA[
We&#8217;ve gotten more than a few e-mails from readers wondering where we went. First of all, don&#8217;t worry - Jenny and I are still around! We&#8217;ve just been working overtime on our latest book, Beautiful Teams (here&#8217;s the Amazon page for it). It&#8217;s coming out well, and we&#8217;re really excited about it.
Beautiful Teams is a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://oreilly.com/catalog/9780596518028/index.html"><img class="size-full wp-image-150 alignnone" title="Beautiful Teams Cover" src="http://www.stellman-greene.com/blog/wp-content/uploads/2008/09/zebras_been_quiet_small.png" alt="Beautiful Teams cover" width="500" height="530" /></a></p>
<p>We&#8217;ve gotten more than a few e-mails from readers wondering where we went. First of all, don&#8217;t worry - Jenny and I are still around! We&#8217;ve just been working overtime on our latest book, <a title="Beautiful Teams" href="http://oreilly.com/catalog/9780596518028/index.html">Beautiful Teams</a> (here&#8217;s the <a href="http://www.amazon.com/Beautiful-Teams/dp/0596518021/">Amazon page for it</a>). It&#8217;s coming out well, and we&#8217;re really excited about it.</p>
<p>Beautiful Teams is a new kind of book for us, because it&#8217;s the first time we&#8217;ve done more editing than writing. We brought in a great team of guest writers and thinkers, people we really respect and whose work we&#8217;ve been big fans of over the years: Scott Berkun, Karl Wiegers, Karl Fogel, Johanna Rothman, Barry Boehm, Steve McConnell, Grady Booch, James Grenning, Cory Doctorow and a whole lot more. A good portion of the book will be stories from their careers, which was a big departure for us: it was as much about creative writing (helping our authors make the stories fun to read) as it was about software engineering. And in addition to the stories, Jenny and I have been doing interviews with some of these great thinkers, and I&#8217;m extremely happy about how they&#8217;re coming out. We&#8217;ve put a lot of effort into finding people who are thoughtful and knowledgeable, but also really good at talking about what they do and how they think. All in all, it should be a very unique and fun to read book.</p>
<p>Oh, there&#8217;s one more thing I want to tell you about the project - actually, my favorite part about it. We&#8217;re donating almost all of the royalties to <a title="PlayPumps International" href="http://www.playpumps.org">PlayPumps International</a>, a truly wonderful charity that digs wells to deliver clean drinking water to rural schools and villages in sub-Saharan Africa. If you haven&#8217;t heard of them, take five minutes and watch <a title="Frontline on PlayPumps International" href="http://www.pbs.org/frontlineworld/rough/2005/10/south_africa_th.html">this piece that Frontline did on them</a>.</p>
<p>I&#8217;m sure we&#8217;ll give you plenty more details about it as time goes on. In the meantime, hopefully we&#8217;ll be able to post a little more here for you!</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/385927809" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2008/09/07/beautiful-teams-coming-into-the-home-stretch/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Unit testing and the narrowly averted Citicorp Center disaster</title>
		<link>http://www.stellman-greene.com/2008/05/24/unit-testing-and-the-narrowly-averted-citicorp-center-disaster/</link>
		<comments>http://www.stellman-greene.com/2008/05/24/unit-testing-and-the-narrowly-averted-citicorp-center-disaster/#comments</comments>
		<pubDate>Sat, 24 May 2008 21:18:33 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
		
		<category><![CDATA[Quality]]></category>

		<category><![CDATA[Test-driven development]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=145</guid>
		<description><![CDATA[
I was working on a project earlier today. Now, typically I always do test-driven development, where I&#8217;ll build unit tests that verify each class first and then build the code for the class after the tests are done. But once in a while, I&#8217;ll do a small, quick and dirty project, and I&#8217;ll think to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.stellman-greene.com/blog/wp-content/uploads/2008/05/it-was-almost-a-disaster.png"><img class="alignnone size-full wp-image-147" title="Citigroup Center" src="http://www.stellman-greene.com/blog/wp-content/uploads/2008/05/it-was-almost-a-disaster.png" alt="It was almost a disaster..." width="500" height="592" /></a></p>
<p>I was working on a project earlier today. Now, typically I always do test-driven development, where I&#8217;ll build <a href="http://www.stellman-greene.com/images/stories/Library/Refactoring%20and%20Unit%20Testing.pdf">unit tests</a> that verify each class first and then build the code for the class after the tests are done. But once in a while, I&#8217;ll do a small, quick and dirty project, and I&#8217;ll think to myself, &#8220;Do I really need to write unit tests?&#8221; And then, as I start building it, it&#8217;s obvious: yes, I do. It always comes at a point where I&#8217;ve added one or two classes, and I realize that I have no idea if those classes actually work. I&#8217;ll realize that I&#8217;ve written a whole bunch of code, and I haven&#8217;t tested any of it. And that starts making me nervous. So I turn around and start writing unit tests for the classes I&#8217;ve written so far&#8230; and I always find bugs. This time was no exception.</p>
<p>This time, for some reason, that exercise reminded me of the story of the nearly disastrous Citicorp Center building.</p>
<p>Citicorp Center was one of the last skyscrapers built in the New York City skyscraper and housing boom in the 1960s and 1970s. A lot of New Yorkers today probably don&#8217;t realize that it was actually one of the more interesting feats of structural engineering at the time. The building was built on a site occupied by St. Peter&#8217;s, a turn-of-the-century Lutheran church that would have to be demolished to make way for the skyscraper. The church agreed to let Citigroup demolish it, on one condition: that it be rebuilt on the same site.</p>
<p>The engineer, Bill LeMessurier, came up with an ingenious plan: put the base of the building up on columns, and cantilever the edge of the building over the church. Take a <a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;geocode=&amp;sll=40.677012,-73.975573&amp;sspn=0.007567,0.009935&amp;ie=UTF8&amp;ll=40.760895,-73.970298&amp;spn=0.003779,0.00766&amp;z=18&amp;layer=c&amp;cbll=40.759,-73.97054&amp;panoid=gSo1IjErJ-yc7qDPNK-fyA&amp;cbp=2,169.14704424110687,,0,-13.5457675113405">look at it on Google Maps&#8217; Street View</a> &#8212; you can pan up, navigate around, and see just how much of a structural challenge this was.</p>
<p>The building was completed in 1977. A year later, LeMessurier got a call from an engineering student studying the Citicorp building. <a href="http://www.duke.edu/~hpgavin/ce131/citicorp1.htm">Joe Morgenstern&#8217;s excellent 1995 New Yorker article about the building</a> describes it like this:</p>
<blockquote><p>The student wondered about the columns&#8211;there are four&#8211;that held the building up. According to his professor, LeMessurier had put them in the wrong place.</p>
<p>&#8220;I was very nice to this young man,&#8221; LeMessurier recalls. &#8220;But I said, &#8216;Listen, I want you to tell your teacher that he doesn&#8217;t know what the hell he&#8217;s talking about, because he doesn&#8217;t know the problem that had to be solved.&#8217; I promised to call back after my meeting and explain the whole thing.&#8221;</p></blockquote>
<p>Unfortunately, LeMessurier was mistaken, and in the article he describes the problem in all its gory detail. It&#8217;s a fascinating story, and I definitely recommend reading it &#8212; it&#8217;s a great example of how engineering projects can go wrong. It&#8217;ll probably seem eerily familiar to most experienced developers: after a project is done, someone uncovers something that seems to be a tiny snag, which turns out to be disastrous and requires a huge amount of rework.</p>
<p>Rework in a building isn&#8217;t pretty. In this case, it required a team to go through and weld steel plates over hundreds of bolted joints throughout the building, all over the weekends so nobody would find out and panic.</p>
<p>But what I found especially interesting about the story had to do with testing the building:</p>
<blockquote><p>On Tuesday morning, August 8th, the public-affairs department of Citibank, Citicorp&#8217;s chief subsidiary, put out the long delayed press release. In language as bland as a loan officer&#8217;s wardrobe, the three-paragraph document said unnamed &#8220;engineers who designed the building&#8221; had recommended that &#8220;certain of the connections in Citicorp Center&#8217;s wind bracing system be strengthened through additional welding.&#8221; The engineers, the press release added, &#8220;have assured us that there is no danger.&#8221; When DeFord expanded on the handout in interviews, he portrayed the bank as a corporate citizen of exemplary caution&#8211;&#8221;We wear both belts and suspenders here,&#8221; he told a reporter for the News&#8211;that had decided on the welds as soon as it learned of new data based on dynamic-wind tests conducted at the University of Western Ontario.</p>
<p>There was some truth in all this. During LeMessurier&#8217;s recent trip to Canada, one of Alan Davenport&#8217;s assistants had mentioned to him that probable wind velocities might be slightly higher, on a statistical basis, than predicted in 1973, during the original tests for Citicorp Center. At the time, LeMessurier viewed this piece of information as one more nail in the coffin of his career, but later, recognizing it as a blessing in disguise, he passed it on to Citicorp as the possible basis of a cover story for the press and for tenants in the building.</p></blockquote>
<p>Tests were at the center of this whole situation. It turned out that insufficient testing was done at the beginning of the project. Now, more tests were used to figure out how to handle the situation. Tests got them into the situation, and tests got them out.</p>
<p>So what does this have to do with software?</p>
<p>I have a hunch that anyone who&#8217;s done a lot of test-driven development will see the relevance pretty quickly. The quality of your software &#8212; whether it does its job or fails dramatically &#8212; depends on the quality of your tests. It&#8217;s easy to think that you&#8217;ve done enough testing, but once in a while your tests uncover a serious problem that would be painful &#8212; even disastrous &#8212; to repair. And as LeMessurier found, it&#8217;s easy to run tests that give a false sense of security because they&#8217;re based on faulty assumptions.</p>
<p>I&#8217;ve had arguments many times over my career with various people about how much testing to do. I can&#8217;t say that I&#8217;ve always handled them perfectly, but I have found a tactic that works. I point to the software and ask which of the features doesn&#8217;t have to work properly. But it&#8217;s good to remind myself how easy it is to question the importance of tests. It&#8217;s so easy, in fact, that I did it myself earlier today. And that&#8217;s why it&#8217;s important to have examples like Citicorp Center to remind us of how important testing can be.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/297400139" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2008/05/24/unit-testing-and-the-narrowly-averted-citicorp-center-disaster/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Writing about software</title>
		<link>http://www.stellman-greene.com/2008/05/09/writing-about-software/</link>
		<comments>http://www.stellman-greene.com/2008/05/09/writing-about-software/#comments</comments>
		<pubDate>Fri, 09 May 2008 15:08:42 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=143</guid>
		<description><![CDATA[
Jenny and I are at the tail end of our fourth book, Beautiful Teams, and it&#8217;s really coming out well. We&#8217;ve put together a team of authors who&#8217;ve got some really fascinating stories about building software. Each of them has written a really compelling story from his or her past career. We&#8217;ve got people writing [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-144" title="All the girls love Beautiful Teams" src="http://www.stellman-greene.com/blog/wp-content/uploads/2008/05/all-the-girls.png" alt="" width="500" height="512" /></p>
<p>Jenny and I are at the tail end of our fourth book, <em><a href="http://www.amazon.com/Beautiful-Teams/dp/0596518021/">Beautiful Teams</a></em>, and it&#8217;s really coming out well. We&#8217;ve put together a team of authors who&#8217;ve got some really fascinating stories about building software. Each of them has written a really compelling story from his or her past career. We&#8217;ve got people writing about all sorts of industries, and running into (and, in most cases, overcoming) a lot of different kinds of problems. All together, the collection is starting to paint a picture of what it&#8217;s like working in software.</p>
<p>One thing that I thought would be hard about this project was the coaching. These are software people, after all, not creative writing people. We have a few veteran authors on the team, but we also have a lot of people who hadn&#8217;t really done a lot of writing. And the authors themselves, in a lot of cases, were just as apprehensive as we were. It seemed like most of the people we worked with knew they had a good story to tell, but were worried about whether or not they could really tell it well enough.</p>
<p>It turned out that we didn&#8217;t have anything to worry about. I was very impressed with how well everyone &#8220;got it&#8221;. We put a lot of effort into selecting people who had a good story to tell, and it only took a small amount of guidance to help the authors tell them. Even people who hadn&#8217;t really done a lot of writing before really took the time to flesh out the characters, give us all the conflict, and really draw out the stories to make them fun to read.</p>
<p>Another thing that Jenny and I really wanted to do with <em>Beautiful Teams</em> was to put storytelling ahead of teaching. There are plenty of books that will teach you about building software. And we knew that there would be a lot of good lessons about software in the book. But our goal wasn&#8217;t a book that you could pick up and suddenly do your job better. The goal was to put you in the shoes of someone who&#8217;d been there before. Or, even better, we wanted to put you in the shoes of someone who was in a really interesting situation. Or a really bad, or even unimaginable, situation. We wanted to show you teams that were great to work on, and teams that, despite being awful, managed to muddle through. Or didn&#8217;t.</p>
<p>We&#8217;d never done anything like this project before, and we when we started it, we weren&#8217;t sure if we&#8217;d end up with engaging stories, or if we&#8217;d just get people writing about their boring projects from work. We were lucky. It turns out that on most memorable software projects, there&#8217;s some interesting drama: a bad boss, a deceitful or weird coworker, a serious and last-minute crisis that needs to be dealt with, a loud and unreasonable client. And it&#8217;s those very things which made the projects interesting that make the stories interesting to read.</p>
<p>At the beginning of the project, I was worried that people who wrote good software might not necessarily be good authors. But they really took to telling their stories. A lot of the authors told us that it was actually cathartic to get their stories on paper, and most of them really seemed to enjoy doing the project.</p>
<p>To me, the best part of the project is the fact we&#8217;re having royalties from the book donated to <a href="http://playpumps.org">PlayPumps International</a>. It&#8217;s a great charity that came up with a novel way to provide clean drinking water to rural villages and schools in South Africa. If you haven&#8217;t heard of them, I highly recommend watching <a href="http://www.pbs.org/frontlineworld/rough/2005/10/south_africa_th.html">this Frontline segment about them</a>.</p>
<p>I&#8217;ll post again once the project is done with details about the stories. (We&#8217;re still getting the last ones in, so it&#8217;ll have to be a surprise for now!)</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/288504092" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2008/05/09/writing-about-software/feed/</wfw:commentRss>
		</item>
		<item>
		<title>It’ll take about three weeks…</title>
		<link>http://www.stellman-greene.com/2008/03/20/itll-take-about-three-weeks/</link>
		<comments>http://www.stellman-greene.com/2008/03/20/itll-take-about-three-weeks/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 20:06:10 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
		
		<category><![CDATA[Estimation]]></category>

		<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2008/03/20/itll-take-about-three-weeks/</guid>
		<description><![CDATA[If you&#8217;ve been reading our posts here, you probably noticed that we like to give our &#8220;Why Projects Fail&#8221; talk. (If you&#8217;re curious, here&#8217;s a link to the slides [PDF].) One reason we really like it is that it seems to go over well with a lot of different audiences, from hard-core architects and programmers [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve been reading our posts here, you probably noticed that we like to give our &#8220;Why Projects Fail&#8221; talk. (If you&#8217;re curious, <a href="http://www.stellman-greene.com/blog/wp-content/uploads/2008/01/why-projects-fail.pdf">here&#8217;s a link to the slides [PDF]</a>.) One reason we really like it is that it seems to go over well with a lot of different audiences, from hard-core architects and programmers to grey-haired project managers. It&#8217;s a pretty informal talk &#8212; we interrupt each other and go off on the occasional tangent, which keeps the mood pretty light. And that&#8217;s always a good thing, especially when you&#8217;re doing a talk to people at a PMI meeting or a user group who just spent the day at work and don&#8217;t need to sit through yet another boring slide presentation.</p>
<p>I was thinking about that presentation yesterday, after getting off the phone with a manager at a company that wants to hire us to do <a href="http://www.stellman-greene.com/training">software estimation training</a> for their programmers. One problem that they&#8217;re having is a pretty common one. Their programmers, testers, and even project managers seem reluctant to give estimates. That reminded me of this slide from the talk:</p>
<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2008/03/why-projects-fail-team-slide.png" alt="Things the team should’ve done slide" /></p>
<p>When we get to this slide in the talk, I usually say something like this:</p>
<blockquote><p>There&#8217;s something we call the &#8220;about three weeks&#8221; problem. Have you ever noticed that when you ask a programmer how long it&#8217;ll take to do something, it&#8217;s always going to take &#8220;about three weeks&#8221;? I&#8217;ve done it myself many times over the last fifteen years or so. How long to build a simple website to do a few calculations? About three weeks. What about a utility that will automate some file operations and generate a few reports? About three weeks. A new feature for our core product? Sure, it&#8217;ll take about three weeks. See, the problem is that three weeks seems like a long enough time to get something significant done. And if you think for thirty seconds about pretty much any programming project, you can do enough hand-waving and ignore enough details so that it&#8217;ll seem to fit into about three weeks.</p></blockquote>
<p>What does this have to do with why programmers are so reluctant to give estimates?</p>
<p>There are many reasons for this, more than I&#8217;ll go into here. But a big one might just be because we&#8217;ve all quoted &#8220;about three weeks&#8221; for a programming project that ends up taking a whole lot longer than that, and we never want to be stuck in that situation again. So after we&#8217;ve been burned enough, we just stop giving estimates. I was at a job a few years ago, sitting at a full conference table with a dozen developers. The CTO &#8212; an abrasive guy who clearly went home every evening to lift weights, and spent most of his day yelling at the people who reported to him &#8212; growled an &#8220;order&#8221; at the team, demanding an estimate. Everyone at the table knew that they&#8217;d be yelled at individually, threatened with dismissal, and generally made miserable if they didn&#8217;t come up with an estimate. Yet nobody looked up and volunteered anything. Eventually a junior guy in the back cleared his throat, and in almost a whisper he said, &#8220;I&#8217;m not sure about the rest of it, but I think my piece will take about three weeks.&#8221;</p>
<p>And there it is. Nobody wants to go on the record and say how long they think it&#8217;ll take to do a job. We all know it&#8217;ll take as long as it takes. If the estimate is right, then there&#8217;s no great reward or recognition. But if the estimate is wrong, then we&#8217;re on the hook for it, and we get to look forward to status meetings where we get to take the blame for whatever terrible consequence happened because the project was late.</p>
<p>So what do we do about it?</p>
<p>Jenny and I put a lot of thought into this problem when we were working on our first book, <a href="http://www.stellman-greene.com/aspm" title="Applied Software Project Management">Applied Software Project Management</a>. It turns out that there&#8217;s a really effective way to get a good idea of how long the software will take <strong>without</strong> putting any one person on the hook, and it&#8217;s our favorite way of generating estimates. It&#8217;s called <a href="http://www.stellman-greene.com/delphi" title="Wideband Delphi">Wideband Delphi</a>, and we talk a lot about it in the Estimation chapter in the book (which you can <a href="http://www.stellman-greene.com/chapter3">download for free [PDF]</a>). It&#8217;s a straightforward technique &#8212; it just takes two two-hour meetings to nail down estimates for even a large project. It&#8217;s very iterative and highly interactive, which helps the team all come to a consensus and agree on the final result. It&#8217;s collaborative, so that no one person is solely responsible &#8212; usually, everyone ends up buying into the final numbers. And best of all, it doesn&#8217;t require any special expertise beyond what you need to actually do the project.</p>
<p>My favorite part about Wideband Delphi is that it&#8217;s really focused on assumptions. That&#8217;s another thing I like to talk about in the &#8220;Why Projects Fail&#8221; talk. If you think that building a particular program is going to take nine weeks, but I think it&#8217;s going to take four weeks, we usually aren&#8217;t disagreeing on how long it&#8217;ll take to do the task. Usually, we&#8217;re disagreeing on some basic assumption about the task. For example, you might think that we&#8217;ll be building a big GUI with printing support, while I might think that it&#8217;s just going to be a console application. That means that we can assume for the sake of the estimate that we&#8217;ll either build a GUI or build a console application, and we&#8217;ll write down that assumption. That way, if it turns out to be incorrect, we&#8217;ll know exactly why the estimate was wrong&#8230; and if someone in a meeting later wants to blame us, we can point to that assumption and give a good reason for the delay. (That&#8217;s why Delphi has two meetings: the first meeting is mostly taken up with a discussion of those assumptions.)</p>
<p>One nice thing about Delphi is that it&#8217;s not some esoteric, theoretical thing. Both Jenny and I have done this in the real world, many times, with all sorts of software teams. Delphi really does work, and it actually does a good job of helping team come up with numbers. And those numbers are pretty accurate, at least on the projects I&#8217;ve worked on. If you&#8217;re having trouble convincing your reluctant team to come up with an estimate, I definitely recommend giving Delphi a shot.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/288504093" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2008/03/20/itll-take-about-three-weeks/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Head First C# - the top-selling C# book on Amazon!</title>
		<link>http://www.stellman-greene.com/2008/03/14/head-first-c-the-top-selling-c-book-on-amazon/</link>
		<comments>http://www.stellman-greene.com/2008/03/14/head-first-c-the-top-selling-c-book-on-amazon/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 18:36:34 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2008/03/14/head-first-c-the-top-selling-c-book-on-amazon/</guid>
		<description><![CDATA[
Remember back in January, when Tim O&#8217;Reilly blogged about great Bookscan numbers for Head First C#?
Well, Bookscan numbers don&#8217;t always match what you see on Amazon.com. Our intrepid little book has been clawing its way up the Amazon.com sales ranks. It was in the #2 position on the C# bestseller list for the last month. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2008/03/c_-bestsellers-14-mar-2008.png" alt="C# bestsellers on Amazon 14-Mar-2008" /></p>
<p>Remember back in January, when Tim O&#8217;Reilly <a href="http://www.stellman-greene.com/2008/01/11/whoa/">blogged about great Bookscan numbers for Head First C#</a>?</p>
<p>Well, Bookscan numbers don&#8217;t always match what you see on Amazon.com. Our intrepid little book has been clawing its way up the Amazon.com sales ranks. It was in the #2 position on the C# bestseller list for the last month. But when I checked a few minutes ago, it was at the top of the list!</p>
<p>This is a huge deal for us &#8212; it&#8217;s definitely a high-water mark for the book. And what&#8217;s really cool is that Head First C# is picking up steam. Its Amazon sales rank was under 500 all day yesterday, which means that it was one of the top 500 books sold by Amazon.com. (Not the top 500 tech books &#8212; the top 500 books.) Typically, books sell the most in the first few months, and Head First C# had a strong start out of the gate. But one of our friends at O&#8217;Reilly let us know a few days ago that we&#8217;re selling better than ever (when you discount the backorders that had to be filled, which always skew the first month&#8217;s results).</p>
<p>And <a href="http://www.amazon.com/Head-First-PMP/dp/0596102348/">Head First PMP</a> is picking up steam, too! It&#8217;s been holding onto the #2 spot for PMP exam prep books, and it&#8217;s really been gaining over the last few months.</p>
<p>Now, Jenny and I aren&#8217;t all about sales. But we are all about helping people learn, and we see these numbers as a real win.</p>
<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2008/03/full-page-14-mar-2008.png" alt="Head First C# details on Amazon 14-Mar-2008" /></p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/288504094" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2008/03/14/head-first-c-the-top-selling-c-book-on-amazon/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Best readers ever!</title>
		<link>http://www.stellman-greene.com/2008/02/25/best-readers-ever/</link>
		<comments>http://www.stellman-greene.com/2008/02/25/best-readers-ever/#comments</comments>
		<pubDate>Mon, 25 Feb 2008 23:26:56 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2008/02/25/best-readers-ever/</guid>
		<description><![CDATA[
Check out this post on the Head First C# forum. One of our readers, Styrkar, wrote a really neat program that takes any text and turns it into a nifty little animation. He did it as a way to extend the Space Invaders Lab to make a cool animation for the &#8220;Game Over&#8221; text.
Okay, I [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2008/02/we-love-our-head-first-c_-readers.png" alt="We love our Head First C# readers" /></p>
<p>Check out <a href="http://www.headfirstlabs.com/phpBB2/viewtopic.php?t=5542">this post on the Head First C# forum</a>. One of our readers, <a href="http://www.headfirstlabs.com/phpBB2/search.php?search_author=Styrkar">Styrkar</a>, wrote a really neat program that takes any text and turns it into a nifty little animation. He did it as a way to extend the <a href="http://www.headfirstlabs.com/books/hfcsharp/lab03.php">Space Invaders Lab</a> to make a cool animation for the &#8220;Game Over&#8221; text.</p>
<p>Okay, I just want to say how cool that is. When we wrote <a href="http://www.headfirstlabs.com/books/hfcsharp/">Head First C#</a>, one of our goals was to give readers a starting point for their creativity. I figured we&#8217;d see a few little modifications to the programs in the book. But seeing stuff like this&#8230; well, it&#8217;s just really amazing to me. Not only is this a cool program, but the code is really good. It&#8217;s readable, efficient, and easy to follow. And it&#8217;s even well-encapsulated &#8212; it&#8217;s good object oriented design! I really hope Styrkar gets the rest of the lab finished &#8212; I can&#8217;t wait to see how it comes out.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/288504095" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2008/02/25/best-readers-ever/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Don’t document your process!</title>
		<link>http://www.stellman-greene.com/2008/01/31/dont-document-your-process/</link>
		<comments>http://www.stellman-greene.com/2008/01/31/dont-document-your-process/#comments</comments>
		<pubDate>Thu, 31 Jan 2008 19:55:28 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<category><![CDATA[Software Process]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2008/01/31/dont-document-your-process/</guid>
		<description><![CDATA[
Yesterday, a Slashdot article asked an age-old question:
One of the worst problems [in my company] is a lack of process documentation. All knowledge is passed down via an oral tradition. Someone gets hit by a bus and that knowledge is lost forevermore. Now I know what I&#8217;ve seen in the past. There&#8217;s the big-binder-of-crap-no-one-reads method, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2008/01/perfect_date.png" alt="Joe perfects his process for the perfect date" /></p>
<p>Yesterday, a Slashdot article <a href="http://ask.slashdot.org/article.pl?sid=08/01/30/0332241">asked an age-old question</a>:</p>
<blockquote><p>One of the worst problems [in my company] is a lack of process documentation. All knowledge is passed down via an oral tradition. Someone gets hit by a bus and that knowledge is lost forevermore. Now I know what I&#8217;ve seen in the past. There&#8217;s the big-binder-of-crap-no-one-reads method, usually used in conjunction with nobody-updates-this-crap-so-it&#8217;s-useless-anyway approach. I&#8217;ve been hearing good things about company wikis, and mixed reviews about Sharepoint and its intranet capabilities. And yes, I know that this is all a waste of time if there&#8217;s no follow-through from management. But assuming that the required support is there, how do you guys do process documentation?</p></blockquote>
<p>This question seems to come up over and over again. The funny thing is that it almost always leads straight to a long discussion of the technique for gathering process documentation, and then a discussion of mechanism for storing it. That&#8217;s the question I think the reader thought he was asking: how to &#8220;copy down&#8221; the process by looking at how the people on the team build the software and putting it into a &#8220;complete&#8221; set of documents, and whether to use a wiki, Sharepoint, a version control system or some other repository to hold the docuemnts. And the discussion that followed from that Slashdot post should be pretty familiar to anyone who&#8217;s tried to solve this problem in real life. Some people talk about systems to store documents, others talk about the virtues of keeping them up to date, there&#8217;s a healthy dose of &#8220;write down what you&#8217;re currently doing&#8221; or suggestions for incident logging, an apparent epidemic of bus drivers who have it in for the one guy who knows how everything in the company works, and lots of talk of cataloging, updating and verifying.</p>
<p>I&#8217;ve been through that before, and I&#8217;ve bought into many of those ideas in the past. And you know what? It wasn&#8217;t particularly useful. I know that in many process circles, that&#8217;s a heretical idea. In fact, if you&#8217;d told me back in 1999 that it&#8217;s not useful, I would have laughed at you. <em>Of course</em> you&#8217;re supposed to start by documenting the complete process! How else do you know what you&#8217;re improving? There seems to be an unspoken rule that we&#8217;re supposed to be striving for a fully documented, constantly improving process. And in some shops, that does make sense. But it&#8217;s a very, very hard thing to do, and in practice it&#8217;s almost impossible to put in place from the ground up.</p>
<p>This is a really hard thing for a lot of software people to accept. Our nature, as programmer types, is to strive for complete systems. When we build software, we try to handle every possible special case.  We&#8217;re overly pedantic and literal; it&#8217;s like exceptions and missing cases just get under our skin. So when we&#8217;re presented with the problem of how to improve the way a team or a company builds software, the first thing we want to do is come up with a system that describes the complete process for building software, mapping out every possible special case and exception that a project might come to. And it makes sense that we&#8217;d want to test that process to make sure it&#8217;s accurate, correct any changes, and put everything in a repository that gives us complete access to the one true way that we build software.</p>
<p>The problem is that people don&#8217;t really work that way. Process engineering suffers from a serious problem: it seems simple when you think about it in the abstract, but once you start trying to document precisely and completely how a team builds software, you run into an enormous number of special cases. Architecture is always finished and signed off before coding begins, right? Oh, wait, except for Joe&#8217;s project, where we did 30% of the architecture and started building the code for that while Louise and Bob worked on the next piece of architecture. Oh yeah, and then there&#8217;s that project that&#8217;s going to be broken into three phases, and we don&#8217;t really know how the third part is going to work.</p>
<p>I&#8217;ve seen that pattern many times, and it usually plays out in one of two ways. Either you end up with really general documentation that lays out a very general process that&#8217;s trivial to follow but doesn&#8217;t really provide any useful guidance (like a big chart that shows that testing comes after coding, which comes after design), or you end up with a tangled mess of special cases and alternative paths that seems to get updated every time there&#8217;s a new project. Both of those technically fulfill the goal of process documentation &#8212; which is great if your job was to document the process. But neither is particularly useful if your goal is to actually build better software.</p>
<p>There&#8217;s an easy solution to this problem: <strong>don&#8217;t document your software process</strong>. Or, at least, don&#8217;t start out by documenting the complete software process. Instead, take a step back and try to figure out what problems you&#8217;re facing. What about your process needs to be fixed? Do you have too many bugs? Do you deliver the software too late? Does your CFO complain that projects are too expensive? Do you deliver a build to your users, only to have them tell you that it looks fine and all, but wasn&#8217;t it supposed to do this other thing? Those are all different problems, and they have different solutions.</p>
<p>That&#8217;s what Jenny and I teach in our first book, <a href="http://stellman-greene.com/aspm">Applied Software Project Management</a>. We call it the <strong>&#8220;diagnose and fix&#8221;</strong> approach: first you figure out what problems are plaguing your projects, and then you put in very limited fixes that address the most painful problems that keep you from building better software. People don&#8217;t just wake up one day and say, &#8220;We&#8217;ve got to totally change the way we build software.&#8221; They don&#8217;t start documenting the software process because things are going just fine. People hate change, and they don&#8217;t start making changes to the way they build software unless they have a good reason. So look for that reason, find the pain that hurts the most, and make the smallest change that you can to fix that one problem without rocking the boat. Then find the next most painful thing, and put in the smallest change that you can to fix that. This is something you can keep doing indefinitely, in a way that doesn&#8217;t disrupt those parts of your projects that are working just fine. Because the odds are that there are plenty of things that the team is doing right! If it ain&#8217;t broke, don&#8217;t fix it.</p>
<p>So what about the question of how to actually document the process changes that you do want to make? That&#8217;s a very practical problem, and one that we had to handle in our book. After all, we do give you processes for planning, estimating, documenting, building and testing software. And we wanted to do it in a way that was programmer-friendly, with as little cognitive overhead as we possible.</p>
<p>We decided to use process scripts &#8212; that&#8217;s scripts like an actor reads, not scripts like a shell runs &#8212; to describe our processes. We developed these scripts based on use cases (which we talk about in detail in the book). If you take a look at <a href="http://www.stellman-greene.com/usecases" title="Use cases">the use case page from the book&#8217;s companion website</a>, you can see an example of a use case, followed by a typical script that you&#8217;d follow to develop use cases for your project. That particular script is very iterative, because use case development (like many great software practices) should be a highly iterative process. We&#8217;ve got examples of many scripts for the various practices and processes: ones for <a href="http://www.stellman-greene.com/projectplanning">planning projects</a>, <a href="http://www.stellman-greene.com/reviews">reviewing deliverables</a>, and <a href="http://www.stellman-greene.com/productengineering">building and testing software</a>.</p>
<p>As for storing these scripts, I&#8217;ve used all sorts of ways to do it in the past. I&#8217;ve used wikis, version control systems (both Subversion and VSS, depending on what&#8217;s in place at the company), even plain old folders full of MS Word documents. The actual mechanics of storing documents aren&#8217;t particularly interesting, and are pretty much interchangeable for process documentation. Processes shouldn&#8217;t change all that often, because change is very disruptive to a company. The changes should be small, incremental, and easily understood by the team&#8230; and the team should agree that they&#8217;re useful! Because the biggest problem with process changes &#8212; and several posts in the Slashdot thread bring this up &#8212;  is that they don&#8217;t &#8220;stick&#8221;. But making those changes stick is easy. Just make small changes that the team buys into, and that actually get you to build better software.</p>
<p>That&#8217;s easier said than done, of course. Lucky for us, too! Otherwise there wouldn&#8217;t be a market for our <a href="http://www.oreilly.com/catalog/appliedprojectmgmt/index.html">books</a> or <a href="http://www.stellman-greene.com/training/">training</a>.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/288504097" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2008/01/31/dont-document-your-process/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Speaking, training and writing</title>
		<link>http://www.stellman-greene.com/2008/01/28/speaking-training-and-writing/</link>
		<comments>http://www.stellman-greene.com/2008/01/28/speaking-training-and-writing/#comments</comments>
		<pubDate>Mon, 28 Jan 2008 22:34:29 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
		
		<category><![CDATA[News]]></category>

		<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2008/01/28/speaking-training-and-writing/</guid>
		<description><![CDATA[
We&#8217;ve been keeping ourselves busy! What&#8217;s that? You want to know more? Well, certainly. We&#8217;ve got lots of news:

 Jenny and I are doing some guest blogging on the Head First Labs website, talking about what it&#8217;s like writing a Head First book (and whatever else we feel like talking about). I&#8217;ll be doing the [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2008/01/training_kneecaps1.png" alt="Training saves your kneecaps" /></p>
<p>We&#8217;ve been keeping ourselves busy! What&#8217;s that? You want to know more? Well, certainly. We&#8217;ve got lots of news:</p>
<ul>
<li> Jenny and I are doing some guest blogging on the <a href="http://headfirstlabs.com/" title="Head First Labs">Head First Labs website</a>, talking about what it&#8217;s like writing a Head First book (and whatever else we feel like talking about). I&#8217;ll be doing the posts this week, starting with one called <a href="http://www.oreillynet.com/headfirst/blog/2008/01/andrew_stellman_how_we_made_he.html">&#8220;How We Made Head First C# Different&#8221;</a>. I&#8217;ll probably get a little more technical near the end of the week &#8212; there&#8217;s only so much anyone wants to read about writing books. (Or is there?)</li>
<li>We&#8217;ve put up a new <a href="http://www.stellman-greene.com/training/">training page</a>, because we&#8217;ve been getting a lot of questions about training. It&#8217;s a list of the various courses we offer on project management and software development. Right now, we&#8217;re mainly concentrating on training corporate teams &#8212; we&#8217;ll go into a company and do a few days of training for a team. We&#8217;ve been getting an increasing number of inquiries about putting together classes that are open to the public, though. If you&#8217;re interested in that, please <a href="http://www.stellman-greene.com/contact-us/">drop us a note using our contacts page</a> and we&#8217;ll let you know the next time we&#8217;re offering one.</li>
<li>Last week we were invited to do our &#8220;Why Projects Fail&#8221; talk for the PMINYC Breakfast Roundtable. After the talk, one of the audience members came up to me to thank us for doing a presentation that wasn&#8217;t boring. I thought that was pretty cool! Anyway, <a href="http://www.stellman-greene.com/blog/wp-content/uploads/2008/01/why-projects-fail.pdf" title="Why Projects Fail — PMI Mass Bay">here are the slides from the talk</a>.</li>
<li>We&#8217;ve been doing our &#8220;Why Projects Fail&#8221; talk at companies around town. If you work at a company in New York City and want some insight into why projects fail, you&#8217;ve got a brown-bag lunch program (or some other kind of program where your company brings speakers in to do a talk), and you can get a reasonably-sized audience together, get in touch with us &#8212; we&#8217;re usually happy to come in and do it as part of our New York outreach program. It&#8217;s generally pretty fun, and a good way to take your mind off of the job for an hour.</li>
</ul>
<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/10/2007-10-09-presentation.png" alt="2007-10-09 presentation screenshot" /></p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/288504098" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2008/01/28/speaking-training-and-writing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Whoa…</title>
		<link>http://www.stellman-greene.com/2008/01/11/whoa/</link>
		<comments>http://www.stellman-greene.com/2008/01/11/whoa/#comments</comments>
		<pubDate>Fri, 11 Jan 2008 20:41:23 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2008/01/11/whoa/</guid>
		<description><![CDATA[ 
Well, we didn&#8217;t see this coming. Check out what Tim O&#8217;Reilly says in his latest blog post:
  I was probably most surprised when I saw Programming WCF Services on our list of top performing books for the year. If you&#8217;re steeped in open source, you might never have heard of Windows Communications Foundation, [...]]]></description>
			<content:encoded><![CDATA[<p> <img src="http://www.stellman-greene.com/blog/wp-content/uploads/2008/01/whoa.png" alt="Whoa!" /></p>
<p>Well, we didn&#8217;t see this coming. Check out what <a href="http://radar.oreilly.com/tim/" title="Tim O'Reilly">Tim O&#8217;Reilly</a> says in his <a href="http://radar.oreilly.com/archives/2008/01/a_year_in_oreilly_books.html">latest blog post</a>:</p>
<blockquote><p>  I was probably most surprised when I saw <a href="http://www.oreilly.com/catalog/9780596526993/index.html">Programming WCF Services</a> on our list of top performing books for the year. If you&#8217;re steeped in open source, you might never have heard of Windows Communications Foundation, Microsoft&#8217;s approach to building SOA applications on Windows. And you might not care. But you&#8217;d be making a mistake. Don&#8217;t count Microsoft out of the Web services game yet! They still have a brilliant, passionate developer community, and as a company have tremendous resources, persistence, and talent. And now that they have real competition, I expect them to reinvent themselves. (For that matter, <a href="http://www.oreilly.com/catalog/9780596514822/index.html">Head First C#</a> was the top selling programming language title in Bookscan last week, except for &#8220;Javascript:  The Definitive Guide&#8221;.  And C# continues to gain significantly on Java in terms of book sales.)</p></blockquote>
<p>Wait, what? Let me repeat that for you. Except for a book on Javascript, <strong>Head First C# was the top selling programming language title in Bookscan last week</strong>. That&#8217;s pretty amazing to me, because we only released it at the end of November, so word of mouth hasn&#8217;t even gotten a chance to spread yet.</p>
<p>We took a few risks with Head First C# &#8212; we took an approach that was somewhat different than any other programming book I&#8217;ve seen. I&#8217;ve learned at least a dozen and a half programming languages over the years, and I followed the same pattern every time: I thought of a project that I wanted to do, then I figured out how to do the project using the new language. (Like back in 1994 or so, when I wanted to learn Perl and also learn about web servers, so I built a web server in Perl.) But I&#8217;m definitely not unique in this approach: pretty much every good programmer I know takes the same approach to learning a new language or technology.</p>
<p>Which is why I thought it was so weird that I couldn&#8217;t even find a language learning book that asked you to solve programming problems. I&#8217;ve seen a lot of &#8220;hands-on&#8221; work, where you follow step-by-step instructions to type in code to get a certain result. And certainly, an enterprising person can definitely learn that way. (If they couldn&#8217;t, nobody would buy programming books!) And certainly, we have a lot of that in Head First C#. But I just don&#8217;t think that&#8217;s enough.</p>
<p>I guess I have a hidden agenda here. I&#8217;ve led a lot of programming teams over the years. In 2006 and 2007, I spent a lot of time working with a consulting company, and one thing you learn working with consulting teams is that you need to work with a lot of different people. Often, you&#8217;ll have at least one very junior member on a team. And what I&#8217;ve found is that a lot of really junior developers have the capacity to be good programmers, but don&#8217;t have any experience independently solving programming projects on our own. So I decided early on that one goal of Head First C# would be to give people that experience. I wanted to teach them how to solve programming problems, rather than just follow step-by-step instructions. In essence, I wanted to create programmers who I&#8217;d be happy to have on my team in the future. (Does that sound too self-serving? I hope not!)</p>
<p>So when Jenny and I started working on Head First C#, it took us a few chapters to figure out exactly how to do that. It was interesting going back to the beginning of the book after we finished, to do a second pass and incorporate comments from our (really great, and really patient) tech reviewers. It really did take us about five or six chapters to work out a good way of assigning problems. We ended up co-opting the &#8220;Exercise&#8221; element that you&#8217;ll find in the other Head First books. The exercises in the other Head First books were generally pencil-and-paper oriented, although I think I remember a few step-by-step programming ones as well. That&#8217;s definitely the approach we took in <a href="http://www.oreilly.com/catalog/9780596102340/index.html" title="Head First PMP">Head First PMP</a>, and it worked really well.</p>
<p>But with Head First C#, we took the &#8220;Exercise&#8221; element in a totally different direction. We basically used the exercise to give a programming assignment, where we&#8217;d give a problem to solve. We&#8217;d include a screenshot, define some classes, maybe give a little of the code, and then leave it up to the reader to build working software. It was lucky that I spent so much of my career writing specifications, because I think we really had to push our writing skills to the limit. It&#8217;s far too easy to write an exercise that&#8217;s ambiguous or hard to follow&#8230; and as we found out during the tech review, it&#8217;s really demoralizing to run across a poorly-written exercise. And we had to be clear that there&#8217;s no single, &#8220;correct&#8221; solution to the exericse: if it works, then you got it right. I&#8217;d be surprised if a single reader comes up with exactly the same solution that we did on any of the projects in the last third of the book.</p>
<p>I hope that interactive approach is what&#8217;s paying off. Word of mouth is <a href="http://justinram.wordpress.com/2008/01/03/books-head-first-c-lab-1-solution/">just</a> <a href="http://dotnetfluke.blogspot.com/2008/01/head-first-c-book-first-impressions.html">starting</a> <a href="http://www.destructoid.com/blogs/iDano84/beginning-game-development-a-refreshers-approach-pt-2-of-42--64055.phtml" title="iDano84's blog">to get out</a>, and I&#8217;m really happy to say that it seems to be positive.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/288504099" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2008/01/11/whoa/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Building Video Games</title>
		<link>http://www.stellman-greene.com/2007/12/11/building-video-games/</link>
		<comments>http://www.stellman-greene.com/2007/12/11/building-video-games/#comments</comments>
		<pubDate>Tue, 11 Dec 2007 17:45:48 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2007/12/11/building-video-games/</guid>
		<description><![CDATA[
One of my favorite things about Head First C# is that Jenny and I ask our readers to do a whole lot of coding. When we started doing research for the book, one thing that really struck me about other books to help you learn C# was that I couldn&#8217;t find any book that actually [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/12/invaders.png" alt="Invaders" /></p>
<p>One of my favorite things about <a href="http://www.headfirstlabs.com/books/hfcsharp/" title="Head First C#">Head First C#</a> is that Jenny and I ask our readers to do a whole lot of coding. When we started doing research for the book, one thing that really struck me about other books to help you learn C# was that I couldn&#8217;t find any book that actually asked its readers to write much code. There were one or two that we saw which had some written exercises. And that&#8217;s great for a textbook, but I don&#8217;t know any programmer who learned to program with a pencil and paper. If you want to be a good programmer, you need to <em>write a lot of code</em>. Coding is a skill, and like any other skill it takes practice. And there are a lot of concepts that just don&#8217;t &#8220;click&#8221; until you write software that uses them.</p>
<p>I know that when I need to learn a new language, the first thing I do is come up with a project for myself. Like when I needed to learn Perl back in 1994 or so. I also wanted to learn about how web servers worked (they were newfangled and mysterious at the time), so I wrote a simple web server in Perl. (It turns out that it only takes about 50 lines of Perl to write a very simple HTTP/0.9 web server&#8230; probably a lot fewer, if you&#8217;re an insane Perl optimizng type.) So we decided from the beginning to make sure <a href="http://www.headfirstlabs.com/books/hfcsharp/" title="Head First C#">Head First C#</a> has plenty of opportunities for our readers to write code. Which meant coming up with projects&#8230; a <strong>lot</strong> of projects.</p>
<p>Which turned out to be harder than it sounds. The instructions for the project needed to be completely self-explanatory. It&#8217;s not like an Agile project, where the programmer can talk to the customers and the software can go through several iterations. No, every project needed a complete specification, one that the reader could understand completely and build exactly the software we asked for.</p>
<p>And that&#8217;s where video games came in really handy.</p>
<p>When you ask someone to write, say, a business application, you need to explain all of the details of the business. And you need to explain <em>why</em> the program is needed, especially if the programmer doesn&#8217;t really have any background in that business. If a programmer doesn&#8217;t understand the reason or rationale for a particular feature, then it&#8217;s almost certain that he&#8217;ll build something <em>other</em> than what you&#8217;re asking for. (That&#8217;s why I always like including a rationale section <a href="http://www.stellman-greene.com/usecase" title="Use Case">when I write use cases</a>. It prevents a lot of problems later in the project.)</p>
<p>Video games come &#8220;pre-loaded&#8221; with their own rationale. Nobody ever needs to ask why you&#8217;d write a video game &#8212; you do it because they&#8217;re fun. Everyone already knows why you&#8217;re writing it. It&#8217;s not hard to make a video game intuitive. One easy way to do it is to model it after a game that already exists. We have one exercise where the reader builds a <a href="http://www.headfirstlabs.com/books/hfcsharp/ch08.php">Go Fish! game</a>, where the player plays against two computer opponents. One project is <a href="http://www.headfirstlabs.com/books/hfcsharp/ch07.php">Hide and Seek</a> &#8212; the player searches through a virtual house to find an opponent who hid in a random place. We&#8217;ve got a <a href="http://www.headfirstlabs.com/books/hfcsharp/lab02.php">dungeon</a> game, a <a href="http://www.headfirstlabs.com/books/hfcsharp/ch11.php">Whack-a-Mole</a> game, and my personal favorite (and the final project in the book), <a href="http://www.headfirstlabs.com/books/hfcsharp/lab03.php">Space Invaders</a>.</p>
<p>There are plenty of other sorts of projects, too. Our goal was to get the readers coding from the very beginning, and keep them writing code through the whole thing. We designed the projects to be satisfying and fun. And we&#8217;ve already gotten feedback from readers who definitely enjoyed them.</p>
<p><strong>Head First C# Labs &#8212; The Contest </strong></p>
<p>We&#8217;re running a little contest for our readers. We&#8217;ve included three labs in the book where the readers build larger projects. We give them a lot of design, but we don&#8217;t actually give them the code for the solutions (like we do for all of the smaller projects). Eventually, we want to post executables for the labs. But we don&#8217;t want to post our own &#8212; we want to post executables that our readers came up with! So we&#8217;re running a contest to see which readers can send in executables first. The first person to send us working code for the lab will have their executable posted on the website as the official solution, and we&#8217;ll send them some sweet O&#8217;Reilly swag, too.  <a href="http://www.headfirstlabs.com/books/hfcsharp/labcontest.php">Here&#8217;s the contest page</a> &#8212; we&#8217;re looking forward to seeing what our readers come up with!</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/288504100" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2007/12/11/building-video-games/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Some great questions about PMP and Agile development</title>
		<link>http://www.stellman-greene.com/2007/12/06/some-great-questions-about-pmp-and-agile-development/</link>
		<comments>http://www.stellman-greene.com/2007/12/06/some-great-questions-about-pmp-and-agile-development/#comments</comments>
		<pubDate>Thu, 06 Dec 2007 21:18:52 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[PMP]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2007/12/06/some-great-questions-about-pmp-and-agile-development/</guid>
		<description><![CDATA[Jenny and I are doing a really nifty Q&#38;A on the JavaRanch Saloon. People are asking us all sorts of great questions about Head First PMP, and we&#8217;re doing our best to answer every single one of them. We&#8217;ve gotten a lot of really good questions about Agile and how it works with PMP. It [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/12/what-the.png" alt="What the…" /><br class="webkit-block-placeholder" />Jenny and I are doing a really nifty Q&amp;A on the <a href="http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&amp;f=42&amp;t=001042">JavaRanch Saloon</a>. People are asking us all sorts of great questions about <a href="http://headfirstlabs.com/PMP" title="Head First PMP">Head First PMP</a>, and we&#8217;re doing our best to answer every single one of them. We&#8217;ve gotten a lot of really good questions about Agile and how it works with PMP. It looks like some people assume that there&#8217;s some basic conflict between running an Agile shop and how a PMP certified project manager might typically run a project. Some of the questions were really good, and I think some of our regular readers would be interested in the answers I came up with. So here are a few of the best questions and answers from the forum in the last couple of days.</p>
<p>&nbsp;</p>
<p><a href="http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&amp;f=42&amp;t=001065"><strong>HF PMP: how does it fit with Lean Software Development&#8230;</strong></a></p>
<p><em>Gian Franco asked:</em></p>
<blockquote><p>How does PMP fit with practices as explained in Lean Software Development (by Poppendieck) or Agile practices in general?</p></blockquote>
<p>I wrote a blog post about this a while back called <a href="http://www.stellman-greene.com/2007/04/27/what-about-agile/">&#8220;What About Agile?&#8221;</a></p>
<p><a href="http://www.stellman-greene.com/2007/04/27/what-about-agile/">http://www.stellman-greene.com/2007/04/27/what-about-agile/</a></p>
<p>There are definitely a lot of things that the PMBOK(r) Guide and PMP exam cover that aren&#8217;t addressed at all with Agile &#8212; like whether a fixed price contract is better or worse for the seller than a cost-plus contract. But there&#8217;s one really important way that both the PMBOK(r) and Agile are very similar: they both recognize that managing change is an important part of a successful project. And in that respect, you&#8217;ll definitely find that your knowledge of Agile can help you when you study for the PMP exam.</p>
<p><em> And Gian had a follow-up question:</em></p>
<blockquote><p>Well :), let me put it in another way&#8230;, In Lean SW development requirements churn is considered to increase costs, I don&#8217;t know much about PMP, but suppose it resembles to Prince2 (another comparable projectmanagement method) then the initial phases of specification might fall in this category of specifying too much too early.</p></blockquote>
<p>The PMBOK(r) Guide was developed so that it can be applied to any kind of project, not just a software project. So projects that fit into its framework tend to develop all of the requirements up front, <strong>before</strong> any work begins. That&#8217;s because all of the plans for the submarine or office building need to be finalized and agreed upon before you hire the construction crew to break ground.</p>
<p>There will be changes that happen. But if those changes involve very large alterations to the blueprints and you need to tear out the last three floors you put in, it gets very, very expensive.</p>
<p>Oddly, the same is true of software in many cases. There are some changes that need to be made, and which you could have found had you &#8220;churned&#8221; through the requirements a little more before you started building the software, and now you&#8217;ve got a bunch of code you need to tear out &#8212; and it would have been a lot more efficient to take the time up front to figure out the requirements and then only build your software once. Unfortunately, many people don&#8217;t consider that &#8220;Agile&#8221;. (I think they&#8217;re wrong &#8212; I think that doing a lot of iteration before you even start writing code can be the most efficient and customer-focused way that you can build software&#8230; but that&#8217;s a story for another day.)<a href="http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&amp;f=42&amp;t=001078"></a></p>
<p>&nbsp;</p>
<p><a href="http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&amp;f=42&amp;t=001078"><strong>HF PMP: PMP is Agile!</strong></a></p>
<p><em>Darya Akbari asked:</em></p>
<blockquote><p>Can one say that PMP is not agile  :) ?</p></blockquote>
<p>That&#8217;s an interesting question. But I&#8217;d ask the opposite question: can an Agile shop fit into the PMBOK(r) Guide framework?</p>
<p>The reason is that the PMBOK(r) Guide doesn&#8217;t define one specific set of doing things. In fact, just the opposite. It says that you need to select a particular methodology based on what you know about your industry and past projects, the specific needs of the project, the deadline and milestones, etc. It doesn&#8217;t say that every project needs to include specific things. Instead, it includes things that typically happen on most projects &#8212; and practices that are most commonly found. And remember, the PMBOK(r) Guide doesn&#8217;t just apply to software: it needs to be general enough so that it can include practices for construction, industrial, civil engineering, electrical and other kinds of projects.</p>
<p>So can a typical Agile process fit into the PMBOK(r) Guide? As far as I can tell, the answer is yes. One hint is that when Jenny and I were working on &#8220;Head First PMP&#8221;, the PMBOK(r) Guide team members on our technical review team repeatedly stressed iteration and iterative development.</p>
<p>One of the strongest points in the PMBOK(r) Guide (ones that is stressed on the PMP exam) is that it really emphasizes collaboration with the stakeholders, and keeping them in the loop on all important decisions. Another thing that it really stresses is responding to change &#8212; and it&#8217;s very clear that the customers need to be involved in decisions about change.</p>
<p>There are definitely some things that Agile people might not agree with. It may seem very documentation-heavy, and very concerned with contracts. But the PMBOK(r) Guide was developed in a world where subcontracting is very important, and where a lack of documentation or attention to the contract can mean that the company can get sued and go out of business. I&#8217;ve spent a lot of time working in a consulting situation, and even the friendliest clients can turn into adversaries if you don&#8217;t have everything documented properly. But if you go back to the Agile manifesto, you&#8217;ll see &#8220;Individuals and interactions over processes and tools,&#8221; &#8220;Customer collaboration over contract negotiation,&#8221; and &#8220;Working software over comprehensive documentation&#8221;. While the PMBOK(r) Guide highly stresses individuals and interactions, customer collaboration, and working software (in the form of deliverables that meet the customer&#8217;s needs). But it needs to pay attention to processes and tools (since that&#8217;s what a framework is made of), contract negotiation (because a process is no good if it puts your company out of business), and comprehensive documentation (because it&#8217;s really hard to build a strip mall or highway overpass without it).</p>
<p>&nbsp;</p>
<p><strong><a href="http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&amp;f=42&amp;t=001081">HF PMP question: SCRUM?</a></strong></p>
<p><em>Rogerio Kioshi asked:</em></p>
<blockquote><p>I&#8217;ve read about SCRUM. Does PMP have anything to do with this metodology?</p></blockquote>
<p>The PMP exam won&#8217;t have any questions specifically about SCRUM. But if you have a good understanding of SCRUM, then that will give you a good leg up on studying for the PMP exam. The reason for this is that if you&#8217;ve spent time thinking about SCRUM, then you probably have a good understanding of a lot of the ideas behind team communication, project schedule constraints, and activity sequencing, and those are core concepts that you need to understand to become PMP certified.</p>
<p>You&#8217;ll still have studying to do, though!</p>
<p>&nbsp;</p>
<p><a href="http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&amp;f=42&amp;t=001082"><strong>Need advice on HOW to start a new Software Product</strong></a></p>
<p><em>This isn&#8217;t a question about Agile specifically, but it&#8217;s still a great question. </em><em>Paul Michael Laborte asked:</em></p>
<blockquote><p>I hope this doesn&#8217;t sound too off topic. Anyway here it goes&#8230;</p>
<p>I&#8217;m currently a software developer with a Monday to Friday job.<br />
Right now, I&#8217;m looking for opportunities which would allow me to have a 20% time (pretty much like google).</p>
<p>During that 20%, I&#8217;m thinking of developing my own software product.<br />
I would be needing to wear different hats so I really think HFPMP would be of great value.</p>
<p>Aside from the contents of the book, would you have any other tips for entrepreneur aspirants like us</p></blockquote>
<p>That&#8217;s a really interesting question. How do you start out a software project?</p>
<p>Well, if you want to get your project started out right, the first thing you need to do is figure out what it is you want to build. That might sound a little odd &#8212; of course you know what to build, right? Otherwise, why would you start a project? But if you look at a lot of projects that went off the rails at one point, one thing that you&#8217;ll see over and over again is that many problems can be traced back to the fact that one person wanted to build A, while another person wanted to build B.</p>
<p>There are a lot of tools and practices that can help you with this. My favorite is a <a href="http://www.stellman-greene.com/aspm/content/view/22/38/">Vision &amp; Scope</a> document &#8212; mostly because it&#8217;s very lightweight, only takes a few minutes to write, and it&#8217;s something that anyone can read if they want to learn what it is your project does. Also, it&#8217;s something that serves really well as a front page for a wiki or project website, and immediately brings people up to speed on it. Basically, the Vision &amp; Scope tells you very briefly who needs the software, what their needs are, and how you&#8217;ll meet those needs (by explaining the features of the software you&#8217;ll be developing).</p>
<p>To be perfectly honest, Head First PMP may not really help you as much with this particular problem. But it&#8217;s something that Jenny and I wrote a whole lot about in our first book, <a href="http://www.stellman-greene.com/aspm">Applied Software Project Management</a>. We have a whole chapter on starting out a project using a Vision &amp; Scope document.</p>
<p>Other things you need to think about when you&#8217;re starting out your project &#8212; which we also talk about in depth in Applied Software Project Management &#8212; are figuring out <a href="http://www.stellman-greene.com/usecase">how your users are going to interact with the software</a>, setting up a version control system, and doing <a href="http://www.stellman-greene.com/aspm/content/view/31/41/">test-driven development</a>.</p>
<p>I definitely recommend taking an hour or two and really think about how you&#8217;ll handle those things. One way I&#8217;ve seen a lot of people do this is start a wiki for your project, and have a separate page that says how each of those things will be handled. It doesn&#8217;t have to be fancy or anything, and it shouldn&#8217;t take long to throw together. But just doing that will really help get your head straight about them, and set your project in the right direction from the beginning.</p>
<p>&nbsp;</p>
<p>If you&#8217;ve got a burning question and you&#8217;re wondering what we think about it, send it to us <a href="http://www.stellman-greene.com/contact-us/">using our &#8220;Contact Us&#8221; page</a>! We love answering questions from our readers.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/288504101" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2007/12/06/some-great-questions-about-pmp-and-agile-development/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Head First C# — in stores soon!</title>
		<link>http://www.stellman-greene.com/2007/11/25/head-first-c-in-stores-soon/</link>
		<comments>http://www.stellman-greene.com/2007/11/25/head-first-c-in-stores-soon/#comments</comments>
		<pubDate>Sun, 25 Nov 2007 22:45:39 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2007/11/25/head-first-c-in-stores-soon/</guid>
		<description><![CDATA[Jenny and I have some great news&#8230; Head First C# is done, through production, and currently being printed and shipped to bookstores! Amazon.com says that it&#8217;ll be in stock on November 27. Not only is that great for all of you Head First fans, but it also means that we&#8217;ll be able to start writing [...]]]></description>
			<content:encoded><![CDATA[<p>Jenny and I have some great news&#8230; <strong><a href="http://www.headfirstlabs.com/books/hfcsharp/">Head First C#</a></strong> is done, through production, and currently being printed and shipped to bookstores! Amazon.com says that it&#8217;ll be <a href="http://www.amazon.com/Head-First-C/dp/0596514824/">in stock on November 27</a>. Not only is that great for all of you Head First fans, but it also means that we&#8217;ll be able to start writing posts again.</p>
<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/11/hfc_-cover.png" alt="HFC# Cover" /></p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/288504102" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2007/11/25/head-first-c-in-stores-soon/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A great time at NYC SPIN / PMINYC</title>
		<link>http://www.stellman-greene.com/2007/10/11/a-great-time-at-nyc-spin-pminyc/</link>
		<comments>http://www.stellman-greene.com/2007/10/11/a-great-time-at-nyc-spin-pminyc/#comments</comments>
		<pubDate>Thu, 11 Oct 2007 06:03:09 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
		
		<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2007/10/11/a-great-time-at-nyc-spin-pminyc/</guid>
		<description><![CDATA[
We had a great time presenting at a NYC SPIN meeting on Tuesday &#8212; it was a joint gig with the PMINYC chapter, and we had a great crowd. We got a lot of great questions, which is always great. As promised, here&#8217;s a PDF of the slides. If anyone&#8217;s got any questions, feel free [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/10/2007-10-09-presentation.png" alt="2007-10-09 presentation screenshot" /></p>
<p>We had a great time presenting at a <a href="http://www.rlki.com/nycspin/">NYC SPIN</a> meeting on Tuesday &#8212; it was a joint gig with the <a href="http://www.pminyc.org/">PMINYC</a> chapter, and we had a great crowd. We got a lot of great questions, which is always great. As promised, here&#8217;s a <a href="http://www.stellman-greene.com/blog/wp-content/uploads/2007/10/2007-10-09-why-projects-fail.pdf" title="2007-10-09 - Why Projects Fail [PDF]">PDF of the slides</a>. If anyone&#8217;s got any questions, feel free to <a href="http://www.stellman-greene.com/contact-us/">contact us</a>.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/288504103" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2007/10/11/a-great-time-at-nyc-spin-pminyc/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
