<?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>Travis Dunn &#187; Project Management</title>
	<atom:link href="http://www.travisdunn.com/tag/project-management/feed" rel="self" type="application/rss+xml" />
	<link>http://www.travisdunn.com</link>
	<description>There is neither speech nor language but their voice is heard among them</description>
	<lastBuildDate>Tue, 26 Jan 2010 19:47:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>9 Ways Developers Fail to Accommodate Business</title>
		<link>http://www.travisdunn.com/9-ways-developers-fail-to-accommodate-business</link>
		<comments>http://www.travisdunn.com/9-ways-developers-fail-to-accommodate-business#comments</comments>
		<pubDate>Tue, 15 Sep 2009 06:37:56 +0000</pubDate>
		<dc:creator>Travis</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Universal  Law]]></category>

		<guid isPermaLink="false">http://www.travisdunn.com/?p=747</guid>
		<description><![CDATA[We continually hear from developers how they're crippled or oppressed by clueless business interests, but there are a lot of ways developers contribute to this environment, or impose their own prejudices onto a team. I'm taking a moment of self-reflection to list our profession's inconspicuous shortcomings.]]></description>
			<content:encoded><![CDATA[<p>Developers tend to advertise themselves, indeed, their entire profession, as a pragmatic yet sophisticated participant in business, creating real human value while neatly abstracting away the complexities of technology. They often see themselves in opposition to other participants, engaging in heroics, or protectionism, or just toiling unsung for the higher good. </p>
<p>It&#8217;s a flattering portrait that manages to combine superiority, rationality, and integrity in the developer&#8217;s character, appearing all the more inviolable when compared to abusive, thoughtless management or the gasping demands of the customer.</p>
<p><img src="http://www.travisdunn.com/wp-content/uploads/2009/09/The-Lawnmower-Man.jpg" alt="The Lawnmower Man was an irresponsible developer" title="The Lawnmower Man was an irresponsible developer" width="425" height="209" class="size-full wp-image-748" /></p>
<p>These are gross straw-men, however. Even if, as developers, the relationship between business and technology, between corporate and creative, places us under the thumb of clueless decision makers, and even if those authorities are wielding capricious power that can entangle and maim a project, we still have much to answer for ourselves, nor are we as martyred as we like to believe.</p>
<p>If management abuses power, then developers abuse knowledge. It&#8217;s around this fact where developers most often fail to support business needs and the &#8220;outsiders&#8221; who control them. We act as the privileged gatekeepers for warrens of technological complexity, and it&#8217;s our responsibility to examine, understand, distill, and communicate the features and tradeoffs of these systems. When we hoard knowledge, saturate our colleagues with irrelevant details, or refuse to take responsibility outside of our technological boundaries, we fail business. </p>
<p>And it&#8217;s not always a failure of omission or laziness, because by deliberately hiding or revealing technical facts, developers have the power to steer business decisions and often use this power to a greater or lesser degree in fighting back against perceived corporate hostilities or mistakes. Such influence may be well-meaning or even necessary, but often it&#8217;s the result of tensions appearing in a project or a developer who miscalculates their role.</p>
<p>With that said, here are some of the ways that developers fail their businesses.</p>
<p><strong>1. Justification Fail:</strong> a failure to rationalize our technical decisions to others and adequately explain our decision making process. As much as software development is about managing tradeoffs, it&#8217;s important that we remain aware of the reasoning behind founding technical decisions we make, and likewise important to be able to account for our rationale to laymen.</p>
<p><strong>2. Dependency Fail:</strong> a failure to understand, lucidly explain, or else <em>explain at the right moment</em> the deep dependencies between technical components, and the ramifications these relationships impose on system design or change requests. It&#8217;s the absolute responsibility of the developer to inform others when outside influence is threatening a dependency such that subsidiary work will be required or other unintended consequences may occur. </p>
<p>This is one of the most serious fails a developer can make, since we&#8217;re normally the only individuals with a clear understanding of a system&#8217;s composition and behaviors and the ways these drive each other. We&#8217;re also a vanguard, expected to remain vigilant to dependency problems that emerge in the course of development, and only we have the power to alert the team to forthcoming dependency tension or else fail to do so.</p>
<p><strong>3. Transparency Fail:</strong> Due to the arcane nature of development work, it&#8217;s easy for our habitual work efforts to become unintelligible, maybe even invisible, to outsiders. It&#8217;s our failure that we don&#8217;t make some effort to communicate our activities at a high level, so that colleagues feel everyone is moving forward together.</p>
<p><strong>4. Scheduling Fail:</strong> a common failure, partly due to the nature of software development, but also because developers are prone to confusing known and unknown elements, or mistaking the later for the former. When estimating development schedules, we ought to provide solid estimates for tasks of known scope while allowing for sufficient leeway in undertaking tasks of unknown scope.</p>
<p><strong>5. Knowledge Transfer Fail:</strong> accumulating vast reserves of formal and informal intelligence about a system, developers often fail to share that knowledge, and become human silos for some of the most core competencies of a company. A developer should be to some extent documenting their design and decision making process in respect to current development work AND to how it may impact future development. Transferring knowledge means allowing other developers to quickly adopt the insights and proceedings you&#8217;ve recorded, while failing to do so means making yourself both an essential resource but also an extreme liability.</p>
<p><strong>6. Platform Fail:</strong> a failure to select a platform or implementation for ANY reasons other than it&#8217;s inappropriateness to the project on hand and direct development productivity. Playing favorites with technologies is a selfish and chauvinistic fail, and developers ought to be expected to learn new platforms when it makes sense to do so, and to evaluate them so they recognize that sensibility in the first place.</p>
<p><strong>7. Security Fail:</strong> while security is often overlooked by all sectors of business, a developer should always be passively aware of vulnerabilities in the systems they command, and go out of their way to ensure that even if these aren&#8217;t addressed that the risks and consequences are understood by everyone accountable. Only a developer can evaluate this accurately, so they must be a vocal advocate of security (or lack thereof) awareness.</p>
<p><strong>8. Priority Fail:</strong> failing to prioritize workloads based on productivity, business requirements, or known scope is inimical to a project. Approaching development on the basis of personal or professional interest undermines the already fragile development cycle, and is by contrast a demotivating factor when it comes time for the priority work to be tackled.</p>
<p><strong>9. Social Fail:</strong> there are plenty of fail-heavy stereotypes about developer personalities, and they aren&#8217;t worth rehearsing because by social failure I don&#8217;t mean likability, but rather failing to integrate with a team, as if you yourself were some closed social format and the rest of your office was talking in open source protocols. </p>
<p>I wouldn&#8217;t call unfriendliness or cynicism a fail, but not sharing your insights and teaching things to your team, not advocating for best practices or introducing ground-up improvement in your team&#8217;s spoken or unspoken development methodology, refusing to support incidentally related issues with your expertise, neglecting all efforts to advocate richer and more interesting possibilities for technology, and proudly shunning compromise during interpersonal conflict, these all constitute grounds for social failure where a developer, a considerable repository of knowledge and opinion, neglects to participate in their community or decides that other humans must implement implement <em>their</em> jobs to the developer&#8217;s &#8220;proprietary, social specifications&#8221;.</p>
<hr />
<p>However true it is that development is often scapegoated, mistreated, distrusted, overruled, or abused by Corporate Masters, this shouldn&#8217;t be cause to retreat from a wider prospective or shut ourselves off to the subtle or reactionary or purely unintentional ways we fail to contribute larger project goals. It should never be an excuse for our own incompetency or negligence, and I think the developer community would be much better served by relaxing some of its criticism of other vocations and tightening the criticism of its own habits. </p>
<p>Software projects rarely fail for technical reasons, but developers tend to accept this as evidence that they have no done wrong, when they are just as human and answerable as anyway else involved. Our value as developers derives heavily from our wisdom, insight, and expertise. When we miscalculate the importance of that, or selectively use it to exert control, we are failing the businesses, and people, that we are supposed to help.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.travisdunn.com/9-ways-developers-fail-to-accommodate-business/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tripling Programmer Estimates</title>
		<link>http://www.travisdunn.com/tripling-programmer-estimates</link>
		<comments>http://www.travisdunn.com/tripling-programmer-estimates#comments</comments>
		<pubDate>Sun, 09 Aug 2009 17:16:22 +0000</pubDate>
		<dc:creator>Travis</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Universal  Law]]></category>

		<guid isPermaLink="false">http://www.travisdunn.com/?p=318</guid>
		<description><![CDATA[Conventional wisdom has it that when asked for an estimate, a programmer will recede into fitful contemplation, perhaps aided by private notes scribbled in parallel, only to produce a number that should dutifully be multiplied by three for the sake of reality. Nobody can say where this constant came from, or why it so often hits the mark. Excluding some kind of the anthropic principle, I can imagine an answer.]]></description>
			<content:encoded><![CDATA[<p>Conventional wisdom has it that when asked for an estimate, a programmer will recede into fitful contemplation, perhaps aided by private notes scribbled in parallel, only to produce a number that should dutifully be multiplied by three for the sake of reality. Nobody can say where this constant came from, or why it so often hits the mark. Excluding some kind of the anthropic principle, I can imagine an answer.</p>
<p><img class="size-full wp-image-325" title="Universal Constants" src="http://www.travisdunn.com/wp-content/uploads/2009/08/programmer-estimates.jpg" alt="Universal Constants" width="418" height="136" /></p>
<h3>1st Factor: Accurate in Theory</h3>
<p>When a developer provides an estimate, it’s usually quite accurate, derived from a history of similar tasks and projects, as applied now on the platform in question. If development transpired without challenges and unknowns, there would be no need for further multiplication, but this estimate tends to be generous on two points: (1) that any obstacles which arise can be overcome quickly, and (2) that the scope of the details can be foreseen.</p>
<p>A chaste estimate from a developer represents the time it would take to complete the task if they remained in an uninterrupted state of 100% productive time, all the time.</p>
<h3>2nd Factor: R&amp;B (Research/Refactoring and Bugs)</h3>
<p>The second factor comes from a collective yet measured cynicism towards bugs. It’s never the bugs you expect that kill productivity, and so it’s hard to anticipate the cumulative damage they will cause a schedule.</p>
<p>Estimates often overlook the research necessary before implementing new technologies, techniques, or integrating with other services. Every developer will invest time in researching an optimal approach for any number of project scenarios that require such analysis, but it’s easy to overlook the process in the course of initial estimation.</p>
<p>Combined, research and bug hunting/refactoring out of unfeasible solutions should at worst grow to the size of the normal development schedule itself, hence the multiplier. It’s a guard limit which, should you reach, you know your project’s in trouble, but if you don’t, then you understand as a natural appendage of development.</p>
<h3>3rd Factor: The first 90% and the last 90%</h3>
<p>This is about overlooking details which enlarge the scope of a task from beneath. When estimating, it’s easy to mentally do class modeling or construct a theoretical workflow or protocol, but it’s difficult to envision the extent of scaffolding that will be needed to facilitate the actual task. This will take the form of helper functions, refactoring and code hygiene, design improvements, and so forth, and are the tale of elegance and quality a good developer brings to the code.</p>
<p>As developers we sense the presence of this work, but during the estimation process it&#8217;s much more natural to think from higher levels of abstraction without realizing what’s required to build that abstraction in the first place.</p>
<p>This factor also represents the strange heuristic that developers must complete 90% of a project twice before the project is really complete. When an  irrational exuberance starts signaling in the back of our mind that we’re only a few methods and tests away from delivery, we can recognize this as an emotional vanguard meaning we’re, in fact, approximately halfway from having actually completed our work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.travisdunn.com/tripling-programmer-estimates/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
