<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Information Technology Dark Side &#187; Project Management</title>
	<atom:link href="http://www.techdarkside.com/category/project-management/feed" rel="self" type="application/rss+xml" />
	<link>http://www.techdarkside.com</link>
	<description>Struggles of a Self-Taught Coder</description>
	<lastBuildDate>Mon, 30 Jan 2012 17:18:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Where Does Technical Debt Come From?</title>
		<link>http://www.techdarkside.com/where-does-technical-debt-come-from</link>
		<comments>http://www.techdarkside.com/where-does-technical-debt-come-from#comments</comments>
		<pubDate>Mon, 12 May 2008 12:05:59 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Information Technology Trends]]></category>
		<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=250</guid>
		<description><![CDATA[Matt Heusser and I were discussing his upcoming Workshop on Technical Debt, at which I hope to be speaking in August, and we came up with several interesting ways that technical debt is created. Hacks create technical debt by ignoring principles of good software development in favor of quick, easy fixes This is the obvious [...]]]></description>
			<content:encoded><![CDATA[<p><div style="float: right"><script type="text/javascript"><!--
google_ad_client = "pub-9768843936559157";
/* 300x250 Post Ads */
google_ad_slot = "1495790255";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div><a href="http://xndev.blogspot.com/">Matt Heusser</a> and I were discussing his upcoming <a href="http://www.cs.calvin.edu/activities/technical-debt/">Workshop on Technical Debt</a>, at which I hope to be speaking in August, and we came up with several interesting ways that technical debt is created.</p>
<p><strong>Hacks create technical debt by ignoring principles of good software development in favor of quick, easy fixes</strong></p>
<p>This is the obvious one because it is the one technical teams complain most about. &#8220;I didn&#8217;t want to do it that way, but my manager said I could only choose from options that took less than a day to implement,&#8221; or some variant of this statement, is the most common answer to the question &#8220;Why does X suck so bad?&#8221;</p>
<p>So how do developers typically fight back against hacks? With reuse anticipation. Now the bad news.</p>
<p><strong>Reuse anticipation creates technical debt by expanding the supported code base without creating a correspondingly timely value proposition</strong></p>
<p>It&#8217;s easy to imagine that the service, component, module, whatever, that you&#8217;re building might be used by multiple applications in multiple ways. It only takes an extra YY hours to make it universal, you tell the project manager. And then we&#8217;ll never have to write this code again. Sometimes, when you already have &#8220;universal&#8221; demand for a component, this is a good idea. It&#8217;s also a good idea when it is a very specific, low-level technical capability, like dumping a message in a queue or searching a string for a value or something like that. Sometimes it&#8217;s a really bad idea &#8211; over-generalizing a capability can make it so difficult to &#8220;reuse&#8221; that no one will reuse it. Either way, it increases your technical debt, because whether anyone reuses it or not, the code you have to support is more complex than it would otherwise be.</p>
<p><strong>Time creates technical debt</strong><br />
There&#8217;s a great riddle in The Hobbit, by JRR Tolkien:</p>
<p><em>This thing all things devours:<br />
Birds, beasts, trees, flowers;<br />
Gnaws iron, bites steel;<br />
Grinds hard stones to meal;<br />
Slays king, ruins town,<br />
And beats high mountains down.</em></p>
<p>Tolkien might have included code in this list had he been a software developer.</p>
<p>Time has a way of dimming our memories of the code we&#8217;ve written, what it does, and why it does it. It is for this reason that development teams often turn to comprehensive documentation to save them.</p>
<p>Now for more bad news.</p>
<p><strong>Comprehensive documentation creates technical debt</strong><br />
Every document you write that has more purpose than helping you figure out how to deliver code NOW becomes another artifact you have to maintain. It adds to your code base in that regard. Now, instead of paying people to maintain the code, the business has to pay someone to maintain the code and the documentation. You just fell further behind.</p>
<p>Documentation typically only has ROI in the short term. It is a very rare document that provides value over the long term. Usually it very quickly becomes a cost with little return of any kind.  </p>
<p><strong>Innovation creates technical debt</strong><br />
Einstein said we can&#8217;t solve our problems with the same thinking we used when we created them. Sadly, when we continuously apply the same thinking to our code base that we used when we created it, the technology world doesn&#8217;t do the same. It moves on, finding better ways to do the same thing. Small changes add up and become big changes, and suddenly there are much more attractive technologies that we can&#8217;t use because we&#8217;ve fallen so far behind.</p>
<p>When we see the world moving on to bigger and better ways of solving our problems, it&#8217;s tempting to say something like this:<br />
&#8220;There&#8217;s no point putting effort into X, we&#8217;re just going to move to Y soon anyway.&#8221;</p>
<p>Sometimes this is a good idea, if moving to Y is funded, approved, and making progress. But if Y isn&#8217;t approved, giving up on X will only increase the amount you owe, and you&#8217;ll feel doubly bitter about it when Y never materializes.</p>
<p>When I see this problem, I think of a line from an old song: &#8220;If you can&#8217;t be with the one you love, well then, love the one you&#8217;re with.&#8221;</p>
<p><strong>Technical debt creates more technical debt</strong><br />
With credit cards it is sometimes possible to make the minimum payment without reducing your principal a penny. In fact, you can pay your bill and end up with a higher balance because of this.</p>
<p>It&#8217;s the same way with your code base. If you don&#8217;t invest in it faster than you are accruing technical debt, your technical debt will grow. Why? Because you don&#8217;t have time to make it better, so what are you doing? You&#8217;re hacking &#8211; cutting corners and doing the wrong things just to get done in time with the resources you have.</p>
<p>Technical debt sucks as bad as credit card debt. I suspect that paying off technical debt is very similar to paying off credit card debt. It&#8217;s hard, it requires frugality, and it means shedding everything that isn&#8217;t really important. More about that some other time.</p>
<p>Have a nice week.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/where-does-technical-debt-come-from/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Corporate IT is an Innovation Barrier</title>
		<link>http://www.techdarkside.com/corporate-it-is-an-innovation-barrier</link>
		<comments>http://www.techdarkside.com/corporate-it-is-an-innovation-barrier#comments</comments>
		<pubDate>Thu, 17 Apr 2008 12:01:07 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Project Management]]></category>
		<category><![CDATA[collaboration]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=238</guid>
		<description><![CDATA[A few days ago I overheard someone talking about outsourcing. At one point, they said &#8220;it&#8217;s hard to outsource innovation.&#8221; I couldn&#8217;t help snickering at this &#8211; it&#8217;s probably just as hard to insource innovation. In fact, it may be harder. Corporate IT is, by its very nature, a barrier to innovation. This is true [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago I overheard someone talking about outsourcing. At one point, they said &#8220;it&#8217;s hard to outsource innovation.&#8221; I couldn&#8217;t help snickering at this &#8211; it&#8217;s probably just as hard to insource innovation. In fact, it may be harder.</p>
<p>Corporate IT is, by its very nature, a barrier to innovation. This is true at many levels, starting with your management chain. How many layers of buy-in are required to try something new? What if you actually have to buy something to try it? Hierarchical organizations make innovation harder because they impose a decision-making layer of bureaucracy upon the innovators.<br />
<span id="more-238"></span><br />
Most large organizations are hierarchical, with varying degrees of bureaucracy, but Corporate IT takes it several steps further than just the natural problems of a large organization. We&#8217;ve created special processes designed to resist innovation and change. I&#8217;m talking about the project management &#8220;best practices&#8221; (yes, I mean this sarcastically) of change management, upfront requirements, and &#8220;contracts&#8221; between business and IT.</p>
<p>How many times have you heard an IT manager try to tell the business something like the following: &#8220;Don&#8217;t tell us how to do it. Just tell us what you want done and we&#8217;ll figure out how to do it&#8221;? This is a typical response to our business partners doing their best to explain a problem and a potential solution. </p>
<p>Sure, sometimes the business tells us to solve problems in crazy ways that might ultimately be harmful to the organization. I&#8217;ve seen that first hand on multiple occasions. But I think there is a better way to avoid the negative outcome of crappy software than telling the business to stay out of IT.</p>
<p>One of the things that often happens when IT managers send this message to business partners is a counter-productive power struggle. Managers on both sides start this escalation process through their reporting chain until they either merge or one of them has to back down because of the eminence to the other. Guess who almost always has to back down? IT.</p>
<p>I think this problem would go away if IT managers would stop seeing business &#8220;design&#8221; as a bad thing. I prefer to think of it as an attempt of our business partners to move away from the legalistic relationship that plagues IT and collaborate with us. It doesn&#8217;t necessarily mean we design it the way they suggest, but it does mean we let them play. Anyone who can contribute should be allowed to. Designs express intent, and often that intent is more important than the requirements the business might write down and throw over the wall. By letting them play in design activities with us, we understand their intent better and are more likely to create a solution that solves the problem we are focused on. In the process, we help the business to have confidence in our skills as technology problem solvers.</p>
<p>When the business is confident in you, innovation becomes easier. They will take risks on you &#8211; spend money on the possibility of a big win, and together you will fail or succeed. When the business believes in you, your management will tend to get out of the way, whether they believe in you or not. Everyone in IT knows where the bread is buttered, and it&#8217;s not on the IT reporting chain.</p>
<p>Collaboration is the key to innovation. The best collaboration happens when you set aside the restrictions organizations create around roles and let people play. Here are some rules I&#8217;ve come up with over the years that I think encourage collaboration and innovation:</p>
<li>Be title-blind contributors</li>
<li>Anyone who can contribute is allowed to</li>
<li>Know the difference between different and better</li>
<li>Have thick skin, shed no tears, and bear no grudges</li>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/corporate-it-is-an-innovation-barrier/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>&#8220;Plan a Better Project&#8221; on BizTechMagazine.com</title>
		<link>http://www.techdarkside.com/plan-a-better-project-on-biztechmagazinecom</link>
		<comments>http://www.techdarkside.com/plan-a-better-project-on-biztechmagazinecom#comments</comments>
		<pubDate>Thu, 03 Apr 2008 03:40:58 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=229</guid>
		<description><![CDATA[BizTech magazine just published a best practices article of mine about keeping projects out of trouble. I did my best to promote principles that I think are consistent with agile values &#8211; I hope I pulled it off. Check it out and let me know what you think.]]></description>
			<content:encoded><![CDATA[<p>BizTech magazine just published a best practices article of mine about keeping projects out of trouble. I did my best to promote principles that I think are consistent with agile values &#8211; I hope I pulled it off.</p>
<p><a href="http://www.biztechmagazine.com/article.asp?item_id=414">Check it out</a> and let me know what you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/plan-a-better-project-on-biztechmagazinecom/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What is the purpose of software testing?</title>
		<link>http://www.techdarkside.com/what-is-the-purpose-of-software-testing</link>
		<comments>http://www.techdarkside.com/what-is-the-purpose-of-software-testing#comments</comments>
		<pubDate>Tue, 04 Mar 2008 14:27:30 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=220</guid>
		<description><![CDATA[A few weeks ago I would have thought this was an obvious question. But then I stirred up a hornet&#8217;s nest by asking a group of testers to identify common myths about software testing. The ensuing discussion was heated, interesting, and sometimes insulting. Some people became offended, and great rifts were born between some of [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago I would have thought this was an obvious question. But then I stirred up a hornet&#8217;s nest by asking a group of testers to identify common myths about software testing. The ensuing discussion was heated, interesting, and sometimes insulting. Some people became offended, and great rifts were born between some of the testers involved in the discussion.</p>
<p>It occurred to me later that the source of the disagreement was very fundamental, and perhaps it was so deeply ingrained in the testers&#8217; various psychologies that they were unaware of the differences between them. I believe the two sides of the debate represented two schools of thought about the purpose of software testing.<span id="more-220"></span></p>
<p><strong>School #1: Find bugs.</strong><div style="float: right"><script type="text/javascript"><!--
google_ad_client = "pub-9768843936559157";
/* 300x250 Post Ads */
google_ad_slot = "1495790255";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div><br />
This camp just wants to find problems in software. They want to sharpen their skills at honing in on these bugs, explaining bugs to developers, and negotiating the processes that result in getting these bugs fixed. They have an affinity for things like exploratory testing, bug advocacy, energy management, oracles, heuristics, and even coding. They aren&#8217;t particularly interested in requirements, traceability, and up-front test planning, though they will do it when forced to just so they can have the opportunity to find some bugs. These testers NEVER argue about whether something is a defect or a missed requirement &#8211; it&#8217;s a defect. They are generally skeptical of automated testing and only use it when they feel there is a high likelihood it can find bugs more effectively than they could manually. They prefer small, proficient teams over swarms of testers.</p>
<p>The best bug-hunters can test anything at a moment&#8217;s notice. They don&#8217;t need requirements, charters, or test managers to do their job. Just give them an application and they will find bugs.</p>
<p><strong>School #2: Prove the software performs as advertised</strong><br />
This camp wants to demonstrate that the software meets the requirements as defined in the beginning of the project. They are into requirements, traceability, and detailed upfront planning. The extremists among them believe you can test quality into a project, and that the only input for determining whether software works is formal requirements documentation. They are deeply concerned with planning the right tests, based on the requirements, that can demonstrate that the software meets the requirements. They love automated testing, test scripts, and planning. To them, test skills revolve around planning, analyzing requirements, using tools, and executing scripts. </p>
<p>This role is sometimes referred to as quality assurance. I think it&#8217;s a stupid, ambiguous term and that nobody knows exactly what is meant by it. </p>
<p>One of the outcomes of this school is specialization. The &#8220;good&#8221; testers don&#8217;t test &#8211; they right scripts based on requirements. They do this during the requirements phase of the project. Then, when code starts to ship to the test environment, they become test managers, watching over a horde of script-monkeys who execute scripts and report defects. The test manager gets the job of determining whether the defects are really defects or simply missed requirements, which only get fixed if the business agrees to pony up more moolah.</p>
<p><strong>Three good bug-hunters are worth thirty good script-monkeys and their boss</strong><br />
As a project manager, I don&#8217;t really have much use for school #2. There simply isn&#8217;t much value in &#8220;proving&#8221;, on a line-item basis, that the software my teams build meets the requirements. The only thing that really matters to me is whether the business accepts the software as meeting their needs, requirements be damned. My main concern in shipping software is that it 1) works and 2) has value. Oddly enough, the quality assurance school of software testing hasn&#8217;t helped me in either respect.</p>
<p>I find bug-hunters are much better at making sure the software works and that it meets the business&#8217;s needs. They tend to be good collaborators, and have very curious natures that drive them to interact with business partners and figure out their perspectives on the application being tested. They are capable of using requirements to figure out what the software is supposed to do, but they won&#8217;t rely on it exclusively. They are flexible and comfortable with ambiguity. This makes them very valuable team members.</p>
<p><strong>School #2 is crippled by its rigidity</strong><br />
The quality assurance approach only works well under ideal circumstances. My projects are never ideal. They are chaotic, crazy, short-term efforts that move rapidly and don&#8217;t rely on precise, complete documentation. They are a lot of fun and emphasize collaboration heavily. QA testers don&#8217;t fit in on my teams. They are too uptight, too focused on documentation, and too inflexible. I can&#8217;t use them.</p>
<p><strong>Both schools tend to have a near-religious fervor about their beliefs</strong><br />
For the testers who are very deeply rooted in their schools, discussion doesn&#8217;t really help much. You can&#8217;t talk school #2 into school #1, and vice-versa. The debate between these schools reminded me of biblical scholars with different views on the literal nature of scripture arguing whether Jonah really was swallowed by a whale, or of the fervor with which political leaders once fought the idea that the earth was round. Only when Columbus returned from the new world with coffee, chocolate, and gold, did they accept the truth, in spite of the fact that it was easily observable in the natural world.</p>
<p><div style="float: right"><script type="text/javascript"><!--
google_ad_client = "pub-9768843936559157";
/* 300x250 Post Ads */
google_ad_slot = "1495790255";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>You cannot convert school #2 to school #1 with words alone. You have to bring them chocolate, coffee, and gold from the new world. The earth is flat until they experience the zeal of finding bugs for themselves, until they get tired of shipping software that &#8220;meets the requirements&#8221; but doesn&#8217;t work or have value. You have to show them what good software really means before they will abandon their hordes of script-monkeys and join you on the bug hunt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/what-is-the-purpose-of-software-testing/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>The Contract-Driven Serial Development Movement</title>
		<link>http://www.techdarkside.com/the-contract-driven-serial-development-movement</link>
		<comments>http://www.techdarkside.com/the-contract-driven-serial-development-movement#comments</comments>
		<pubDate>Sun, 02 Mar 2008 13:58:20 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=219</guid>
		<description><![CDATA[There is a movement in software development that I call the contract-driven serial development movement. There are two distinguishing characteristics of software development lifecycles created by proponents of this movement: 1) the definition of deliverables in contractual form and 2) the delivery of deliverables in phases (i.e. requirements, design, construction, etc.). I suppose you could [...]]]></description>
			<content:encoded><![CDATA[<p>There is a movement in software development that I call the contract-driven serial development movement. There are two distinguishing characteristics of software development lifecycles created by proponents of this movement: 1) the definition of deliverables in contractual form and 2) the delivery of deliverables in phases (i.e. requirements, design, construction, etc.). I suppose you could also call this the &#8220;waterfall of blood&#8221; movement because it&#8217;s essentially waterfall with wet signatures at every stage. Many of its proponents would take this signatures in blood if they could.</p>
<p>Every movement is trying to solve at least one specific problem. This movement is trying to solve two, as far as I can tell:	</p>
<li>To mitigate the high cost of change by creating obstacles to change in the form of contracts and change control procedures</li>
<li>To facilitate the assignment of blame when things go poorly by defining all requirements rigidly, completely, and legalistically</li>
<p>I don&#8217;t believe this movement makes IT a better place. <span id="more-219"></span><div style="float: right"><script type="text/javascript"><!--
google_ad_client = "pub-9768843936559157";
/* 300x250 Post Ads */
google_ad_slot = "1495790255";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>In fact, I think it is a horrible movement, spread by technology people with thin skin, self-serving intentions, and weak imaginations. There are much healthier ways of dealing with these problems, and I am going to talk about a few of them. First, however, I want to debunk a few things.</p>
<p><strong>You can&#8217;t beat the cost-change curve by making change MORE expensive</strong><br />
Change control procedures do not reduce the cost of change. They add overhead to change, which makes it more expensive. Legalistic requirements documents add more cost &#8211; when &#8220;the business&#8221; has to commit to a set of documents being what they want, all they want, nothing more, and nothing less, it takes a significant effort to make sure those documents are correct. Especially if it means they have to wait twelve to eighteen months before they can realize any return on their investment, as is typical of serial development.</p>
<p>The cost change curve is one of the first things they teach project managers. &#8220;A change of requirements at the end of the project is a bazillion times more expensive than a change of requirements at the beginning.&#8221; It makes sense, and it sticks. PMs don&#8217;t forget that mantra.</p>
<p>Unfortunately, the cost change curve is also a function of the methodology you follow. The bazillion dollar cost of late change is a feature of serial development (waterfall), a self-fulfilling prophecy that is forced to be true by the project structure itself. Of course late requirements changes are orders-of-magnitude more expensive because you&#8217;ve already made all sorts of decisions based on them that would have to be unmade. You&#8217;ve built a huge pile of documentation with little or no business value that has to be re-vamped in order to make the change &#8220;right&#8221;.</p>
<p><strong>You can beat the cost-change curve by delivering incrementally</strong><br />
Let&#8217;s say that instead of delivering in phases you decide to deliver in increments. In other words, instead of delivering requirements after three months, then design after another three, and so forth, you instead deliver little chunks of working valuable software every one, two, or three months. You start each increment by working with the business to define that piece of functionality, then you build and deliver it as quickly as possible.</p>
<p>Change doesn&#8217;t cost as much when you do it this way. If your business partner decides that feature Y is suddenly critical while your building feature X, you can usually placate them by reminding them that feature X will be complete in a few weeks and then you will start on feature Y. </p>
<p>What if they decide to change feature X, which you&#8217;ve already built? Well, you just plan another increment to change it. It&#8217;s not unusual for people to change their minds about something they&#8217;ve previously only imagined once they see it built?</p>
<p>What if they decide to change feature X while you are building it? Just do it. If you are building in short increments, the impact of a change will be small. Maybe it adds a week, perhaps two. Tell the business what the change means and see how they respond. Big deal.</p>
<p>Building software in small incremental chunks flattens the cost-change curve.</p>
<p><strong>You can reduce the likelihood of change by building in small incremental chunks</strong><br />
The longer the amount of time lapses between the definition of a feature and its delivery to the business, the more likely it is to change. Change could be prompted by many factors such as government changes, market forces, and personnel changes. Heck, it could even be influenced by changes in the prescription medications your overwhelmed business partner consumes. </p>
<p>Change happens &#8211; and the longer the window you give it to happen in the more likely it is to occur. This is the great irony of the CDSD movement &#8211; it asks for more time for requirements and what-not, ignoring the dramatically increased likelihood of change that it&#8217;s approach to resisting change creates.</p>
<p><strong>Laying blame isn&#8217;t any easier just because you have contracts</strong><br />
Just ask a lawyer. Contracts don&#8217;t necessarily make it any easier to stop your business partner from throwing you under the bus when bad stuff happens. In fact, these contracts are frequently more ammo against you.</p>
<p>&#8220;IT said they would deliver this, but they did this instead.&#8221;</p>
<p>More importantly, if a technology solution is bad for the business, it doesn&#8217;t really matter if the contract specified that solution or not. Companies don&#8217;t get a get-out-of-jail-free card when it comes to market forces and competition. If you build the wrong thing and miss a market opportunity as a result, contracts are of little concern. The whole business is going to suffer, and you might have a smug sense of satisfaction because your petty little contract &#8220;proves&#8221; it&#8217;s the business&#8217;s fault and not IT&#8217;s, but it doesn&#8217;t make your project a success.</p>
<p>Perhaps if you hadn&#8217;t shoved CDSD down the business throat you might have been able to collaboratively deliver a better solution. Maybe it is your fault after all. That&#8217;s what it always boils down to. When these projects fail, IT says it&#8217;s the business&#8217;s fault. &#8220;See, it&#8217;s right here &#8211; you signed it.&#8221; The business sighs and says, &#8220;Yeah, we signed it&#8230; but if IT was more flexible, more able to respond to change, we would have solved this problem differently.&#8221; And then they outsource you.</p>
<p><strong>Reduce the impact of mistakes by delivering incremental chunks of working valuable software</strong><br />
Screwing up doesn&#8217;t have to hurt so bad. Mistakes happen, and blame gets apportioned, often unfairly. That blame, however, is typically proportional to the cost of the mistake. Because mistakes are so outrageously costly in CDSD, blame is often a pound of flesh or more. It doesn&#8217;t have to be that way.</p>
<p>Incremental delivery reduces the cost of big mistakes by reducing the amount of time it takes to discover them. Since you deliver working software every month or two, the business gets to see the project as it is built. This means they will identify mistakes early and you can correct for them. The worst cost of a mistake is typically one implementation cycle, and if you keep that down to a month or two, it&#8217;s not that big of a deal.</p>
<p><strong>Redefine project failure with incremental delivery</strong><br />
I&#8217;ve seen CDSD projects shutdown after eighteen months or more, having never delivered a line of code. That hurts. That&#8217;s money down the drain. What a demoralizing waste of resources. How sad. There is no hope of picking up such a project where it was left off &#8211; requirements documents, design documents, the labor of love of CDSD, have a very limited shelf life. They go bad faster than new bananas.</p>
<p>You can cancel any one of my projects six months in and I won&#8217;t be upset. Why? Because we have already delivered valuable working software. Generally speaking, we&#8217;ve already delivered the most important features. Move those resources around, assign us to something else, it doesn&#8217;t matter. It&#8217;s not money down the drain. We delivered something the business wanted, and then we shut it down. Big deal. We shipped software, software that worked and that had business value. We were successful.</p>
<p>Don&#8217;t buy into the Contract Driven Serial Development movement. It&#8217;s not good for you, for IT as a career, or for the business you signed up to serve. Kick it to the curb as a stupid idea, and then go write some code.<div style="float: right"><script type="text/javascript"><!--
google_ad_client = "pub-9768843936559157";
/* 300x250 Post Ads */
google_ad_slot = "1495790255";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/the-contract-driven-serial-development-movement/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Estimating Project Risk</title>
		<link>http://www.techdarkside.com/estimating-project-risk</link>
		<comments>http://www.techdarkside.com/estimating-project-risk#comments</comments>
		<pubDate>Mon, 25 Feb 2008 23:59:47 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=217</guid>
		<description><![CDATA[Most risk management approaches work something like this: 1) Keep a list of risks 2) Estimate the likelihood the risk will occur (call it X) 3) Estimate the cost the risk will create if it occurs (call it Y) 4) X times Y is supposed to tell you something useful &#8211; it might be the [...]]]></description>
			<content:encoded><![CDATA[<p><div style="float: right"><script type="text/javascript"><!--
google_ad_client = "pub-9768843936559157";
/* 300x250 Post Ads */
google_ad_slot = "1495790255";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Most risk management approaches work something like this:<br />
1) Keep a list of risks<br />
2) Estimate the likelihood the risk will occur (call it X)<br />
3) Estimate the cost the risk will create if it occurs (call it Y)<br />
4) X times Y is supposed to tell you something useful &#8211; it might be the amount of contingency you need for the risk, or something like that.<br />
5) When the risks you anticipated happen, they become issues<br />
6) When the risks you didn&#8217;t anticipate happen, you become a former project manager</p>
<p>I don&#8217;t really find this stuff useful on my projects. I&#8217;m not sure there&#8217;s any scientific research supporting the effectiveness of this approach, but I&#8217;d be surprised if there was any. Of all the &#8220;professions&#8221; project management seems to be one of the most easily infiltrated by anecdote and myth &#8211; I think the discipline of software project management is still so young that not many practitioners have begun questioning it&#8217;s foundations. The earth is still flat for IT project management, sadly. There are those who know the earth is round, like Johanna Rothman and the Poppendieck&#8217;s, but they aren&#8217;t enough to stop the massive institutional brainwashing of young project managers into phased development (aka waterfall). </p>
<p>But I digress. Here&#8217;s an alternative way to evaluate project risk that I think is much more useful.</p>
<p><em>Project risk grows exponentially with the smallest unit of time in which you can regularly deliver valuable working software.</em></p>
<p>If I didn&#8217;t lose you with my completely random outburst in the second paragraph, I probably lost you with the exponential stuff. Here&#8217;s what I mean:</p>
<p>If you can deliver valuable working software every two months (start-to-finish) then your overall project risk is pretty low. Why? Because every two months you get to re-adjust, re-plan, and re-prioritize with the people who care about your project, and any mistakes can be fixed in two months or less. </p>
<p><strong>Projects requiring six months to deliver valuable working software should automatically be considered medium to high risk of outright failure.</strong><br />
Sometimes, the delivery of valuable working software takes longer, say six months or so of work. This sucks, but it happens. This is a lot higher risk, a lot more than three times as risky. I&#8217;d suggest it&#8217;s about ten times as risky. You are ten times as likely to fail at a six month effort than a two month effort. Risk of bad stuff grows exponentially the longer you are exposed to them. Here&#8217;s an example, albeit a bit morbid: What are the odds one of your team members will collapse and die tomorrow? Pretty slim, I hope. But, what are the odds that one of your team members will die, quit, get re-assigned, get sick, or go on maternity leave in the next six months? Much higher. </p>
<p><strong>Long odds for long deliveries</strong><br />
Projects that invest twelve months or more before there is a return have extremely high failure rates. I believe they are at least 100 times more likely to fail than projects that can deliver valuable working software in two-month units. These projects should be considered extremely high risk. I have always managed to stay away from projects that have twelve months between start and delivery, and I thank my lucky stars for that. </p>
<p><strong>Long projects don&#8217;t have to have long delivery cycles</strong><br />
I just finished an eighteen month project that had a multi-million dollar budget, but not once did I start an iteration that lasted more than two or three months. We never attempted to build anything we couldn&#8217;t do in two or three months, and we always had a pretty small team. Sometimes we had multiple small things working on parallel threads, but they always delivered valuable software that worked in a short time frame. It was a weird feeling last month when we shipped the last release and realized we were done. It was like we had moved a mountain, one pebble at a time, and we didn&#8217;t really see the mountain had moved until the last pebble was gone. It didn&#8217;t feel like we&#8217;d just moved a mountain &#8211; more like we&#8217;d just had a reasonably nice stretch of work, busy but not buried, challenged but not hopeless. It felt good.</p>
<p><strong>Control the delivery cycle and you have controlled the risk</strong><br />
Creative people with decent technical backgrounds and an interest in the needs of their business partners can find ways to divide projects into smaller feature sets that can be delivered in two months.  And, if you can manage to structure your project in two month chunks, you have just dramatically reduced the overall risk of your project and created a project structure that is more easily adapted to the potentially changing needs of your biz partners. It also reduces the tendency of team members to create unnecessary work or to argue to long about anything &#8211; urgency is something you can feel on two month projects.</p>
<p>You might think I&#8217;m full of crap. Go ahead and tell me so, I don&#8217;t care. But try it. Now. Don&#8217;t wait for your twelve month project to go eleven months without shipping jack to give something like this a shot. What can it hurt you to try it? It&#8217;s not like you&#8217;re going to look like an idiot for delivering something quickly, and what if it really can reduce the risk of your project by a factor of 100? It&#8217;s not like you were planning on shipping anything in month three anyway&#8230;</p>
<p>-Dave</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/estimating-project-risk/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Art of Project Design</title>
		<link>http://www.techdarkside.com/the-art-of-project-design</link>
		<comments>http://www.techdarkside.com/the-art-of-project-design#comments</comments>
		<pubDate>Thu, 14 Feb 2008 13:50:50 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=213</guid>
		<description><![CDATA[Here&#8217;s part of an email I received last week about project planning from a reader named Melinda: I was wondering&#8230;.would you be able to post an article about the Art of designing a good project plan. There are tons of books on using MS Project and tons of Books on PMP concepts (initialize, plan&#8230;etc), but [...]]]></description>
			<content:encoded><![CDATA[<p><div style="float: right"><script type="text/javascript"><!--
google_ad_client = "pub-9768843936559157";
/* 300x250 Post Ads */
google_ad_slot = "1495790255";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Here&#8217;s part of an email I received last week about project planning from a reader named Melinda:<br />
<em>I was wondering&#8230;.would you be able to post an article about the Art of designing a good project plan.  There are tons of books on using MS Project and tons of Books on PMP concepts (initialize, plan&#8230;etc), but a well constructed project plan on a real project is always different.  Or expressed another way, in Learn to Program in Java books, there are always the &#8220;Hello World&#8221; type example but just because you have mastered those &#8220;Hello Worlds&#8221; doesn&#8217;t necessarily mean that you have a grasp of designing a large J2EE project for a unique company project or that you have even grasped the OO concept accurately.  In that same vein, there are no books, no blogs, no websites, no YouTube vidoes, etc on the &#8220;art&#8221; of creating effective project plans for large software development efforts (that include everything from procuring software, hardware, setup, change management, etc).</em></p>
<p>I believe Melinda is really asking about a topic I call project design. It is part analysis, part planning, and part problem-solving. I am going to outline a few principles today that I think are important for project design, and in a later post will go into more detail on each of them.</p>
<p><strong>A well designed project doesn&#8217;t need Microsoft Project.</strong><br />
I haven&#8217;t used Project in over two years, in spite of the fact that I have been managing a multi-million dollar program that spans five different systems at my employer. We just put our last release into production last weekend, and not once did I open MS Project to create or update a project plan. A lot of people write this off by saying that my project is &#8220;simple&#8221;. It&#8217;s not. There are lots of integrations, changes in multiple systems that depend on each other, and several different organizations involved. My plan, on the other hand, is simple, because I&#8217;ve designed my project in a way that makes planning simpler.</p>
<p>That said, I do have a Gantt chart, but I make it in Excel, and it really is nothing more than a release plan. It shows which features will ship when, and I use it every couple of months to talk about what we will build next with my business partner.</p>
<p><strong>Focus on features, not phases</strong><br />
Separating projects into distinct phases like initiation, planning, design, construction, testing, implementation, etc makes the planning more difficult, and it increases the risk of the project. Rather than starting with a list of phases, as most PMBOK-trained PM&#8217;s do, start with the features list.</p>
<p>Group the features that are similar. I talked about this a few days ago in a post called competence pie. Then, prioritize the groups of features with your business partners. Which are easiest to build? Which features can&#8217;t be built until some other feature is built? Which one should be built first?</p>
<p><strong>Build the &#8220;best&#8221; features first</strong><br />
Try to make a smart choice about the feature you will build first. You&#8217;re going to learn a lot in the first iteration, which means you&#8217;re going to have mistakes that need to be fixed. Pick a feature that has business value, but also will be a learning experience. Don&#8217;t pick the easiest one first, but don&#8217;t necessarily go for the toughest one either. </p>
<p>My reasoning for this is simple. Project teams need to gel, and they need to explore the problem space. I&#8217;m always amazed at how the productivity of a team increases after the first release and at how much better we understand the remaining work.</p>
<p><strong>Further group the features by what can be delivered in about two months</strong><br />
Long releases suck the life and soul out of project teams and business partners. Short releases build energy for both, because you can see the product evolving rapidly.</p>
<p>Organize your features into sets that your project team can build out in two months or less. If some of the feature sets you identified earlier are too large, split them up. Those that are too small can be combined. Review this with your business partner to make sure you haven&#8217;t missed something &#8211; sometimes one feature can&#8217;t be shipped without the other.</p>
<p><strong>Make a Gantt chart that is based on feature delivery</strong><br />
Take your prioritized list of features and build a Gantt chart. I use Excel for this. Each row is a release, and I list the feature groups in the first cell. Then I make a column for each month and start planning which feature groups go when. I use a color coding system to differentiate between firm dates and tentative dates. I usually don&#8217;t have firm dates outside of two or three months ahead.</p>
<p><strong>Collaborate with your business partner</strong><br />
This sort of planning is not what our business partners are used to, although I&#8217;ve found they much prefer it to phase-based plans that don&#8217;t let them see the product until the very end. If they are used to phase-based planning, you&#8217;ve got to get them over the hump, so to speak, to embrace this approach. Develop this plan with them, involving them at every step, and they will support you.</p>
<p><strong>Plan every day</strong><br />
Melinda, I can hear you objecting to this approach right now. &#8220;But that&#8217;s not a complete project plan,&#8221; you are probably saying, and you&#8217;re right. I haven&#8217;t planned every single task that needs to be done along the way.  I don&#8217;t do that planning until we start an iteration. Then, the project team and I sit down and quickly list out everything we need to do. We don&#8217;t try to plan iterations before we&#8217;re ready to start them. I&#8217;ve found this to be very beneficial, because it allows me to take into account changes in the team structure, business environment, business needs, etc. along the way. I don&#8217;t have to worry about whether my plans will be changed by outside factors because I haven&#8217;t set them in stone yet.</p>
<p><strong>Build up to parallel efforts</strong><br />
After a couple of releases, you&#8217;ll realize you could increase the pace by having two tracks going at once, offset by a month. This will double the pace and result in monthly deliveries instead of bi-monthly deliveries. If you thought the business was happy before, you should see how they respond to this acceleration.</p>
<p>Please don&#8217;t split team members between releases (i.e. no multi-project multi-tasking). Productivity will plummet if you do. To run in parallel, you will need another team.</p>
<p><strong>Measure the past to predict the future</strong><br />
Your first couple of iterations are very important because they will have the most impact on your overall plan/strategy. They will either validate the time-boxed chunks of work as being achievable or force you to re-design the project once you have gotten a sense of the pace your team can achieve. Make sure you involve your business partner in any refactoring you do, because you will need her support.</p>
<p><strong>Build hardware environments in parallel with software development</strong><br />
Sometimes a software project also comes with a hardware project. This might mean you can&#8217;t deliver anything to production until the hardware is in place. If that&#8217;s the case, run it in parallel, and try to keep your software development team from getting bogged down in the hardware project, especially the procurement process. Build your hardware environment in a similar fashion &#8211; don&#8217;t do it in phases, but do it by environment. Build test first, then stage (if you need one), then prod. Leverage the things you learn along the way, and don&#8217;t build the next environment until you&#8217;ve delivered some code to the one you just finished. </p>
<p>Be careful though &#8211; sometimes the logistics in hardware procurement is very painful and you might need a lot more time to get hardware than  to build software. I recently completed a software project faster than our procurement office could acquire technology, and as a result we had to wait for the technology to ship for over a month. If this happens, use the situation and your business partner to put pressure on your procurement chain to hurry. It generally works &#8211; nobody likes to be reason a production release is delayed.</p>
<p>Melinda, this probably isn&#8217;t the answer you were looking for. I know I have a fundamentally different approach to planning than many PM&#8217;s, but my projects are considerably more flexible than other projects I&#8217;ve observed, and I don&#8217;t spend a lot of time updating a project plan that is way too detailed. At any rate, it works for me. Please let me know what you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/the-art-of-project-design/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Competence Pie</title>
		<link>http://www.techdarkside.com/the-pie-model-for-competence</link>
		<comments>http://www.techdarkside.com/the-pie-model-for-competence#comments</comments>
		<pubDate>Tue, 12 Feb 2008 13:42:32 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=211</guid>
		<description><![CDATA[A while back I blogged about the five different ways we subconsciously evaluate each other&#8217;s competence. It&#8217;s been on my mind ever since, especially since I have recently changed assignments and teams. Developing competence in my new problem space as quickly as possible is very important to me right now, and I&#8217;ve been attacking the [...]]]></description>
			<content:encoded><![CDATA[<p><div style="float: right"><script type="text/javascript"><!--
google_ad_client = "pub-9768843936559157";
/* 300x250 Post Ads */
google_ad_slot = "1495790255";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>A while back I blogged about the five different ways we subconsciously evaluate each other&#8217;s competence. It&#8217;s been on my mind ever since, especially since I have recently changed assignments and teams. Developing competence in my new problem space as quickly as possible is very important to me right now, and I&#8217;ve been attacking the vocabulary of the project diligently so that I can speak the language of the project. In the process, I&#8217;ve had a few brainwaves.</p>
<p><strong>Expression is the act of defining (or re-defining) the project vocabulary.</strong><br />
This is the most advanced of the five areas of competence that I described (engagement, fluency, comprehension, implication and nuance, and expression). I struggled to define it well in my original post. I think expression is the ability to effectively define the vocabulary of the project, to give names and categories to things that were chaotic and unorganized. It is a key part of developing a project strategy that allows incremental delivery, to create affinity groups of features and give them names. Here&#8217;s an example:</p>
<p>A business person gives you a list of features they want a web app to have, in no particular order and with no particular grouping of the features. It might be something like this:</p>
<li>Verify new users&#8217; identities using existing account information</li>
<li>Display account balance and payment history</li>
<li>Make a payment</li>
<li>View a statement</li>
<li>Change account information (address, phone, etc)</li>
<li>Contact customer service by email</li>
<li>Have a live chat with a CSR</li>
<li>Refer a friend</li>
<li>etc&#8230;</li>
<p> I&#8217;ve seen lists like this that go on for pages &#8211; it can be daunting and seem chaotic. Taking this unorganized list of features and making it manageable is an act of expression, because you group those features in affinity sets, which is a fancy way of saying that you take similar features and group them together. Here&#8217;s one way you might start grouping the features above:<br />
	<strong>User Support</strong><br />
	   Contact customer service by email<br />
	   Have a live chat with a CSR</p>
<p>	<strong>User Enrollment</strong><br />
	   Verify new user&#8217;s identities using existing account information</p>
<p>	<strong>Account Management</strong><br />
	   Change account informat (address, phone, etc)<br />
	   Make a payment<br />
	   View a statement</p>
<p>I didn&#8217;t do a complete decomp of the first list &#8211; this is just an example to help explain what I mean by expression. One of the things that I&#8217;ve seen happen when I am able to use expression well is that it inspires a re-thinking of the requirements so far. For instance, I would expect a business person to look at User Enrollment and say something like &#8220;you know, there&#8217;s a lot more to user enrollment than just verifying identity.&#8221; Then, we would add stuff to that list. </p>
<p>We also prioritize the groups, and start planning iterations to implement the high priority items. This is also an act of expression, because you are starting to turn the list of features into something more &#8211; an implementation strategy.</p>
<p><strong>Competence Pie</strong><br />
I like to model concepts visually, and I&#8217;ve come up with a model for perceiving and building competence &#8211; I call it competence pie.</p>
<p><a href='http://www.techdarkside.com/wp-content/uploads/2008/02/competencepie.jpg' title='Competence Pie'><img src='http://www.techdarkside.com/wp-content/uploads/2008/02/competencepie.jpg' alt='Competence Pie' /></a></p>
<p><strong>Others Need to See Your Competence if it&#8217;s Going to Benefit You</strong><br />
Being the manager of a project is not just about being competent. You have to be competent &#8211; faking it is a short term strategy that will eventually fail if you don&#8217;t use it to buy time to build real competence. That said, being perceived as competent is also critical. You need to demonstrate your competence to your business partners, your project team, and your IT management if you want your project to be successful. They need to have confidence in you. Not building that confidence will open the door to a host of troubles, including micro-management, dissent on the technical team, and poor collaboration with the business.</p>
<p>Build real competence, and show it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/the-pie-model-for-competence/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Demonstrate Competence by Developing Your Project Fluency</title>
		<link>http://www.techdarkside.com/demonstrate-competence-by-developing-your-project-fluency</link>
		<comments>http://www.techdarkside.com/demonstrate-competence-by-developing-your-project-fluency#comments</comments>
		<pubDate>Wed, 30 Jan 2008 12:36:13 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=205</guid>
		<description><![CDATA[A few days ago I blogged about five ways we intuitively evaluate each other&#8217;s competency. Fluency, the ability to use the vocabulary of the project comfortably, is one of the most important. Without fluency, it&#8217;s hard to move on to comprehension, expression, and nuance. If you can&#8217;t speak the language of the project, you won&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago I blogged about five ways we intuitively evaluate each other&#8217;s competency. Fluency, the ability to use the vocabulary of the project comfortably, is one of the most important. Without fluency, it&#8217;s hard to move on to comprehension, expression, and nuance. If you can&#8217;t speak the language of the project, you won&#8217;t be able to understand the consequences of changes to the project easily. </p>
<p>Even if you manage to develop comprehension without fluency, it won&#8217;t benefit you much. After a brief grace period, people will begin to treat you as incompetent even if you are not, simply because you don&#8217;t grasp the terminology of the situation. As an example, I can overlook a new hire saying something really stupid like &#8220;Java Real-time Engine&#8221; instead of &#8220;Java Run-time Engine&#8221;, but I wouldn&#8217;t overlook that in a job interview with an allegedly &#8220;experienced&#8221; developer, manager, tester, or analyst.</p>
<p>Fluency can be broken up into several different areas, and it&#8217;s important that you come up to speed on the right ones rapidly, depending on your role. Here are some common areas I focus on, in no particular order:</p>
<li>Technology: J2EE? ROR? .NET? CICS/COBOL? Whatever technology is in play, there is a vocabulary to accompany it. The example in the previous paragraph is of Technology Fluency.</li>
<li>Context: What problems is the project attempting to solve? Who cares about these problems, and why are they important?</li>
<li>People: Who is on the project and what do they do? What are they good at? What are their limitations?</li>
<li>Trouble: What do people worry about? What keeps them awake at night? Sometimes you can find this stuff on issue/risk lists, but not usually.</li>
<li>Features/Scope: What is the project going to build? What business capabilities are in scope? </li>
<li>Design: What are the major software components of the project? How do they interact? What is the relative complexity of each of them?</li>
<p>This isn&#8217;t an exhaustive list but it&#8217;s a good place to start. You should be able to summarize each of these, even if you don&#8217;t understand them perfectly, within a week or two of engaging in a new project. If you can&#8217;t you risk others thinking of you as incompetent or disengaged.</p>
<p>It&#8217;s not that difficult to come up to speed on these things quickly, if you do it consciously. Carry a moleskine with you, and make notes in it as you talk to people. The act of writing stuff down cements it in your brain. If you&#8217;re in a meeting and someone is describing features to you, get a marker and draw it on the whiteboard, to make sure you understand. If someone asks you about the project, try to answer them from memory. If you can&#8217;t, tell them you will find the information and get back to them. DON&#8217;T SEND THEM CHASING THE ANSWER IN DOCUMENTS IF YOU CAN&#8217;T ANSWER THE QUESTION. This simply postpones learning for you, and you don&#8217;t want to do that. It&#8217;s okay to send someone after documents when you do understand, if you have a reason to do so (like lack of time, etc), but only when you are already fluent.</p>
<p>Developing fluency is critical, not only in appearing competent, but actually being competent. I know it&#8217;s a bit squirmy feeling to think of oneself as incompetent, but if you or I can&#8217;t easily and accurately describe the six aspects of a project mentioned above without referencing notes, documents, or &#8220;experts&#8221;, we should consider the possibility that we are in fact incompetent to some degree. And others can see it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/demonstrate-competence-by-developing-your-project-fluency/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Specialists? We Don&#8217;t Need No Stinking Specialists</title>
		<link>http://www.techdarkside.com/specialists-we-dont-need-no-stinking-specialists</link>
		<comments>http://www.techdarkside.com/specialists-we-dont-need-no-stinking-specialists#comments</comments>
		<pubDate>Tue, 29 Jan 2008 00:22:29 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=204</guid>
		<description><![CDATA[I tend not to use specialists on my projects. I generally find I don&#8217;t need business analysts, testers, designers, etc. The exception is performance testing &#8211; I need a specialist for that. I can imagine scenarios where I would bring in dedicated testers or analysts, but these are exception scenarios, not the norm. I&#8217;ve been [...]]]></description>
			<content:encoded><![CDATA[<p><div style="float: right"><script type="text/javascript"><!--
google_ad_client = "pub-9768843936559157";
/* 300x250 Post Ads */
google_ad_slot = "1495790255";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>I tend not to use specialists on my projects. I generally find I don&#8217;t need business analysts, testers, designers, etc. The exception is performance testing &#8211; I need a specialist for that. I can imagine scenarios where I would bring in dedicated testers or analysts, but these are exception scenarios, not the norm.</p>
<p>I&#8217;ve been wondering why this is. Other project managers I know rely heavily on specialists, particularly business analysts, to make their projects successful. One of my colleagues recently observed that I don&#8217;t need analysts because I do all the analysis myself. I guess that&#8217;s partially true &#8211; the abilities to understand business needs, analyze them, design solutions to meet them, refine designs based on feedback, implement them, and then test them effectively are prerequisites to being on my project team. I don&#8217;t work with &#8220;just&#8221; coders, testers, analysts, or other specialists unless I have a specific need for a specific skill. This need <strong>must</strong> go beyond what I consider fundamental software development, which includes a certain proficiency at analysis, design, coding, and testing.</p>
<p>Are these specialties valuable? Yes, absolutely. There is a craft to testing that only a few have really mastered. I am lucky enough to know a few of them, and it has broadened my perspective. The same might also be true of business analysis in software projects, I just haven&#8217;t observed it yet. </p>
<p>That said, I believe the importance of specialists in software projects is largely overstated for all types of specialists, including project managers. Not every project needs a dedicated PM, tester, analyst, architect, etc. You don&#8217;t need Magellan to find your way to work, and I don&#8217;t need a tester every time code gets written. </p>
<p>To make matters worse, division of labor across a series of specialists doesn&#8217;t often make sense, although corporate IT continues to move in that direction in spite of the gross failure of waterfall and other phase-based approaches over the last thirty years. Specialization works when the hand-off between specialists is relatively inexpensive, such as in the case of the hand-off from a framer to a sheet-rocker to a trim carpenter to a painter to a &#8230; etc. Framers don&#8217;t produce hundred page documents telling the sheet rocker what to do. It&#8217;s relatively obvious what he needs to do, and the communications mechanism for that exchange evolved very quickly into standards that are widely accepted across that industry.</p>
<p>This is not generally how software projects work. Instead, analysts have to produce copious documents that aren&#8217;t easily turned into design and code and tests and software deliveries. We&#8217;ve been trying to establish easy to follow standards for this hand-off for more than a lifetime. I think it&#8217;s time we accepted this and relied on upfront analysis only as a last resort.</p>
<p>Another scenario where specialization works is when the work requires so much knowledge that it&#8217;s impossible for a generalist to perform. Heart surgery, for instance, is not something a family doctor does. Nor would I recommend you try to restore a hundred year old work of art just because you know where Hobby Lobby is. This is, I believe, what many forms of testing are. Security testing, performance testing, usability testing, and lots of other testing areas are not for the untrained. I don&#8217;t think it applies to a lot of the run-of-the-mill software testing I see in projects around me, even though these projects have brought in specialists to do that work.</p>
<p>There are other reasons for bringing in specialists. Sometimes, when a team establishes a rhythm for development that is consistent and sustainable, certain activities reach a threshold where it makes sense to bring in specialists. Maintenance comes to mind, especially if the tickets tend to be fairly self-contained.</p>
<p>I hope nobody thinks I&#8217;m trashing the crafts of testing, business analysis, coding, etc. These are valuable and necessary, and I think that&#8217;s my point. Specialists make it easy for coders to think they don&#8217;t need to be able to test or talk to business users, and I think this is generally harmful to the software development profession as a whole. Everyone needs to be able to wear those hats to a certain degree and should focus some energy on developing their ability to play in every aspect of a project and contribute meaningfully.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/specialists-we-dont-need-no-stinking-specialists/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

