<?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>Software Creation Mystery &#187; Management</title>
	<atom:link href="http://softwarecreation.org/category/management/feed/" rel="self" type="application/rss+xml" />
	<link>http://softwarecreation.org</link>
	<description>What are the forces behind software development?</description>
	<lastBuildDate>Wed, 07 Jul 2010 04:34:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Reliable Software Development Process: The Toyota Way</title>
		<link>http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/</link>
		<comments>http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 03:06:33 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Teams]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/</guid>
		<description><![CDATA[Share
A software project is a creative, unique and therefore unpredictable endeavor. We are not building the same thing over and over again, but solve new problems, address increasing demands and use perpetually changing technologies. Under these conditions, people &#8211; smart, creative and productive &#8211; are the most important factor of success . Software development process [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/&amp;title=Reliable+Software+Development+Process%3A+The+Toyota+Way&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><img src="http://softwarecreation.org/images/2009/toyota-factory.jpg" /></p>
<p>A software project is a creative, unique and therefore unpredictable endeavor. We are not building the same thing over and over again, but solve new problems, address increasing demands and use perpetually changing technologies. Under these conditions, people &#8211; smart, creative and productive &#8211; are the most important factor of success . Software development process can only support and compliment these people, but it cannot guarantee success alone and make the factor of people negligible.</p>
<p><strong>But</strong>, business wants predictable, reliable and successful results. I bet they don&#8217;t want to be at mercy how cards are shuffled in their talented development team. The answer is in establishing a process that increases chances of success and aligned with present nature of software development (unpredictable, empirical and heavily dependent on people).</p>
<p>The Toyota Way can be a great example that worth to learn. Toyota evolved from a small looming equipment shop to the largest car manufacturing company. The main foundation of successful growth is the system of few core principles that enables <strong>best quality, high productivity, lowest cost, shortest time and long-term success</strong>.<br />
<span id="more-86"></span><br />
Agile and Lean Software Development adopted some practices from Toyota. <em><a href="http://www.amazon.com/gp/product/0321150783?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0321150783" title="Lean Software Development: An Agile Toolkit" id="ix_v">Lean Software Development: An Agile Toolkit</a></em>  (by Mary Poppendieck, Tom Poppendieck) is an excellent book that review Lean practices and principles in details. This post focuses more on philosophy and the system of practices as a whole that can turn software development team into<strong> a smart reliable machine.</strong></p>
<h3>1. Value</h3>
<p><strong>Why customer will pay money for your product? How does your company creates value?</strong></p>
<blockquote><p>All we are doing is looking at the time line from the moment the customer give us an order to the point when we collect the cash. And we are reducing that time line by removing the non-value-added wastes.</p>
<p style="text-align: right">- Taiichi Ohno, founder of TPS</p>
</blockquote>
<p>The only thing that adds value in software development is transformation of information and code into what customer wants. It is very important for software team to know how does it create value for customers. Or simply, decrypt the formula:<br />
<em>Customer </em>(needs) -&gt; <em>Cash </em>(delivered software)</p>
<p><strong>Software Development Value Stream</strong><br />
Problems, needs and ideas are translated into <strong>units of development</strong> &#8211; functionality, user experience (interface, interactions, usability) and system qualities (performance, reliability, security, etc). A software development team transforms these pieces of requirements into a computer system using value-added and many not-so-value-added actions.</p>
<p><img src="http://softwarecreation.org/images/2009/value-stream.jpg" /></p>
<p><strong>The ultimate goal</strong> of Toyota Way is to eliminate non-value-added activities while keeping the best quality of the product.</p>
<h3>2. Flow</h3>
<p><strong>What is the process of creating value in your company?</strong></p>
<p>Properties of the optimal flow for software development:</p>
<ul>
<li>cut back to zero the amount of time that any unit of work is sitting idle or waiting for somebody to work on it</li>
<li>move design, code and information fast, link processes and people together that problems surface right away</li>
</ul>
<p><strong>One-piece flow</strong><br />
The most effective flow is one-piece flow &#8211; a customer need is immediately converted into a delivered software solution. In the same time this is the most demanding flow: a customer, designers, developers, testers and system administrators should be dedicated to the project, immediately available and work as one team together until the need is implemented in a live system.</p>
<p>One-piece flow has significant benefits (if it is implemented right):</p>
<ul>
<li><strong>Quality </strong>- defects detected quickly; close proximity and connections ensure that necessary information is available immediately and important details are not missing; problems are solved quickly</li>
<li><strong>Flexibility </strong>- flexibility to respond and do what customer really wants in real time</li>
<li><strong>Productivity </strong>- the team engaged in high value added continuous work</li>
<li><strong>Morale </strong>- immediate results of work bring sense of accomplishment and job satisfaction</li>
<li><strong>Cost </strong>- lean production with minimal waste</li>
</ul>
<p>However, in reality one-piece flow is difficult to achieve in many projects:</p>
<ul>
<li>a customer is not engaged all the time</li>
<li>complex business domain requires analysis and preparation before development can start</li>
<li>project activities involve people with different skills that are not available immediately</li>
<li>deployment of mission-critical systems demands intensive testing and scheduling</li>
</ul>
<ul>
<li>management, marketing, end-user expect specific time-lines, features and support</li>
</ul>
<ul>
<li>and so on</li>
</ul>
<p>Toyota uses two additional principles to overcome challenges of one-piece flow: <strong>pull systems and leveling out the workload</strong>.<br />
However, Toyota Way says: <em>&#8220;Flow where you can, pull where you must</em>&#8220;. The big challenging goal is to turn eventually all the processes into one-piece flow.</p>
<p><strong>Pull system (Kanban)</strong><br />
<a href="http://en.wikipedia.org/wiki/Kanban" title="Kanban" id="z:4a">Kanban</a> is a signaling system to trigger action. It adds to flow small buffers pulled by customer demand. Kanban allows optimal use of people and natural breaks in processes.</p>
<p>Agile iterations and Scrum sprints are close to Kanban ideas. A team pulls new user stories every time-boxed iteration from the backlog to design, implement, test and deploy within the same iteration.</p>
<p>However, it is not classical Kanban. An original idea would be to pull small batches of user stories for development after a team has finished a current batch (not at the end of fixed time iteration). In parallel, QA pulls implemented user stories for testing and so on. A customer can continue preparing next batches of work based on their priority of needs.</p>
<p>Main ideas</p>
<ul>
<li>provide dependent down stream teams with what they want, when they want and in amount they want</li>
<li>just-in-time &#8211; started by high priority needs</li>
<li>minimize work-in-progress and untested code</li>
<li>frequently push what a customer can use right away</li>
<li>be responsive to day-by-day shifts in demand instead of relaying on long-term schedules</li>
</ul>
<p>Kanban is effective way to synchronize people and teams work without bringing them into continuous flow, where they should be always ready for the next unit of work.</p>
<p><strong>Level Out the Workload (Heijunka)</strong><br />
The main idea of Heijunka is to <a href="http://en.wikipedia.org/wiki/Production_leveling" title="level production" id="ixiy">level production</a> by volume and activities mix.</p>
<ul>
<li>it is not built around actual flow of customer orders</li>
<li>workload is leveled for the period considering previous history and scheduled projects</li>
</ul>
<p>In software development workload could be leveled and scheduled when people could make reliable guess for what is expected. It is different from Kanban that works as just-in-time system adapting to the current workload.</p>
<p>Good candidates for Heijunka are</p>
<ul>
<li>standard procedures (automated testing, performance testing, deployment)</li>
<li>recurring events (meetings, planning, demo, code reviews)</li>
</ul>
<ul>
<li>scheduled tasks for people with limited availability (external consultants, customers, management)</li>
</ul>
<ul>
<li>tasks with high confidence in estimation, usually done many times before (initial requirement exploration, design mockups, security audit, training new team members, reusing components and solutions)</li>
</ul>
<p>Benefits:</p>
<ul>
<li>predictability and active planning</li>
</ul>
<ul>
<li>balanced use of people, ability to schedule their involvement</li>
</ul>
<ul>
<li>smoother demand on customers, shared resources and contractors</li>
</ul>
<p>Toyota Way is focused on eliminating waste of non-value added work (Muda). Heijunka eliminates two additional types of waste:</p>
<ul>
<li>unevenness in project schedule (Mura)</li>
<li>overburden of people and systems (Muri)</li>
</ul>
<p><img src="http://softwarecreation.org/images/2009/development-flow.jpg" /></p>
<h3>Building your own flow</h3>
<p>These three approaches can help you to build most optimal flow. Consider cons and pros:</p>
<p><strong>One-piece flow (push)</strong><br />
pros: minimal waste, fast implementation, low cost, quick problems resolution<br />
cons: uneven workload, requires full availability and high level of engagement<br />
when to use: for one collocated team work that is dedicated to one project</p>
<p><strong>Kanban (pull)</strong><br />
pros: dynamic adaptation to load; synchronization of different teams and disconnected processes<br />
cons: low predictability for completion; buffers hide waste<br />
when to use: disconnected or involved in the multiple projects teams; activities that need people with limited availability</p>
<p><strong>Heijunka (level)</strong><br />
pros: good predictability, ability to plan, balanced use of people: avoid overburden and uneven workload<br />
cons: non-adaptive, inefficient for tasks with unpredictable effort (a lot in traditional software development)<br />
when to use: activities that are standardized, highly predictable or have to be scheduled</p>
<p><img src="http://softwarecreation.org/images/2009/flow-scenario.jpg" /></p>
<p>You cannot build reliable and optimal flow from the scratch based on a theory only. The best process for your projects will emerge as result of evolution, problem solving and eliminating waste. This is a topic of the next post.</p>
<blockquote><p>If some problem occurs in one-piece flow manufacturing then the whole production line stops. In this sense it is a very bad system of manufacturing. But when production stops everyone is forced to solve the problem immediately. So team members have to think, and through thinking team members grow and become better team members and people.</p>
<p style="text-align: right">- Teruyuki Minoura</p>
</blockquote>
<p><strong><br />
References:</strong><br />
<a href="http://www.amazon.com/gp/product/0071392319?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0071392319" title="The Toyota Way" id="lzhs">The Toyota Way</a> by Jeffrey Liker<br />
<a href="http://www.amazon.com/gp/product/0321150783?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0321150783" title="Lean Software Development: An Agile Toolkit" id="ytmp">Lean Software Development: An Agile Toolkit</a><em> </em> by Mary Poppendieck, Tom Poppendieck</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=86&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Three Dimensions of a Software Programmer: How to get things done</title>
		<link>http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/</link>
		<comments>http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 04:43:40 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Job]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/</guid>
		<description><![CDATA[Share    What you are as a person is far more important that what you are as a basketball player. &#8211; John Wooden
People are amazing, surprising and interesting. They change reality with power of thought and make things happen. What is most exciting &#8211; all people are completely different in their attitudes and [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/&amp;title=Three+Dimensions+of+a+Software+Programmer%3A+How+to+get+things+done+&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p>    <em>What you are as a person is far more important that what you are as a basketball player.</em> &#8211; John Wooden</p>
<p>People are amazing, surprising and interesting. They change reality with power of thought and make things happen. What is most exciting &#8211; all people are completely different in their attitudes and behavior. But this comes with price &#8211; it is difficult to understand people and even more difficult to find the best way to deal with them.<br />
Many people, who see programmers as extensions of their computer systems, will be surprised to discover that programmers are amazing individuals too. Programmers exhibit similar to other people behavior, they have different personalities and need individual approach.</p>
<p>I offer in this post a simple theory about <em>Three Dimensions of a Software Programmer</em> that could help to put relations with these individuals on some rational basis.</p>
<p id="fw_e" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3DArchetypes.jpg" style="width: 500px; height: 500px" width="500" height="500" /></p>
<h3>Axioms</h3>
<p>There are two basic axioms in foundation of the theory</p>
<ol>
<li><strong>Constancy </strong>- some programmers consistently outperform others under same conditions.</li>
<li><strong>Variability </strong>- performance of a programmer varies under different conditions.</li>
</ol>
<p><span id="more-84"></span></p>
<h3>Talents (constants)</h3>
<p><em>Talents are recurring patterns of thoughts, feelings and behavior that can be productively applied. &#8211; </em><a href="http://www.amazon.com/First-Break-All-Rules-Differently/dp/0684852861" title="First, Break All the Rules: What the World's Greatest Managers Do Differently" id="kq_b">First, Break All the Rules</a><br />
Genes and upbringing form an adult human with specific talents and personality, strengths and weaknesses. These core individual characteristics of a programmer are difficult to change (except some limited success with consumption of large quantities of beer). Programmers are different &#8211; creative, thorough, funny, systematic, laid-back, curious, analytical, spontaneous and so on. Some people cannot be programmers at all.<br />
Each unique programmer has a base performance level that is constant and almost impossible to change.</p>
<h3>Three Dimensions (variables)</h3>
<p>Now we can move to the part of equation that can be changed. Can we make programmers permanently performing above their base level? To answer this question lets review three variables of programmer&#8217;s performance.</p>
<p><img src="http://www.softwarecreation.org/images/2009/energy-icon.gif" style="width: 20px; height: 20px; float: left; margin-left: 0pt; margin-right: 1em" /><strong>X. Energy</strong><br />
<em>measures amount of work and power of ideas that could change and improve reality</em>.<br />
Here I consider a specific kind of energy &#8211; creative positive energy that is directed to build better software and aligned with company and customers goals. Individual&#8217;s desire to act, create and achieve is the source of this energy. As we discussed above, part of this energy is based on character and predetermined. However, there is a big variable component of individual energy that is driven by motivation and environment.</p>
<p><img src="http://www.softwarecreation.org/images/2009/discipline-icon.gif" style="width: 20px; height: 20px; float: left; margin-left: 0pt; margin-right: 1em" /><strong>Y. Discipline</strong><br />
<em>measures ability to focus and follow necessary steps to achieve goals with good quality</em>.<br />
Accountability, self-organization and focus are core elements that keep individuals to perform on a high level. Personality matters here &#8211; some people will promise and forget immediately, give up experiencing first difficulties or become distracted by more interesting tasks. Some will fight until the end and go beyond limits to meet commitments, exceed expectations and bring excellent results. However, significant part of programmer&#8217;s discipline is variable and depends on context and expectations.</p>
<p><img src="http://www.softwarecreation.org/images/2009/expertise-icon.gif" style="width: 20px; height: 20px; float: left; margin-left: 0pt; margin-right: 1em" /><strong>Z. Expertise</strong><br />
<em>measures knowledge and experience in programming, technology and a customer domain.</em><br />
Expertise includes <em>know how</em> to build software, make right decisions and implement good solutions with minimal troubles. There is no doubt that expertise is growing with time, but individual variations are big. Many people consider expertise as the only important characteristic of a programmer. I believe that it has much lower value without two other variables.</p>
<h3>Programmer&#8217;s Archetypes</h3>
<table border="1" bordercolor="#aaaaaa" cellpadding="1" cellspacing="0" width="100%">
<tr>
<td></td>
<td valign="top" width="80"></td>
<td>Energy</td>
<td>Discipline</td>
<td>Expertise</td>
<td>Description</td>
</tr>
<tr>
<td style="font-family: Comic Sans MS; text-align: center; font-size: 14px"><strong>Creator<br />
</strong></td>
<td valign="top">
<p id="ow2o" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3D-creator.jpg" style="width: 80px; height: 80px" width="80" height="80" /></p>
</td>
<td style="text-align: center">
<p id="l6jp"><img src="http://www.softwarecreation.org/images/2009/energy-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td style="text-align: center">
<p id="yyzo"><img src="http://www.softwarecreation.org/images/2009/discipline-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td style="text-align: center">
<p id="ibqr"><img src="http://www.softwarecreation.org/images/2009/expertise-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td>Highly productive, creative and successful, know how and what to do; have energy, discipline and desire to accomplish tasks on the highest level</td>
</tr>
<tr>
<td style="font-family: Comic Sans MS; text-align: center; font-size: 14px"><strong> Enthusiast<br />
</strong></td>
<td valign="top">
<p id="xdnc" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3D-enthusiast.jpg" style="width: 80px; height: 80px" width="80" height="80" /></p>
</td>
<td style="text-align: center">
<p id="l6jp"><img src="http://www.softwarecreation.org/images/2009/energy-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td style="text-align: center">
<p id="yyzo"><img src="http://www.softwarecreation.org/images/2009/discipline-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td style="text-align: center">-</td>
<td>Great drive and energy to make things happen; however makes unnecessary mistakes and poor decisions</td>
</tr>
<tr>
<td style="font-family: Comic Sans MS; text-align: center; font-size: 14px"><strong> Artist<br />
</strong></td>
<td valign="top">
<p id="a0t6" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3D-artist.jpg" style="width: 80px; height: 80px" width="80" height="80" /></p>
</td>
<td style="text-align: center">
<p id="l6jp"><img src="http://www.softwarecreation.org/images/2009/energy-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td style="text-align: center">-</td>
<td style="text-align: center">
<p id="ibqr"><img src="http://www.softwarecreation.org/images/2009/expertise-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td>A talented and experienced individual who could create great solutions; however inconsistent and unpredictable</td>
</tr>
<tr>
<td style="font-family: Comic Sans MS; text-align: center; font-size: 14px"><strong> Doer </strong></td>
<td style="text-align: center">
<p id="a0t6" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3D-doer.jpg" style="width: 80px; height: 80px" width="80" height="80" /></p>
</td>
<td style="text-align: center">-</td>
<td style="text-align: center">
<p id="yyzo"><img src="http://www.softwarecreation.org/images/2009/discipline-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td style="text-align: center">
<p id="ibqr"><img src="http://www.softwarecreation.org/images/2009/expertise-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td>A disciplined and knowledgeable programmer, who is strong in implementation, but lacks creativity and drive</td>
</tr>
<tr>
<td style="font-family: Comic Sans MS; text-align: center; font-size: 14px"><strong>Noise Maker </strong></td>
<td valign="top">
<p id="yv.b" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3D-noise-maker.jpg" style="width: 80px; height: 80px" width="80" height="80" /></p>
</td>
<td style="text-align: center">
<p id="l6jp"><img src="http://www.softwarecreation.org/images/2009/energy-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td style="text-align: center">-</td>
<td style="text-align: center">-</td>
<td>A lot of energy and movement without much useful results</td>
</tr>
<tr>
<td style="font-family: Comic Sans MS; text-align: center; font-size: 14px"><strong> Bureaucrat<br />
</strong></td>
<td valign="top">
<p id="f.um" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3D-bureaucrat.jpg" style="width: 80px; height: 80px" width="80" height="80" /></p>
</td>
<td style="text-align: center">-</td>
<td style="text-align: center">
<p id="yyzo"><img src="http://www.softwarecreation.org/images/2009/discipline-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td style="text-align: center">-</td>
<td>Consistent and rational, but does not have creative energy and knowledge to be productive</td>
</tr>
<tr>
<td style="font-family: Comic Sans MS; text-align: center; font-size: 14px"><strong> Sage<br />
</strong></td>
<td valign="top">
<p id="ddpc" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3D-sage.jpg" style="width: 80px; height: 80px" width="80" height="80" /></p>
</td>
<td style="text-align: center">-</td>
<td style="text-align: center">-</td>
<td style="text-align: center">
<p id="ibqr"><img src="http://www.softwarecreation.org/images/2009/expertise-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td>Deep knowledge and vast experience without willigness to perform and change anything</td>
</tr>
<tr>
<td style="font-family: Comic Sans MS; text-align: center; font-size: 14px"><strong> Lost soul<br />
</strong></td>
<td valign="top">
<p id="a3w9" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3D-lost-soul.jpg" style="width: 80px; height: 80px" width="80" height="80" /></p>
</td>
<td style="text-align: center">-</td>
<td style="text-align: center">-</td>
<td style="text-align: center">-</td>
<td>Don&#8217;t want to do anything and don&#8217;t know how to do it anyway</td>
</tr>
</table>
<p><a href="http://kael.civfanatics.net/" class="photocredit" title="FfHII" id="g4u5">FfHII</a></p>
<h3>How to Improve</h3>
<p>A programmer can be 10 times more productive than other programmer and 10 times more productive than himself under different conditions. Therefore right people under right conditions could be 100 times more productive than others.</p>
<p>How can you influence programmer&#8217;s performance with these three dimensions? Hopefully, you found right people with right talents. It is a waste of time to change personality and push in direction where talent is absent. However, it is possible to amplify natural strengths and create conditions for super productivity.</p>
<p><img src="http://www.softwarecreation.org/images/2009/energy-icon.gif" style="width: 20px; height: 20px; float: left; margin-left: 0pt; margin-right: 1em" width="20" height="20" /><strong>Energy</strong><br />
goal: <em>make people empowered, motivated, interested and satisfied; engage them to perform above their base level of energy</em></p>
<p><u>job design</u></p>
<ul>
<li>  interesting work &#8211; brings inspiration and motivation</li>
<li>control &#8211; over own work and decisions &#8211; pushes people forward</li>
<li>self-organization &#8211; opportunities to find own ways that bring best results</li>
<li>creative tension &#8211; goals on the edge of capabilities to focus energy and open new energy sources</li>
<li>defined outcomes &#8211; clear direction that reduces anxiety and doubt and increases productivity</li>
</ul>
<p><u>psychology</u></p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Flow_%28psychology%29" title="flow" id="c9qo">flow</a> &#8211; put mind in a state of energized focus, full involvement, and success</li>
<li>  positive experience &#8211; good emotions and healthy team relations; comfortable and trusted environment</li>
<li>personal interests &#8211; decision making considers and takes care of individual interests</li>
<li>right incentives  &#8211; <a href="http://softwarecreation.org/2007/fair-compensation-for-programmers-is-it-possible/" title="compensation" id="iobi">compensation</a>, rewards, recognition are the great source of energy and motivation</li>
</ul>
<p><u>environment</u></p>
<ul>
<li>  space for mistakes &#8211; tolerance and open ways to fix mistakes make people think about moving forward instead of covering assess</li>
<li>  productive environment &#8211; where people think about work instead of nuisances</li>
<li>fit &#8211; between personal and company goals, culture and views &#8211; amplify people desire to work</li>
<li>reasonable pressure &#8211; normal workload, minimal stress, time slack to avoid energy drains</li>
</ul>
<p><img src="http://www.softwarecreation.org/images/2009/discipline-icon.gif" style="width: 20px; height: 20px; float: left; margin-left: 0pt; margin-right: 1em" /><strong>Discipline<br />
</strong>goal: <em>make people focused, responsible and aligned; make them performing in the right way</em></p>
<p><u>support system</u></p>
<ul>
<li>established process &#8211; align actions with goals and support their execution (Agile is the best way to go)</li>
<li>transparency &#8211; reasons for decisions should be clear, problems should surface quickly</li>
<li>pull system (<a href="http://en.wikipedia.org/wiki/Kanban" title="kanban" id="cggp">kanban</a>) &#8211; signaling system to trigger action based on actual needs</li>
<li>  control mechanisms, check and balances, audit, risk management (e.g. iterations)</li>
</ul>
<p><u>zone of responsibility </u></p>
<ul>
<li>clear areas of responsibility &#8211; what is included and what is not</li>
<li>balance of responsibility and authority &#8211; adequate authority to accomplish goals; restrictions to avoid damage</li>
<li>  <a href="http://en.wikipedia.org/wiki/Rules_of_engagement" title="rules of engagements" id="gyw1">rules of engagements</a>  &#8211; when, where, and how force (bold actions) shall be used</li>
<li>  match confidence with responsibilities &#8211; an individual is prepared and ready for the new responsibilities</li>
</ul>
<p><u>standards</u></p>
<ul>
<li>  safety regulations &#8211; mandatory rules for everyone</li>
<li>professional standards &#8211; recommended parameters of work and products (security, performance, availability, etc.)</li>
<li>best practices &#8211; spread approaches that work</li>
</ul>
<p><img src="http://www.softwarecreation.org/images/2009/expertise-icon.gif" style="width: 20px; height: 20px; float: left; margin-left: 0pt; margin-right: 1em" /><strong>Expertise</strong><br />
goal: <em>make people knowledgeable, experienced and growing based on their talents</em></p>
<p><u>career</u></p>
<ul>
<li><a href="http://softwarecreation.org/2007/how-to-be-happy-at-work-short-tutorial/" title="right career path" id="ypa_">right career path</a> &#8211; built on persons strengths &#8211; enable growth in area of competence and natural strengths without switching into paths that don&#8217;t match talents (e.g. management). Avoid consequences of raising to the level of incompetence (<a href="http://en.wikipedia.org/wiki/Peter_Principle" title="Peter Principle" id="hviz">Peter Principle</a>).</li>
<li>broadbanding &#8211; build levels of achievements and pay schemes that allow to achieve and earn more within the same profession</li>
<li>  match expertise and challenges- keep people always interested and challenged, avoid boring or over complicated tasks</li>
<li>assist self-discovery &#8211; help search for the better career and role</li>
</ul>
<p><u>perspective</u></p>
<ul>
<li>  diversity in tasks and activities &#8211; accelerates growth and understanding</li>
<li>  big picture, direct communication with customer &#8211; informed people make more optimal decisions</li>
<li>exposure to different subject areas &#8211; broader knowledge opens new possibilities and solutions outside the narrow specialization</li>
</ul>
<p><u>learning and practice</u></p>
<ul>
<li>  feedback loop &#8211; continuous evaluation and improvements based on feedback</li>
<li>opportunities for learning &#8211; grow expertise beside direct work tasks</li>
<li>sharing, coaching, communication &#8211; peer and experts access and support for growth</li>
</ul>
<p>There is no standard way to increase performance of an individual programmer. Each individual is unique and requires personal approach. The theory of Three Dimensions of a Software Programmer suggests framework for these approaches.<br />
It takes a huge effort to understand every programmer in your team individually and craft personalized approach, path and conditions. But it makes sense to do. <strong>People will be productive, engaged and happy. The company will grow and succeed.</strong></p>
<p>What could be a better outcome in our civilized hard working world?</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=84&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Self Organization: The Army vs. Jim Highsmith</title>
		<link>http://softwarecreation.org/2007/self-organization-the-army-vs-jim-highsmith/</link>
		<comments>http://softwarecreation.org/2007/self-organization-the-army-vs-jim-highsmith/#comments</comments>
		<pubDate>Thu, 08 Nov 2007 05:48:07 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[People]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2007/self-organization-the-army-vs-jim-highsmith/</guid>
		<description><![CDATA[ShareSurprisingly, Jim Highsmith, respected agile guru, argues against one of the core agile principles of self organization, associating it with anarchy. On the contrary, surprisingly again, the Army experts, Don Vandergriff and George Reed,  embrace ideas of adaptability and decentralization in traditionally command-oriented military units.
Jim Highsmith says:
 &#8220;I&#8217;ve been thinking recently that the term [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2007/self-organization-the-army-vs-jim-highsmith/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2007/self-organization-the-army-vs-jim-highsmith/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2007/self-organization-the-army-vs-jim-highsmith/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2007/self-organization-the-army-vs-jim-highsmith/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2007/self-organization-the-army-vs-jim-highsmith/&amp;title=Self+Organization%3A+The+Army+vs.+Jim+Highsmith&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p>Surprisingly, Jim Highsmith, respected agile guru, <a href="http://blog.cutter.com/2007/09/13/no-more-self-organizing-teams/" stitle="argues">argues</a> against one of the core agile principles of self organization, associating it with anarchy. On the contrary, surprisingly again, the Army experts, Don Vandergriff and George Reed,  <a href="http://findarticles.com/p/articles/mi_qa3723/is_200708/ai_n19511310/print" title="embrace" id="v08p">embrace</a> ideas of adaptability and decentralization in traditionally command-oriented military units.<img src="http://softwarecreation.org/images/2007/lost-soldiers.jpg" /></p>
<p>Jim Highsmith says:</p>
<blockquote><p> &#8220;I&#8217;ve been thinking recently that the term &#8220;self-organizing&#8221; has outlived its usefulness in the agile community and needs to be replaced. While self-organizing is a good term, it has, unfortunately, become confused with anarchy in the minds of many. Why has this occurred? Because there is a contingent within the agile community that is fundamentally anarchist at heart and it has latched onto the term self-organizing because it sounds better than anarchy.&#8221;</p></blockquote>
<p>Army experts say:</p>
<blockquote><p> &#8220;A culture of adaptability is one that accepts a lack of absolute control over events on and off the battlefield. Implementation requires revisiting mission orders or trust tactics. It necessitates raising the bar in the education, training and coaching of leaders and soldiers. It seems trite to suggest that an adaptive institution will reward those who, when the need arises, act without waiting for orders, but this also necessitates a climate that is supportive of those who act and fail to achieve stellar results. Instead of seeking perfection or optimum solutions, operators will find a solution that works locally and then exploit those results as a continual evolution facilitated by an organization adept at receiving and communicating such information.&#8221;</p></blockquote>
<p><span id="more-47"></span></p>
<p>The modern Army faces challenges that demand from soldiers quick decision making on spot and reaction to unpredictable situations while keeping ethical reasoning and holding to the Army goals and values. Don Vandergriff and George Reed are confident that only small adaptive and learning units could handle such tasks &#8211; large, bureaucratic structures, with rigid lines of authority, are inherently slow to respond and adapt.</p>
<p>Jim Highsmith is a prominent advocate of adaptability, his book Agile Project Management is one of my favorite. But rejecting concept of self-organization he dismisses the essence of adaptive and learning agile teams. Certainly, self organization is not for every team, project or company, but removing the concept from Agile world is too radical step. Achieving the state of self organization should be a goal for any software development team &#8211; it is <a href="http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/" title="the most effective leadership">the most effective leadership style</a>. Suggested Light Touch Leadership is not the best style, but only a stage in achieving true self-organization.</p>
<p>Why self organization is the best style? There are two main perspectives: theory of complex systems and human psychology.<br />
<a href="http://softwarecreation.org/2007/evolutionary-software-architecture-or-why-developers-are-not-janitors/" title="Theory of complex systems" id="n.4c">Theory of complex systems</a> shows that self-organized systems:</p>
<ul>
<li>better in selecting optimal state and local decisions</li>
<li>robust</li>
<li>effectively adapt to environment and use feedback loops</li>
<li>often come up with emergent and unexpected solutions</li>
<li>self-regulated and better cope with perturbations</li>
</ul>
<p>Human psychology aspect adds that self-organized teams:</p>
<ul>
<li>more responsible for end results, self-disciplined and self-driven</li>
<li>avoid dependency on the formal leader qualities</li>
<li>motivated, initiative and willing to act</li>
<li>enjoy work more</li>
<li>better insured against <a href="http://en.wikipedia.org/wiki/Groupthink">groupthink</a>, <a href="http://en.wikipedia.org/wiki/Conformity">conformity</a> and <a href="http://en.wikipedia.org/wiki/Diffusion_of_responsibility">diffusion of responsibility</a></li>
<li> not <a href="http://softwarecreation.org/2007/lost-personalities-how-our-company-alters-us/" title="shifting judgment and decisions" id="ekgv">shifting judgment and decisions</a> to others, better in finding alternative and balancing options</li>
<li>every member is in charge, ready to step in as a leader and have incentive to develop leadership skills</li>
</ul>
<p>A self-organized team is possible when people carry shared purpose, principles and values. They support and respect each other. And they want to succeed.</p>
<p>Jim, don&#8217;t take away from us concept of self organization. It is not anarchy, but the highest form of the software team organization, which I wish every software team could experience and achieve.</p>
<p>Resources:<br />
<a href="http://blog.cutter.com/2007/09/13/no-more-self-organizing-teams/" title="No More Self-Organizing Teams" id="it6q">No More Self-Organizing Teams</a>, Jim Highsmith<br />
<a href="http://agilethinking.net/blog/2007/09/13/no-more-self-organizing-teams-not/" title="No More Self-Organizing Teams. Not." id="kvgw">No More Self-Organizing Teams. Not.</a> An open letter to Jim Highsmith from Tobias<br />
<a href="http://findarticles.com/p/articles/mi_qa3723/is_200708/ai_n19511310/print" title="Old Dogs and New Tricks: Setting the Tone For Adaptability" id="z_ln">Old Dogs and New Tricks: Setting the Tone For Adaptability</a>, Don Vandergriff and George Reed</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=47&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2007/self-organization-the-army-vs-jim-highsmith/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fair Compensation for Programmers. Is it possible?</title>
		<link>http://softwarecreation.org/2007/fair-compensation-for-programmers-is-it-possible/</link>
		<comments>http://softwarecreation.org/2007/fair-compensation-for-programmers-is-it-possible/#comments</comments>
		<pubDate>Mon, 20 Aug 2007 02:33:47 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Economics]]></category>
		<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2007/fair-compensation-for-programmers-is-it-possible/</guid>
		<description><![CDATA[Share

Programmer&#8217;s Side
Programmers in the software team work well together, trust and support each other. But they don&#8217;t talk about their salaries &#8211; the most important reason why they work for the company. It is taboo. Tell them that one of their fellow programmers earn 50% more than others. You&#8217;ll see smiles disappear, people don&#8217;t look [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2007/fair-compensation-for-programmers-is-it-possible/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2007/fair-compensation-for-programmers-is-it-possible/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2007/fair-compensation-for-programmers-is-it-possible/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2007/fair-compensation-for-programmers-is-it-possible/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2007/fair-compensation-for-programmers-is-it-possible/&amp;title=+Fair+Compensation+for+Programmers.+Is+it+possible%3F&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><h1></h1>
<p><img src="http://softwarecreation.org/images/2007/team-spirit.jpg" /></p>
<h3>Programmer&#8217;s Side</h3>
<p>Programmers in the software team work well together, trust and support each other. But they don&#8217;t talk about their salaries &#8211; the most important reason why they work for the company. It is taboo. Tell them that one of their fellow programmers earn 50% more than others. You&#8217;ll see smiles disappear, people don&#8217;t look at each other and become silent. They will rebound, but these things leave scars on team morale and cohesiveness. Feel of unfairness is not the best companion in the software development.</p>
<p>But why does compensation is so important and sensitive for us?</p>
<ul>
<li><span style="font-weight: bold">We work to live.</span> We spend more than half of our conscious adult life earning money on work. We need money to live. Money enable for us almost everything material in this world. Any non-material incentives cannot compensate insufficient money income.</li>
<li><span style="font-weight: bold">Money are social status.</span> The better compensation means you worth more and more attractive from social and even biological perspective. People strive for relative prosperity. They <a href="http://softwarecreation.org/2007/testosterone-irrational-choices-and-programmers/" title="could accept less" id="g3qz">could accept less</a> themselves than see a rival get more.</li>
</ul>
<p><span id="more-30"></span></p>
<h3>Company&#8217;s Side</h3>
<p>The software company is interested in the best productivity, high quality and most optimal software solutions. That usually translates into lower cost, higher profit and happier customers.<br />
How a company can make it possible? People are the most important factor to achieve these goals. Company just need to</p>
<ul>
<li><span style="font-weight: bold">Keep programmers motivated, interested and satisfied.</span> Programmers will be happy if they perceive compensation as fair, work as interesting and environment as comfortable.</li>
<li><span style="font-weight: bold">Reward desired behavior for the company success</span> &#8211; accountability, creativity, intelligence, self-discipline, learning and may other useful qualities. Compensation should link these qualities to the individual, team and company performance.</li>
<li><span style="font-weight: bold">Attract and retain the best contributors and talents.</span> Programmers should have opportunities for earning more for better contribution. Many of them possess entrepreneurial spirit and stiff salary ranges and limits for growth can make them leave.</li>
</ul>
<p>What is the best way for the company to approach compensation and support these goals?</p>
<h3>Compensation Challenges</h3>
<p>A company should solve few challenges in order to build an effective compensation system.</p>
<ul>
<li>How can the company objectively evaluate individual accountability, creativity, intelligence, self-discipline, learning capabilities, experience, influence, coaching, attentiveness to details, vision, strategic thinking, cooperation, enthusiasm, work ethic, quality, speed, thoughtfulness, inspiring and motivation of other people and many other qualities? What of them are most important for the company success?</li>
<li>How can compensation encourage collaboration, cement relations and avoid competition between team members?</li>
<li>How to get great team productivity results, without negative impact on other teams and without sacrificing long-term perspective?</li>
<li>Finally, what compensation system will be perceived as fair?</li>
</ul>
<p>Considerations:</p>
<ol>
<li><span style="font-weight: bold">Objective behavior evaluation is not possible</span>. How can evaluation account for the huge number of behavior variables? It is almost impossible. In addition, some people traits play well only if they are complimented by other people traits: visionary needs detail oriented performer, creative person needs pragmatic opponent, innovator needs patient adapter. That is why all traditional evaluations will never give true picture of contribution and certainly will miss important points.</li>
<li><span style="font-weight: bold">Fairness is in transparent and equal criteria</span>. There are different types of criteria possible: years worked in company, level of education and even produced lines of code :). However these criteria don&#8217;t guarantee desired results.</li>
<li><span style="font-weight: bold">The most effective economic criteria &#8211; profit</span>. The most effective and simple criteria is found on the market where company operates &#8211; profit. It is a bottom line and result of the whole company activity. This is a reason why company hires employees and their compensation should reflect company economic results.</li>
<li><span style="font-weight: bold">Collaborate inside.</span> Free market promote competition which could easily reach all levels in the company. Competition is good in a healthy dose, but too much can damage cooperative nature of the software development inside teams. Also competition between teams and business units is damaging too as it could cause suboptimal decision on the company level.</li>
<li><span style="font-weight: bold">Compete outside</span>. The solution is to make people compete with the same competitors as the whole company facing on market. Link compensation to the whole company economic performance. <a href="http://www.poppendieck.com/measureup.htm" title="Measure Up" id="ml68">Measure Up</a>.</li>
</ol>
<h3>Fair Compensation System</h3>
<p>There is a wide range of existing compensation systems:</p>
<ol>
<li><span style="font-weight: bold">Closed vs. Open</span>. <a href="http://positivesharing.com/2006/08/why-secret-salaries-are-a-baaaaaad-idea/" title="Opens salaries" id="dul8">Opens salaries</a> will force compensation system to become fair. Secrecy is damaging and corrupting. Open salaries should eliminate personal bias, favoritism and undeserved power from management. People with higher salaries will feel pressure to justify them and show their best performance; otherwise their status will be questioned.</li>
<li><span style="font-weight: bold">Fixed vs. Performance based</span>. Fixed rates promote inefficiency and detachment from the company results. People should have direct dependency between results of their work and the company performance.</li>
<li><span style="font-weight: bold">Driven by management or teams</span>. Team members are in the much better position to determine most valuable contributors and &#8216;free riders&#8217;. Managers don&#8217;t have this insight into each team member work. They are not the best people to decide on individual contribution and compensation.</li>
<li><span style="font-weight: bold">Equal salary for levels vs. Individual negotiations</span>. While individual negotiations are more flexible, they could promote bargaining and lack of transparency. People should be more concerned about performance of the team and company and less about individual negotiations. Some compensation parameters could be negotiable, but they should stay within baseline for the same contribution level.</li>
<li><span style="font-weight: bold">Non-money incentives and free perks</span>. They are nice, but not important for all as oppose to compensation packages.</li>
</ol>
<p>There is no one approach that works for all, but 3 approaches below could increase efficiency of the compensation system. Additional note: effective software team includes all contributors &#8211; business experts, designers, programmers, testers, system administrators, etc.</p>
<ol>
<li><span style="font-weight: bold">Compensation Composition.</span> A company should be flexible in packaging compensation. Some people expect secure and stable income, some are willing to work harder and risk for opportunity to earn more. Use mutual funds approach &#8211; allow custom packages (Stability, Income, Growth) with various components. They could include base salary, profit sharing (both depending on teams) and monetary options (partly covered by the company): training, health insurance, pension plans, vacation, stocks, equipment, car expenses, etc.</li>
<li><span style="font-weight: bold">Team Contributors.</span> Team should have minimal number of contributor&#8217;s levels: Junior, Full and Senior Contributors. Most people in the team should be Full Contributors and only outstanding members should be Senior Contributors. Each level has fixed ratio of income (e.g. Full Contributor &#8211; 25% and Senior &#8211; 50% of Junior compensation). The same level makes roughly the same money (depending on packaging). The team makes decision about moving person from one level to another or removing from team at all.</li>
<li><span style="font-weight: bold">Company input.</span> Company provides initial number of roles, budget and profit share structure. Team contribution is measured based on the profit or other criteria if the company on early market expansion (number of users / traffic, share in cost reduction, etc.). Each team receives part of the profit from their activity. Other part comes from the company pool (formed from remaining profit of other teams). Therefore, teams are interested in both their and overall company performance. Product teams have larger share of their profit, infrastructure teams have larger share from the company pool.</li>
</ol>
<p><img src="http://softwarecreation.org/images/2007/compensation-contribution.jpg" /><br />
<br style="font-weight: bold" /><span style="font-weight: bold">Fixed secretive compensation turn a team into strangers or even rivals, concerned only about individual achievements . Open fair and performance-based compensation motivates, retains and attracts programmers eager to create great, useful and profitable software.<br />
</span></p>
<p><span style="font-style: italic">Interesting resources:</span></p>
<ul>
<li><a href="http://www.poppendieck.com/pdfs/Compensation.pdf" title="Unjust Deserts" id="zu0q">Unjust Deserts</a>, Mary Poppendieck</li>
<li><a href="http://www.poppendieck.com/measureup.htm" title="Measure Up" id="r7xe">Measure Up</a>, Mary Poppendieck</li>
<li><a href="http://tech.groups.yahoo.com/group/extremeprogramming/messages/133774?threaded=1&amp;m=e&amp;var=1&amp;tidx=1" title="Extreme Programming Group discussion" id="xx5x">Extreme Programming Group discussion</a></li>
<li><a href="http://positivesharing.com/2006/08/why-secret-salaries-are-a-baaaaaad-idea/" title="Why secret salaries are a baaaaaad idea" id="dfu2">Why secret salaries are a baaaaaad idea</a>, Alexander Kjerulf</li>
<li><a href="http://www.joelonsoftware.com/articles/fog0000000038.html" title="Fog Creek Compensation" id="hsfy">Fog Creek Compensation</a>, Joel Spolsky</li>
<li><a href="http://www.accel-team.com/motivation/employeeRewards_00.html" title="Employee Rewards" id="n4s8">Employee Rewards</a>, Accel Team</li>
</ul>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=30&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2007/fair-compensation-for-programmers-is-it-possible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What is The Best Leadership Style for The Software Team?</title>
		<link>http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/</link>
		<comments>http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/#comments</comments>
		<pubDate>Thu, 09 Aug 2007 04:46:14 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Teams]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/</guid>
		<description><![CDATA[Share   4 Effective Leadership Styles in Software   Development
What should be the qualities of the best leader for the software team: strong decisive knowledgeable or quiet supportive cooperative? Best leaders have two main concerns &#8211; people and getting things done (Blake and Mouton&#8217;s Managerial Grid). Both concerns have cumulative effect &#8211; high [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/&amp;title=+What+is+The+Best+Leadership+Style+for+The+Software+Team%3F&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p>   <span style="font-weight: bold">4 Effective Leadership Styles in Software   Development</span></p>
<p>What should be the qualities of the best leader for the software team: strong decisive knowledgeable or quiet supportive cooperative? Best leaders have two main concerns &#8211; people and getting things done (Blake and Mouton&#8217;s <a href="http://en.wikipedia.org/wiki/Managerial_grid_model" title="Managerial Grid">Managerial Grid</a>). Both concerns have cumulative effect &#8211; high concern for people makes them motivated and therefore more productive, high concern for production creates sense of achievement and makes people more satisfied at work.</p>
<p>However, there is no one leadership style that suits all situations, projects and individuals. There are 4 main leadership styles (based on <a href="http://en.wikipedia.org/wiki/Situational_leadership_theory" title="the Hersey and Blanchard model">The Hersey and Blanchard model</a> and <a href="http://faculty.css.edu/dswenson/web/LEAD/vroom-yetton.html" title="Vroom and Yetton's Normative Model">Vroom and Yetton&#8217;s Normative Model</a>), which could be effectively used in software development: The Commander, The Coach, The Supporter and Self-Organization.</p>
<p><img src="http://softwarecreation.org/images/2007/leadership1.jpg" /></p>
<p><span id="more-28"></span></p>
<h3>   1. The Commander</h3>
<p><img src="http://softwarecreation.org/images/2007/commander.jpg" /></p>
<p>In tough times people need a strong leader &#8211; the person who can take responsibility and make decisions, the person who could motivate and inspire, the person who could move against winds and resistance.<br />
Commanders are needed</p>
<ul>
<li>     in crisis, when bold, quick and direct decisions should be made. The project     is doomed, customers are leaving or there is fire in the building.</li>
<li>     when changes are necessary and there is strong resistance and barriers to     make them. The leader creates a vision, finds a way to accomplish it and     leads a change. The company moves to the new market or adopts new approaches     as Agile.</li>
<li>     when people lack commitment, faith in company and willingness to work,     because of previous failures, degrading environment or unpopular management.     The leader can wake them up, inspire and move forward.</li>
</ul>
<p>Commanders make and influence most decisions. The downside of this leadership style is that leader can slide to autocratic methods, demotivate and annoy people. Often decisions are not optimal &#8211; they don&#8217;t take in consideration all available information, options and perspectives. This style is effective in short-term, in long-term it could be dangerous for people and projects.</p>
<p>Skills and traits of Commanders are very important as they are the main factor of success. The Commander should be energetic, confident, decisive. Also as Commanders make most decisions they should be knowledgeable, forward-thinking and broad-minded.</p>
<h3>   2. The Coach</h3>
<p><img src="http://softwarecreation.org/images/2007/coach.jpg" /></p>
<p>The Coach is experienced, knowledgeable and supportive person, who is needed when team lacks focus, expertise and understanding what should be done and how.<br />
Coaches are concerned about growing people, creating enabling and trusting environment. This leader makes decisions collectively with a team. The Coach explains rationale behind decisions, listens and provides feedback. He encourages personal growth, builds long-term capabilities and prepares team and individuals for independent work.<br />
This style has high relationship focus. The downside of this style could be micro-management and low concern for productivity.</p>
<p>Important qualities for Coaches: knowledgeable, empathetic and cooperative.</p>
<h3>   3. The Supporter</h3>
<p><img src="http://softwarecreation.org/images/2007/supporter.jpg" /><br />
<a href="http://flickr.com/photos/pingnews/479872652/" class="photocredit" title="pignews">pignews</a></p>
<p>Supporters are needed to help teams, remove barriers and coordinate activities. The Supporter is an ego-less quiet leader and facilitator. Supporter makes joint decision with the team as equals, delegating majority of decisions to the team. In addition, this leader concerns about creation of harmony and balance between team members.<br />
Important qualities for The Supporter: good communicator and facilitator,   socially skilled and diplomatic</p>
<h3>   4. Self Organization</h3>
<p><img src="http://softwarecreation.org/images/2007/fantastic4.jpg" /></p>
<p>A cohesive, motivated and confident Team doesn&#8217;t need formal leaders. The team makes most decisions, while every member could step in and become leader in specific areas and situations.  People are highly capable, committed and self-driven. The team should have diverse and independently thinking team members to prevent <a href="http://en.wikipedia.org/wiki/Groupthink" title="groupthink">groupthink</a> (see <a href="http://softwarecreation.org/2007/review-the-wisdom-of-crowds-making-the-best-decisions/" title="Wisdom of Crowds">Wisdom of Crowds</a>).</p>
<p>It is most preferable and most difficult to achieve style. Usually the team transcends through previous steps and becomes truly self-organized team after experiencing victories and failures, growing and gaining experience together. The Team have shared purpose, principles and values. Team members trust, support and respect each other. Almost everything is possible for such team.</p>
<h3>   Selecting Style</h3>
<p>Teams and leaders use these 4 styles depending on a situation and specific people. The best leaders guide their team and people through these stages to the point when formal leaders are no longer needed &#8211; self-organizing team. It is possible that a self-organizing team will need a strong leader in tough time, a coach when moving to the new domain or a supporter to resolve external problems. However, the team, which experienced flow, independence and self-organization will strive to get back to this state again.</p>
<p><img src="http://softwarecreation.org/images/2007/leadership2.jpg" /></p>
<p><span style="font-weight: bold">Important factors</span></p>
<ol>
<li>     <em>Commitment -</em> are people ready, motivated and willing to accomplish     goals?</li>
<li>     <em>Competence and clarity of direction</em>: do people know what to do and     how to do it?</li>
<li>     <em>Cooperation and cohesiveness</em>: can team effectively work together,     make decisions and avoid conflicts? The larger group need more coordination.</li>
<li>     <em>Resources and support</em>: does team have necessary tools, money, people,     etc? Do they face serious barriers and require support?</li>
<li>     <em>External coordination</em>: does team need to collaborate with other     groups?</li>
<li>     <span style="font-style: italic">Leader </span>- last, but not least: does     leader have necessary authority, knowledge and experience?</li>
</ol>
<p>All these styles could be effectively used in software development. But at the end, the most important factor of success is people. The style should match people commitment and capabilities. It is mistake to command skilled and confident team and it is mistake to give reins to unmotivated and inexperienced people. Leadership style is one of the secret ingredients of the Software Creation Mystery &#8211; it could bring great success or miserable failure on the same project with the same people.</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=28&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Programmers are lazy capricious pseudo-intellectuals. Really?</title>
		<link>http://softwarecreation.org/2007/programmers-are-lazy-capricious-pseudo-intellectuals-really/</link>
		<comments>http://softwarecreation.org/2007/programmers-are-lazy-capricious-pseudo-intellectuals-really/#comments</comments>
		<pubDate>Mon, 30 Jul 2007 03:17:18 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Job]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2007/programmers-are-lazy-capricious-pseudo-intellectuals-really/</guid>
		<description><![CDATA[Share&#8220;There are very few true artists in computer programming, most are just house painters.&#8221; - Tim Bryce&#8217;s Law

Management consultant Tim Bryce doesn&#8217;t like programmers. Many programmers don&#8217;t like him either (here, here, here, here and probably in many other places).
Mr. Bryce&#8217;s view of programmers:

     programmers     often bamboozle [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2007/programmers-are-lazy-capricious-pseudo-intellectuals-really/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2007/programmers-are-lazy-capricious-pseudo-intellectuals-really/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2007/programmers-are-lazy-capricious-pseudo-intellectuals-really/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2007/programmers-are-lazy-capricious-pseudo-intellectuals-really/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2007/programmers-are-lazy-capricious-pseudo-intellectuals-really/&amp;title=+Programmers+are+lazy+capricious+pseudo-intellectuals.+Really%3F&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><cite>&#8220;There are very few true artists in computer programming, most are just house painters.&#8221; </cite>- Tim Bryce&#8217;s Law</p>
<p><img src="http://softwarecreation.org/images/2007/shepherd.jpg" /></p>
<p>Management consultant Tim Bryce doesn&#8217;t <a href="http://blogs.ittoolbox.com/pm/irm/archives/theory-p-the-philosophy-of-managing-programmers-4993" title="like">like</a> programmers. Many programmers don&#8217;t like him either (<a href="http://blog.jcoglan.com/2007/07/11/in-response-to-tim-bryces-theory-p/" title="here">here</a>, <a href="http://harmons.blogspot.com/2007/07/tim-bryce-and-his-theory-p-philosophy.html" title="here">here</a>, <a href="http://programming.reddit.com/info/25fkh/comments" title="here">here</a>, <a href="http://blog.assembleron.com/2007/07/11/what-motivates-programmers/" title="here">here</a> and probably in many other places).<br />
Mr. Bryce&#8217;s view of programmers:</p>
<ul>
<li>     programmers     often <a href="http://dictionary.reference.com/search?q=bamboozle" title="bamboozle">bamboozle</a>     others and heighten their own self-importance</li>
<li>     the average programmer has a lower IQ than any other worker with a college     degree</li>
<li>     programmers show signs of sloppiness and mental laziness</li>
<li>     they appear disorganized to make it difficult to judge how they are     progressing on their work effort and reveal inadequacies in workmanship.</li>
<li>     the typical programmer often laments he/she is being overworked, underpaid,     and unappreciated.</li>
<li>     to the programmer&#8217;s credit, they usually possess a curiosity about     technological developments. However, this must be carefully nurtured by     management &#8211; too much information may distract programmers from their job.</li>
</ul>
<p>Responses on Mr. Bryce&#8217;s post (referenced above) provide many excellent points why Mr. Bryce is wrong. However, I want to comment points where he is probably right. Also I want to understand why some management consultants with more than 30 years of experience could have such view? Certainly, I reject Freudian view that an unknown programmer hurt feelings of Mr.Bryce in childhood (the main reason is that at this time the world had only few programmers and all of them are known).</p>
<p>Mr.Bryce&#8217;s target audience is not programmers (whose low IQ would probably prevent understanding his Theory P anyway), but IT managers and business decision makers. The underlying premise of Theory P is: <cite>&#8220;The more effectively we manage the people who program the computer, the better we can utilize the systems to support the information needs of the business&#8221;.</cite> This theory is not about live people, but about pragmatic business and lets consider the theory from this perspective. There are three points where Mr. Bryce could be partially right.</p>
<p><span id="more-24"></span></p>
<h3>   1. Programmers are not &#8220;Software Engineers&#8221;, but Translators.</h3>
<p>I agree with this statement. Programmers indeed translate. However, I don&#8217;t agree with <span style="font-weight: bold">what</span> they translate. Mr. Bryce writes that programmers translate <cite>&#8220;human understandable specifications into machine understandable instructions&#8221;.</cite> In reality, programmers translate fuzzy human needs and ideas, which are often far from not well-defined specifications. Sometimes the difference could be as between Picasso translating human feelings in art and house painter translating his customer orders into colored wall.<br />
If the <a href="http://softwarecreation.org/2007/software-development-is-the-flow-of-ideas-the-rest-is-secondary/" title="flow of ideas">flow of ideas</a> between customer and programmer is bad, translation will be bad, software will be bad and, therefore, programmers will look bad. And Mr. Bryce will be right (unless he starts using <a href="http://softwarecreation.org/2007/11-laws-of-the-system-thinking-in-software-development/" title="The System Thinking">The System Thinking</a>).</p>
<h3>   2. Many programmers are not &#8220;System Analysts&#8221;</h3>
<p>Unfortunately, in many cases, it is true. Mr. Bryce writes: &#8220;<cite>A true &#8220;Systems Engineer/Analyst&#8221; studies business requirements, defines and develops business processes to implement the requirements, and specifies software requirements for programmers to implement. Regrettably, there are too few people performing this vital task and, consequently, the responsibility defaults to the programmer who is not necessarily equipped with the proper skills to perform the work&#8221;.</cite><br />
I do know many programmers who are not very good in understanding business requirements or don&#8217;t want to understand them at all. However, unlike Mr. Bryce, I believe that programmers must learn speaking business language, communicate directly with customers and understand their needs. I believe that true programmer&#8217;s job is not limited to writing instructions for computers. <span style="font-weight: bold">The professional programmers should become master translators of complex mental concepts into software.</span><br />
Otherwise wrong interpretation of business concepts will make software bad and, therefore, programmers will look bad. And Mr. Bryce will be right again.</p>
<h3>   3. Programmers tend to fashionable, but not practical solutions</h3>
<p>Mr. Bryce writes: <cite>&#8220;An elegant solution to the wrong problem solves nothing. It is important for programmers to learn to justify their technical recommendations from a business perspective.&#8221;</cite><br />
Indeed, many programmers are more interested in technical and even fashionable solutions without considering business perspective. Can this happen, because often technology is the only area where they can apply their intellect and creativity? Can this happen, because management doesn&#8217;t involved programmers in decisions related to business domain and understanding customer needs? Can this happen, because programmers are often disconnected from real business needs and goals of the projects?<br />
Over-engineered solutions, which are done with fashionable technology, but without practical necessity are bad. However, if two prior points could become true &#8211; programmers work directly with customers, understand their needs and translate them into the software &#8211; programmers will not have time and desire for fancy technical solutions, but will strive for pragmatic, lean and focused on customer value solutions.</p>
<h3>   Theory P Corollaries</h3>
<p>Mr. Bryce consider programmers as the herd of wild geeks who need strong management control. These management shepherds should control programmer&#8217;s lazy, pseudo-intellectual and capricious nature. And also software projects need the army of business analysts who can chew over for programmers business needs (as low IQ obviously doesn&#8217;t help programmers to get it directly). And certainly software projects badly need management consultants like Mr. Bryce who can tell how to properly treat programmers and create theories of their behavior.</p>
<p>There is another way. Treat and trust programmers as responsible human beings, let them work directly with customers and let them make most project decisions. It is not an easy shift in minds considering existing stereotypes from both management and programmers sides. But it could be done in <a href="http://softwarecreation.org/2007/the-ideal-software-company-utopia/" title="The Ideal Software Company">The Ideal Software Company</a>.</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=24&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2007/programmers-are-lazy-capricious-pseudo-intellectuals-really/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>The Ideal Software Company. Utopia?</title>
		<link>http://softwarecreation.org/2007/the-ideal-software-company-utopia/</link>
		<comments>http://softwarecreation.org/2007/the-ideal-software-company-utopia/#comments</comments>
		<pubDate>Wed, 11 Jul 2007 03:12:06 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Economics]]></category>
		<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2007/the-ideal-software-company-utopia/</guid>
		<description><![CDATA[Share If you want to build a ship, don&#8217;t herd people together to collect wood and don&#8217;t assign them tasks and work, but rather teach them to long for the endless immensity of the sea. &#8211; Antoine de Saint-Exupery


I have a dream about a company that always makes users happy. The company that quickly builds [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2007/the-ideal-software-company-utopia/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2007/the-ideal-software-company-utopia/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2007/the-ideal-software-company-utopia/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2007/the-ideal-software-company-utopia/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2007/the-ideal-software-company-utopia/&amp;title=+The+Ideal+Software+Company.+Utopia%3F&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p class="right"> <cite>If you want to build a ship, don&#8217;t herd people together to collect wood and don&#8217;t assign them tasks and work, but rather teach them to long for the endless immensity of the sea.</cite><strong> &#8211; Antoine de Saint-Exupery</strong></p>
<p><br class="clear" /><br />
<img src="http://softwarecreation.org/images/2007/utopia.jpg" alt="Utopia" /></p>
<p>I have a dream about a company that always makes users happy. The company that quickly builds high quality, simple and usable software that fully meets user needs. The company that reacts rapidly on customer demands, anticipates new needs and immediately use these opportunities. The company where people are happy, motivated and could realize their potential, dreams and life goals. The company that is successful on market and in the hearts of users, investors and employees. The Ideal Software Company.</p>
<h3>   The Barriers</h3>
<p>What are the main problems with building software? What are contributing factors to these problem? What prevents many existing software companies from being ideal?</p>
<ol>
<li>     <span style="font-weight: bold">Unclear, incomplete or misinterpreted user     needs.</span> The software programs often don&#8217;t solve needs on adequate     level, have bad usability and contain many unused features.</li>
<li>     <span style="font-weight: bold">Difficulty to estimate required     effort</span>. Missed deadlines, doomed schedules and budget overruns are     <a href="http://www.sdtimes.com/article/story-20070301-01.html" title="the common deceases">the     common deceases</a> in software development.</li>
<li>     <span style="font-weight: bold">Inability to adopt to changes</span>. Often it is even impossible to estimate effort at the beginning as many things are changing during the course of the project: customer needs, performance requirements, business context. But for many software companies these changes still bring chaos to their projects.</li>
<li>     <span style="font-weight: bold">Poor, rigid or low quality solutions.</span> Implementation defines project success. Talent, experience or knowledge are necessary to build good solutions, and they are often missing in the project teams.</li>
</ol>
<h4>The main reasons for these problems</h4>
<ol>
<li>     <span style="font-weight: bold">Top-down decisions</span> &#8211; only few people     make decisions with limited information, lack of feedback and independent     information</li>
<li>     <span style="font-weight: bold">Poor aggregation</span> of information from     different sources</li>
<li>     <span style="font-weight: bold">Lack of diversity</span>: homogeneous groups that are responsible for only specific aspect of the project (requirements, design, programming, etc.)</li>
<li>     <span style="font-weight: bold">Lack of accountability</span> for the end     results, mismatch in company and personal employees goals, politics and     suboptimal decisions.</li>
<li>     <span style="font-weight: bold">Low motivation and morale</span> &#8211; minimal control over decisions, poor     relation of incentives and payout to contribution into the company success.</li>
<li>     <span style="font-weight: bold">Centralization</span> &#8211; authoritative control causes inflexibility, lack of independence and adaptability; missing local tacit knowledge in decision making.</li>
</ol>
<p>James Surowiecki in his book <a href="/2007/review-the-wisdom-of-crowds-making-the-best-decisions/" title="The Wisdom of Crowds">The Wisdom of Crowds</a> clearly shows that traditional top-down companies are inefficient in making the best decisions.</p>
<h3>   The Ideal Software Company</h3>
<h4>A. Company organization</h4>
<ol>
<li>     <span style="font-weight: bold">Powerful teams</span> &#8211; the company represents a conglomerate of powerful teams. Projects teams are small, diverse and empowered to make most project decisions.</li>
<li>     <a href="http://en.wikipedia.org/wiki/Egolessness" style="font-weight: bold" title="egoless">Egoless</a><span style="font-weight: bold">     management</span> &#8211; management carry mostly support, coordination and representation functions. Leadership is moved to the teams level. Top management is a consulting body, which includes highly skilled professionals in finances, technology, sales, etc.</li>
<li>     <span style="font-weight: bold">Shared and competing infrastructure</span> &#8211; company infrastructure could include services as hosting, customer support, recruitment or distribution. These in-house services are shared and compete with outside providers.</li>
</ol>
<p><span id="more-13"></span></p>
<h4>B. User needs, product and feature ideas</h4>
<ol>
<li>     <span style="font-weight: bold">Generate many alternatives</span> &#8211; the     company uses diverse sources (internal, user community, paid analysts and     experts, etc.) for ideas generation</li>
<li>     <span style="font-weight: bold">Predict most successful ideas</span> &#8211;     the company establishes     <a href="http://en.wikipedia.org/wiki/Prediction_market" title="prediction markets">prediction     markets</a> for deciding forecasting most successful ideas with large group of participants &#8211; customers, user community, domain experts, managers, designers, and developers. They make independent guesses based on their private knowledge.</li>
<li>     <span style="font-weight: bold">Select the best ideas</span> &#8211; any team could     use this information to sign up for implementation of the product or feature     ideas.</li>
</ol>
<h4>C. Team is a business unit</h4>
<ol>
<li>     <span style="font-weight: bold">Full responsibility</span> &#8211; a team is ultimately responsible for all decisions and end-results. The team selects product ideas, come up with solutions an implements them.</li>
<li>     <span style="font-weight: bold">Diverse teams</span> &#8211; teams are diverse, self-sufficient and include people with different background, areas of expertise: marketing, domain experts, UI designers, developers, system administrators, testers, customers and community representatives.</li>
<li>     <span style="font-weight: bold">Organic composition</span> &#8211; the team can choose its composition, hire (or outsource) an additional or remove poor performing member; selects in-house or outsourced services (hosting, customer support, etc.)</li>
</ol>
<h4>D. Team formation</h4>
<ol>
<li>     <span style="font-weight: bold">Talented people</span> &#8211; the company hires talented people with diverse background, skills and experience. The only requirement is high qualification, creativity or expertise.</li>
<li>     <span style="font-weight: bold">Easy start</span> &#8211; Anybody in the company can initiate and assemble the team for implementation. The team applies to the internal VC group (see below) for financing and approval of the project.</li>
<li>     <span style="font-weight: bold">Easy scalability</span> &#8211; the team can contribute to open-source projects (at least for non-core and non-competing features and modules) and easily scale beyond company borders.</li>
</ol>
<h4>E. Sharing and learning</h4>
<ol>
<li>     <span style="font-weight: bold">Shared best practices</span> &#8211; the company promotes the best practices, tools, designs, conventions and approaches from internal and outside sources. Teams are free to select and use any of them.</li>
<li>     <span style="font-weight: bold">Cross-team training</span> &#8211; the company     organizes cross-team knowledge sharing and training.</li>
<li>     <span style="font-weight: bold">Continuous improvement</span> &#8211; the company encourages regular reflection and continuous improvement sessions, where the organization, processes, company and teams interactions are scrutinized and changed.</li>
</ol>
<h4>F. Financing, incentives, internal market</h4>
<ol>
<li>     <span style="font-weight: bold">Internal Venture Capitalist group (VC)</span> &#8211; the company has something like Venture Capitalist (VC) group, which includes management, investors representatives and leaders of top teams that approves and finances new projects and teams. Teams are starting with minimal budget that barely covers their first needs.</li>
<li>     <span style="font-weight: bold">Team value market</span> &#8211; The company has internal market for the value of each team. This value is linked to success criteria established by company: (revenue, number of users, cost saving, use inside company, buzz).</li>
<li><span style="font-weight: bold">Pay based on performance</span> &#8211; Team budget, payout and incentives are directly corresponding with their value. More successful teams will get more money, resources and influence in the company. VC group disassemble unsuccessful teams. While any employee has guaranteed minimal salary, the people who doesn&#8217;t contribute in any team will be fired. People who performs will be very well rewarded.</li>
</ol>
<h4>G. Mobilization</h4>
<ol>
<li> The company in time of emergency or especially large projects can force creation of special task teams (as National Guard). Company leaders should approve this temporary mobilization and limit impact on other projects</li>
</ol>
<h3>   The Benefits</h3>
<p>The Ideal Software Company should overcome most barriers.</p>
<ul>
<li> Teams are diverse, independent and make most decisions. Information flow is free and the company ensures that teams receive it most effectively.</li>
<li> Individual income is directly linked to their team performance (but not individual contribution inside the team). Teams compete with market not between themselves.</li>
<li> Teams can still uses benefits of centralized services, coordination of activities and shared knowledge. Company organizes prediction markets, internal VC group and provides financing of the projects.</li>
<li> The system is adaptive, lean and focused on the market and user needs. Bureaucracy is almost absent, the company need only few coordination mechanisms, the approach is compatible with our human nature and self-interest. It is combination of adaptability of decentralized and power of coordinated system.</li>
</ul>
<p>What if we have only one team? We receive a small, lean and powerful startup. As a startup becomes bigger, it is often turns into inefficient traditional corporation with hierarchical control. Many startups lose their flexibility and adaptability once they become bigger. The Ideal Software Company should avoid this fate with the growth.</p>
<h3>   Is it possible?</h3>
<p>I see many potential problems with creating The Ideal Software Company &#8211; political (most managers are not egoless), economical (internal financing schema, appeal to investors), organizational (new ways to employ people). But I believe it is possible.</p>
<p>Agile development processes (Scrum, Extreme Programming, Crystal Clear) are changing <a href="http://www.martinfowler.com/articles/newMethodology.html#PuttingPeopleFirst" title="the role of people and teams">the role of people and teams</a> in software companies. I know few companies that are close to the ideas of The Ideal Software Company. Google in software world, 3M and Toyota in manufacturing. <a href="http://blog.fastcompany.com/archives/2004/03/14/google_innovation_and_the_web.html" title="Google">Google</a> has free flow of ideas, powerful self-organized teams and attention to user needs. <a href="http://www.poppendieck.com/development1.htm" title="3M">3M</a> has entrepreneurial cross-functional teams with focus on business goals. Toyota become #1 auto manufacturer because their <a href="http://en.wikipedia.org/wiki/Toyota_Production_System" title="Toyota Production System">Toyota Production System</a> gives unprecedented power to the teams and continuous process of improvement and solving root problems.</p>
<p>Is The Ideal Software Company utopia? What do you think?</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=13&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2007/the-ideal-software-company-utopia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
