<?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>Mon, 11 Jul 2011 01:12:57 +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>Three Spirits in The Soul of a Software Developer</title>
		<link>http://softwarecreation.org/2011/three-spirits-in-the-soul-of-a-software-developer/</link>
		<comments>http://softwarecreation.org/2011/three-spirits-in-the-soul-of-a-software-developer/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 00:11:24 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Job]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[People]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=225</guid>
		<description><![CDATA[I noticed that three spirits are fighting in the soul of a software developer &#8211; Great Artist, Reliable Worker and Selfish Pragmatist. Great Artist If you hear a voice within you say, ‘You cannot paint,’ then by all means paint, and that voice will be silenced. &#8211; Vincent van Gogh The first spirit is a [...]]]></description>
			<content:encoded><![CDATA[<div><img class="alignnone" title="Battle" src="http://softwarecreation.org/images/2011/battle.jpg" alt="" width="600" height="257" /></div>
<div><span id="internal-source-marker_0.4501636205241084">I noticed that three spirits are fighting in the soul of a software developer &#8211; Great Artist, Reliable Worker and Selfish Pragmatist.</span></div>
<div>
<h3>Great Artist</h3>
<p><em> If you hear a voice within you say, ‘You cannot paint,’ then by all means paint, and that voice will be silenced.</em> &#8211; Vincent van Gogh</p>
<p>The first spirit is a <em>Great Artist</em> who pushes our fellow programmer to work on challenging tasks, invent new approaches and seek for self realization. The spirit gives power and desire to create state of art solutions and move forward with learning and practice. The <em>Great Artist</em> spirit is behind the best software; it makes the developer to think out of box, strive for beautiful code and forget everything outside the problem. It is powerful spirit but dangerous for ordinary business &#8211; there is no predictability and assurance that developer will remember what client really needs. The developer driven by this spirit tend to reject mediocre, but good enough solutions, will do stuff his own way and go far beyond what is necessary. This developer has zero tolerance to poor code and will refactor most important pieces of code even night before important demo&#8230; after testers go home to sleep.</p>
<p><span id="more-225"></span></p>
<h3>Reliable Worker</h3>
<p><em> No man is an island, entire of itself; every man is a piece of the continent.</em> &#8211; John Donne</p>
<p>The second spirit is a <em>Reliable Worker</em> who puts interests of the team, company and client on the first place. The developer driven by this spirit completely dedicates himself to success of the project and Greater Good. The <em>Reliable Worker</em> spirit  suppresses creativity and code that is not sanctioned by management and could fail. The developer will stay late to meet deadlines and fix embarrassing bugs; he will test after testers and verify installation after administrators.This altruistic spirit makes a developer focused, accountable and disciplined citizen of the company, but sometimes cause stress, uneasiness and feeling of wasted talent.  The danger is that  Reliable Worker spirit can evaporate fast if a company don’t care about developer’s hard work and sacrifices.</p>
<h3>Selfish Pragmatist</h3>
<p><em> Life is what happens to you while you&#8217;re busy making other plans</em>. – John Lennon</p>
<p>The spirit of <em>Selfish Pragmatist</em> is concerned about personal interests, financial well being, job security and career growth. This spirit forces a developer to accept shit and concentrate mostly on paycheck and managers recognition. The <em>Selfish Pragmatist</em> spirit becomes stronger with age as family and personal matters take over dreams of building great software and day-to-day problems kick out illusions about dedication and loyalty at work. Sometimes the developer influenced by this spirit starts to focus on stuff that is more beneficial for personal growth, produce tangled code for better job security and increase complexity for longer contacts or even work on own side projects, business or simply waste time on Internet. This spirit is fed by natural desire to achieve personal goals, secure own future and have life outside work. The danger of this spirit is that the developer could become counter-productive and don’t care about quality and long-term success of  	the project and company.</p>
<p>Each of spirits have positive effects: <em>Great Artist</em> provides creative power, <em>Reliable Worker</em> encourage discipline and focus on results and <em>Selfish Pragmatist</em> ability to meet personal interests. But there are also side effects:  <em>Great Artist</em> overdoes and misses real needs, <em>Reliable Worker</em> causes burn down and fear of change and <em>Selfish Pragmatist</em> downplays company and client best interests.</p>
<p>These spirits tear on pieces many poor developer&#8217;s souls and prevent peace in their minds. What is usual result of this battle of spirits?  I saw many developers who end up with one spirit rule (unfortunately often with Selfish Pragmatist) and no longer have much struggle. Other developers will flip between spirits depending on circumstances: some companies spark creative Great Artist and some provoke defensive Selfish Pragmatist.</p>
<p>The existence of the spirits is my subjective observation and theory, but it helps to explain many interesting phenomena in life of software teams. So, I have few questions to you, my dear reader.</p>
<p>Do you agree that these spirits exist?  Can you handle and balance them well? Did I miss any other important spirit or force in the soul of the software developer?</p></div>
<img src="http://softwarecreation.org/?ak_action=api_record_view&id=225&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2011/three-spirits-in-the-soul-of-a-software-developer/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>The Toolkit for Increasing Productivity of Software Teams</title>
		<link>http://softwarecreation.org/2010/the-toolkit-for-increasing-productivity-of-software-teams/</link>
		<comments>http://softwarecreation.org/2010/the-toolkit-for-increasing-productivity-of-software-teams/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 03:43:55 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=182</guid>
		<description><![CDATA[Seasoned project managers will tell that delivery of software is result of many trade offs. The main trade off is between Time (when project will finish) and Scope (how much will be done). This post will show that using right tools you could gain improvement for both variables. While it is possible to create orderly step-by-step process [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" style="height: 310px; width: 450px;" src="http://softwarecreation.org/images/2010/5letka.jpg" alt="" width="450" height="310" /></p>
<p>Seasoned project managers will tell that delivery of software is result of many trade offs. The main trade off is between <strong>Time </strong>(when project will finish) and <strong>Scope </strong>(how much will be done). This post will show that using right tools you could gain improvement for both variables.</p>
<p>While it is possible to create orderly step-by-step process for increasing productivity of software teams, it will never be ideal &#8211; too many variations and situations will hinder it usefulness. I believe in set of useful tool that could be combined to craft custom optimal solution.</p>
<h3>Strategies</h3>
<p style="margin: 0px;">There are several strategies that lead to increase in productivity &#8211; how many units of scope software team can produce within fixed time.</p>
<ol>
<li><strong>Increase Capacity (Capacity) </strong>- increase capacity by hiring more people or increasing work hours
<ul>
<li>productivity is increased as result of more resources and hours available</li>
</ul>
</li>
<li><strong>Improve Value Stream (Value) </strong>- increase added business value on each step and reduce waste and overhead
<ul>
<li>productivity is increased as result of optimized delivery of value</li>
</ul>
</li>
<li><strong>Adaptat to Reality  (Adaptation)</strong>- learn from practice and mistakes, validation of ideas by reality, adapt to changing situation
<ul>
<li>productivity increased as result of early corrections and improving how things are done</li>
</ul>
</li>
<li><strong>Empower Individuals (Individuals) </strong>- boost people knowledge, skills, morale and focus
<ul>
<li>productivity is increased as result of higher individual performance and motivation</li>
</ul>
</li>
<li><strong>Enhance Communication (Communication) </strong>- improve communication and mutual understanding inside and outside of the team
<ul>
<li>productivity is increased as result of availability of necessary information, clarity of what should be done and exchange of ideas for implementation</li>
</ul>
</li>
<li><strong>Organize Better (Organization)</strong> &#8211;  structure team and assign roles for better coordination and decision making
<ul>
<li>productivity is increased as result of better decisions and focus on important areas</li>
</ul>
</li>
<li><strong>Expand Expertise (Expertise) </strong>- increase range of skills and services offered by team
<ul>
<li>productivity is increased as result of better execution of necessary project activities</li>
</ul>
</li>
<li><strong>Scale Externally (Externality)</strong> &#8211; outsourcing and involvement of external communities
<ul>
<li>productivity is increased as result of involvement of more people outside of team</li>
</ul>
</li>
<li><strong>Tame Complexity (Design)</strong> &#8211; manage complexity and provide simple and well designed solutions
<ul>
<li>productivity is increased as result of reducing complexity burden on software development</li>
</ul>
</li>
<li><strong>Preserve Quality (Quality)</strong> &#8211; use defensive tactics to ensure high quality
<ul>
<li>productivity is increased as result of preventing system flaws and reduced effort to fix bugs</li>
</ul>
</li>
</ol>
<div>I separated tools into three categories:</div>
<ul>
<li><strong>People-oriented</strong> &#8211; people are the creators of software and have major effect on output</li>
<li><strong>Process-oriented</strong> &#8211; the way how people work has significant impact on outcome</li>
<li><strong>Development-oriented</strong> &#8211; development practices and approach to the system implementation matters a lot</li>
</ul>
<p><img class="alignnone" title="Productivity Strategic Areas" src="http://softwarecreation.org/images/2010/Productivity Toolkit.png" alt="" width="798" height="870" /></p>
<p><span id="more-182"></span></p>
<h3 style="font-size: 12pt;">People-oriented tools</h3>
<p><span style="font-weight: normal; line-height: 26px; font-size: 13px; "><img class="alignnone" title="union" src="http://softwarecreation.org/images/2010/union.jpg" alt="" width="450" height="334" /></span></p>
<div id="nuwr" style="margin-top: 0px; margin-bottom: 0px; text-align: left;"><strong>1. Hire New People</strong></div>
<p><em>Strategies: </em>Capacity <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Expertise <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Communication <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" />,  Organization <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" /></p>
<p>New people increase volume of possible work within the same time and new expertise increases range and quality of tasks. However, the increase in output is not linear and quickly diminishes, because more people cause communication and coordination overhead. In addition, compensation increase make this tool expensive and less attractive.</p>
<div><em>Tips: </em>Form few small teams to avoid large group overhead and scale by parallel development of system components and sync within team of teams. Also remember what Fred Brook said: <em>Adding manpower to a late software project makes it later</em>.</div>
<p><em>Resources:</em></p>
<ul>
<li><a id="qhcz" title="Methodology and Team Size" href="http://alistair.cockburn.us/Methodology+per+project">Methodology and Team Size</a>, Alistair Cockburn</li>
<li><a id="l6bz" title="Team Size Matters" href="http://www.shmula.com/181/team-dynamics-size-matters">Team Size Matters</a>, schmula</li>
</ul>
<p><strong>2. Motivate</strong></p>
<div><em>Strategies: </em>Individuals <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></div>
<p>Happy motivated people are more productive, focused and concerned about quality and end result. While there is no common receipt for each individual, I believe there are some strong motivators: interesting and meaningful work, fair compensation, control over own tasks and outcomes, ability to learn and professionally grow, comfortable workplace and adequate tools, empathetical and caring management and so on.<br />
Daniel H. Pink in <a id="pp90" title="Drive" href="http://www.amazon.com/gp/product/1594488843?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1594488843">Drive</a> thinks that people are motivated by three elements:</p>
<ul>
<li>Autonomy: People want to have control over their work.</li>
<li>Mastery: People want to get better at what they do.</li>
<li>Purpose: People want to be part of something that is bigger than they are.</li>
</ul>
<div><em>See Also: </em></div>
<ul>
<li>Professional Growth</li>
</ul>
<p><em>Tips:</em> Motivate individually, but set also group targets to encourage cooperation</p>
<div><em>Resources:</em></div>
<ul>
<li><a id="pkhw" title="Drive" href="http://www.amazon.com/gp/product/1594488843?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1594488843">Drive</a>, Daniel H. Pink</li>
<li><a title="The Ideal Software Company. Utopia?" href="http://softwarecreation.org/2007/the-ideal-software-company-utopia/">The Ideal Software Company. Utopia?</a></li>
</ul>
<p><strong>3. Professional Growth</strong></p>
<p><em>Strategies: </em>Individuals <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Expertise <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Adaptation <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<p>Software professionals should learn a lot to become productive and proficient. People learn in several ways and learning from mistakes is the most memorable, but expensive way. Learning by self-study, formal training and coaching by experienced colleagues are more effective ways. Encourage and direct learning to grow high performance experts and team. And certainly, continue learning as much as possible from mistakes and practice. :)</p>
<div><em>Tips:</em> Give opportunity for people to learn things that are beyond immediate needs of the project. Ability to learn and perspectives of growth are the strongest motivation factors for majority of software professionals.</div>
<div><em>Resources:</em></div>
<ul>
<li><a href="http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/">How to Become an Expert. Top 7 Qualities</a></li>
<li><a href="http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/">How to Become an Expert. The Effective Way</a></li>
</ul>
<p><strong>4. Overtime</strong></p>
<div><em>Strategies: </em>Capacity <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Individuals <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" /></div>
<p>Nobody recommends involuntary overtime for a long time as benefits will disappear quickly when a stressed team lowers quality and starts breaking apart.</p>
<div><em>Tips: </em>Use overtime as a last resort for very short period.</div>
<div>Resources:</div>
<div>
<ul>
<li><a id="i82t" title="Overtime Considered Harmful" href="http://www.basilv.com/psd/blog/2006/overtime-considered-harmful">Overtime Considered Harmful</a></li>
</ul>
</div>
<p><strong>5. Right leaders</strong></p>
<div><em>Strategies: </em>Communication <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Organization <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></div>
<p>Good leaders jell teams, align people with goals, boost energy and remove barriers. Leaders vary from commanders to visionaries and each style has merits under specific circumstances. Right leaders are essential for the project success.</p>
<p><em>Tips:</em> Adjust leadership style to situation</p>
<div><em>Resources:</em></div>
<ul>
<li><a id="j-h0" title="What is The Best Leadership Style for The Software Team?" href="http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/">What is The Best Leadership Style for The Software Team?</a></li>
</ul>
<div><strong>6. Specialize</strong></div>
<p><em>Strategies:</em> Expertise <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Organization <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<p>A software team requires range of skills and involved in different activities to achieve end goal &#8211; implemented software system for customer needs. Beyond software implementation the team deals with a customer domain, company vision, market demands, technologies, operation environments and other project aspects. The team is involved in research, analysis, coordination, design, architecture, usability, testing, deployment, hosting and other activities. Therefore team players should be able to play different roles and have expertise to cover various aspects to ensure good end results.</p>
<div><em>Tips:</em> A high degree of specialization and separation of roles is inevitable for large teams and projects. However specialization can hurt the project as people forget about big picture, holistic solutions and instead focus on what is important for their local area. The team leaders should pay a lot of attention to <em>Alignment </em>to counter-attack sub-optimization and locally focused decisions.</div>
<p><em>Resources:</em></p>
<ul>
<li><a title="Why specialization in Software development is bad for business" href="http://softwaredevelopmenttoday.blogspot.com/2009/06/why-specialization-in-software.html">Why specialization in Software development is bad for business</a></li>
</ul>
<div><strong>7. Outsource</strong></div>
<p><em>Strategies: </em>Capacity <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Expertise <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Externality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Organization <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" />, Communication <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" /></p>
<p>Tasks and challenges should match skills and experience of team players. It doesn&#8217;t make sense for backend developers to convert Photoshop files into html or conduct marketing research and focus groups. If team cannot afford to hire a permanent specialist, they should try to find professional mercenaries who will do work faster on higher quality level.</p>
<div><em>Tips:</em> It is more difficult to align outsiders, who don&#8217;t have long-term commitment and interest in the end result. Communication and clear understanding are hard to achieve. Preferably, outsiders should be assigned well-defined tasks and sub-projects with clear outcome and frequent validation points.</div>
<div><em>Resources:</em></div>
<div>
<ul>
<li><a title="Using an Agile Software Process with Offshore Development" href="http://martinfowler.com/articles/agileOffshore.html">Using an Agile Software Process with Offshore Development</a></li>
</ul>
</div>
<div><strong>8. Induce Individual Flow</strong></div>
<div><em>Strategies: </em>Individuals <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></div>
<p>Flow (or Immersion) is a state of mental focus so intense that awareness of the real world is lost, generally resulting in a feeling of joy and satisfaction. When learning and tasks are too easy, people become bored. If they are too complex they become stressed and frustrated. Flow happens when perception and understanding are challenged near capacity without being exceeded.</p>
<div><em>Tips:</em> Flow conditions:</div>
<ul>
<li>ability to focus</li>
<li>clear goals</li>
<li>immediate feedback</li>
<li>control over actions, activities and the environment</li>
</ul>
<div><em>Resources:</em></div>
<ul>
<li>
<p style="margin: 0px;"><a id="fbb6" title="Flow: The Psychology of Optimal Experience" href="http://www.amazon.com/gp/product/0061339202?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0061339202">Flow: The Psychology of Optimal Experience</a>, Mihaly Csikszentmihalyi</p>
</li>
</ul>
<div><strong>9. Discipline</strong></div>
<div><em>Strategies: </em>Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Organization <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Individuals <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" /></div>
<p>Few people will be always disciplined no matter what and few will always violate rules. Majority are context sensitive &#8211; relax than discipline is low and work hard when discipline is enforced. Build a minimal set of rules approved by majority and stick to these rules.</p>
<div><em>Tips:</em> Too much discipline could significantly deprive productivity, motivation and promote compliance instead of dedication.</div>
<p><em>Resources:</em></p>
<ul>
<li><a href="http://softwarecreation.org/2007/lost-personalities-how-our-company-alters-us/">Lost Personalities: How our company alters us</a></li>
</ul>
<h3 style="font-size: 12pt;">Process-oriented tools</h3>
<div><img style="height: 500px; width: 364px;" src="http://softwarecreation.org/images/2010/industry.jpg" alt="" width="364" height="500" /></div>
<p><strong>10. Increase feedback and early practical use of ideas</strong></p>
<div><em>Strategies: </em>Adaptation <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></div>
<p>Reality is complex, fluid and unclear. Many assumptions and plans quickly go bust. The process that has built-in mechanism for signaling problems and self-correction is the most effective. Rapid feedback is the core part of such process.</p>
<p><em>Tips:</em> Iterative development is one of the best examples of the process that relies heavily on feedback.</p>
<div><em>Resources:</em></p>
<ul>
<li><a title="How to become an Expert. Embrace Reality." href="http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/">How to become an Expert. Embrace Reality.</a></li>
</ul>
</div>
<p><strong>11. Build alignment</strong></p>
<div><em>Strategies:<span style="font-style: normal;"> Communication <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Organization <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></span><br />
</em></div>
<p>People jump significant gaps to understand each other &#8211; sometimes without much success. Clear vision, smart priorities and honest evaluation allow team players moving in unison and enforce each other. Good understanding focus people on right goals and reduce wasteful activities. Communication and trust are important for alignment.</p>
<div><em>Tips:</em> Take care about important alignment elements:</div>
<ul>
<li>vision &#8211; project direction and top-level goals</li>
<li>interests &#8211; mix of personal, customer and companies interests (sometimes conflicting)</li>
<li>understanding &#8211; clarity about what others mean</li>
<li>trust &#8211; confidence in other people intentions and promises</li>
</ul>
<div><em>Resources:</em></p>
<ul>
<li><a href="http://softwarecreation.org/2007/software-development-is-the-flow-of-ideas-the-rest-is-secondary/">Software Development is The Flow of Ideas. The Rest is Secondary</a></li>
</ul>
</div>
<p><strong>12. Integrated decision making</strong><br />
<em> </em></p>
<p><em>Strategies:</em> Communication <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Adaptation <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<div>Quality of decisions cause projects failure or success. Good decisions are based on correct information, experience, goals, feedback, expert opinions and so on. Decisions could be centralized, consensus based or delegated to lower level. The project should have right mix of these styles, but most effective decisions are made by people who will implement them.<br />
In addition, involvement in decision making empower people and give them sense of control.</div>
<p><em>See Also:</em></p>
<ul>
<li>Self-organization</li>
</ul>
<div>
<div><em>Tips:</em> Decisions often won&#8217;t be perfect, but they more chances on success if</div>
<ul>
<li>underlying causes are understood</li>
<li>decisions are early validated on practice</li>
<li>diverse group of people is involved</li>
<li>goals and background for decision are clearly communicated (preferably on one sheet of paper)</li>
</ul>
<p><em>Resources:</em></p>
<ul>
<li><a title="How to become an Expert. Embrace Reality." href="http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/">How to become an Expert. Embrace Reality.</a></li>
<li><a href="http://softwarecreation.org/2007/review-the-wisdom-of-crowds-making-the-best-decisions/">Review: The Wisdom of Crowds. Making the Best Decisions</a></li>
</ul>
<div><strong>13. Verification (QA) and Stopping to Fix Problems</strong></div>
<p><em>Strategies:</em> Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Capacity <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" /></div>
<div>
<div>Good Quality Assurance makes projects solid and expose not only bugs, but serious system flaws &#8211; requirements discrepancies, problems with user experience and system inconsistencies. Low tolerance to quality problems should be a working principle. The team should have mandate to stop and fix root problems immediately and avoid patching that causes painful chronic problems.</div>
<p><em>Tips: </em>Productivity could decrease if QA becoming ceremony and impede efficiency and speed of software team. Automation of routine testing could help.</p>
<div><em>Resources:</em></div>
<ul>
<li><a href="http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/">How to rescue failing software projects: The Toyota Way</a></li>
</ul>
<div><strong>14. Continuous improvements (Kaizen)</strong></div>
<p><em>Strategies:</em> Adaptation <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></div>
<p>As project progresses you will find problems, wrong assumptions and challenges. You will have better experience and understanding. Even brightest ideas, best practices and excellent analysis and design could become outdated and ineffective. Continuously look for improvements, eliminate waste and bottlenecks.</p>
<div><em>See Also: </em></div>
<div>
<ul>
<li>Feedback</li>
</ul>
</div>
<p><em>Resources:</em></p>
<ul>
<li><a href="http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/">How to rescue failing software projects: The Toyota Way</a></li>
<li><a id="n59s" title="Theory of Constraints" href="http://en.wikipedia.org/wiki/Theory_of_Constraints">Theory of Constraints</a></li>
<li><a title="Kaizen" href="http://en.wikipedia.org/wiki/Kaizen">Kaizen</a></li>
</ul>
<div><strong>15. Focus on distinctive core</strong></div>
<p><em>Strategies:</em> Individuals <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<p>Highly productive team shouldn&#8217;t waste time on routine or non-core activities. Routine work should be automated and non-core work outsourced or covered by external components. The team should focus on high value-added distinctive work for business and application domain &#8211; this will bring maximum business results with minimal development effort.</p>
<div><em>See also :</em></div>
<div>
<ul>
<li>Outsource</li>
<li>More integration &#8211; less innovation</li>
</ul>
</div>
<div><em>Tips: </em>Qualities that support focus on Core (high value-added distinctive work for business):</div>
<ul>
<li>system thinking</li>
<li>understanding what really matters and what are limitations</li>
<li>broad vision and out-of-the box thinking</li>
<li>knowledge of environment, context and system outside relations</li>
<li>synthesis of concepts, information and experience</li>
</ul>
<div><em>Resources:</em></p>
<ul>
<li> <a href="http://softwarecreation.org/2008/top-5-non-traditional-traits-for-survival-of-in-house-programmers/">Top 5 non-traditional traits for survival of in-house programmers</a></li>
</ul>
</div>
<div><strong>16. Engage developer and user communities</strong></div>
<p><em>Strategies:</em> Capacity <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Expertise <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Externality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Organization <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" /></p>
<div>Experienced users can support beginners, and provide valuable advices on forums and social applications. They can be co-creators of content and even functionality. Passionate users can promote and market your software better than advertisers. They can generate great ideas and provide valuable feedback about your applications.</div>
<div>Go open-source if your problem is complex, large and interesting for other developers (and is not important part of your market advantage). Contribute to other projects and get value by using it for own needs (examples are Linux, Firefox)</div>
<div>
<p><em>Tips:</em> Community groups could pursue own goals and sometimes are difficult to align.</p>
<div><em>Resources:</em></p>
<ul>
<li><a id="cmxv" title="The next step in open innovation" href="https://www.mckinseyquarterly.com/next_step_in_open_innovation_2155">The next step in open innovation</a></li>
</ul>
</div>
<p><strong>17. Actively work with customer ideas</strong></div>
<p><em>Strategies:</em> Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Communication <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<p>You can better understand and change scope of application if you actively work with customers and become partners</p>
<ul>
<li>establish ubiquitous language &#8211; for better understanding of ideas and translation them into code</li>
<li>tap into experience and get better insight for business domain and processes</li>
<li>transform ideas &#8211; simplify and find better alternatives</li>
</ul>
<div><em>Tips:</em> Productivity could be improved by</div>
<ul>
<li>reducing scope</li>
<li>simplifying solutions</li>
<li>finding good enough alternatives</li>
</ul>
<div><em>Resources:</em></div>
<ul>
<li><a id="yeq-" title="Pareto Principle" href="http://en.wikipedia.org/wiki/Pareto_principle">Pareto Principle</a></li>
<li><a id="qvq4" title="Ubiquitous Language" href="http://domaindrivendesign.org/node/132">Ubiquitous Language</a></li>
<li><a href="http://softwarecreation.org/2007/software-development-is-the-flow-of-ideas-the-rest-is-secondary/">Software Development is The Flow of Ideas. The Rest is Secondary</a></li>
</ul>
<p><strong>18. Select Right Process Flow</strong><br />
<em> </em></p>
<p><em>Strategies:</em> Organization <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<p>Select most optimal process for creating value.</p>
<ul>
<li>real-time flow &#8211;  immediately push tasks for implementation (continuous development flow for highly organized co-located teams)</li>
<li>pull systems (Kanban) &#8211; pull tasks when previous batch is finished and the team is ready to continue (iterations and backlog)</li>
<li>schedule the workload (Heijunka) &#8211; create schedule for contributors with limited availability (outside consultants or shared specialists as designers)</li>
</ul>
<p><em>Tips:</em> Use different flows for distinct stages of software creation. For example, a team process can internally use real-time flow, with external teams &#8211; Kanban and with consultants Heijunka.</p>
<p><em>Resources:</em></p>
<ul>
<li><a id="tkf1" title="The Toyota Way and Development Process" href="http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/">The Toyota Way and Development Process</a></li>
</ul>
<p><strong>19. Self-Organization</strong><br />
<em>Strategies:</em> Communication <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Individuals <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Adaptation <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<div>Connect a software team to a customer and allow them to make most project decisions based on brainstorming, learning and changing situations.</div>
<p><em>Tips:</em> Not every team can self-organize &#8211; it requires maturity. And loss of direct control could be a problem for management if a project departs from company strategy and desired parameters (as budget, standards, resources).</p>
<div><em>Resources:</em></div>
<div>
<ul>
<li><a id="qowd" title="What is The Best Leadership Style for The Software  Team?" href="http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/">What is The Best Leadership Style for The Software Team?</a></li>
<li><a href="http://www.infoq.com/news/2010/04/organizing-selforganizing-teams;jsessionid=7C54FC7F74FDFFC93F8993175A42FF05">Organizing Self-organizing Teams</a></li>
<li><a title="Agile Self-Organizing Teams" href="http://bradapp.blogspot.com/2009/06/agile-self-organizing-teams.html">Agile Self-Organizing Teams</a></li>
</ul>
<div>
<h3 style="font-size: 12pt;">Development-oriented tools</h3>
<div id="n:xe" style="margin-top: 0px; margin-bottom: 0px; text-align: left;">
<div id="v7:x" style="margin-top: 0px; margin-bottom: 0px; text-align: left;"><img style="height: 356px; width: 500px;" src="http://softwarecreation.org/images/2010/traktor.jpg" alt="" width="500" height="356" /></div>
</div>
<p><strong>20. Increase reuse</strong></div>
<p><em>Strategies:</em> Design <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Adaptation <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" /></div>
<p>Reuse code  (components, libraries, solutions) as much as possible to speed up development and minimize code base. Reuse will bring familiar tested solutions and prevent frequent re-inventions of the wheel.</p>
<p><em>See Also:</em></p>
<div>
<ul>
<li>Evolution</li>
</ul>
</div>
<p><em>Tips:</em> Design for reuse requires skills and time. It is easy to overly complicate the system by pursuing reusable code. Evolve and refactor code to achieve practically good reusability. Sometimes custome solutions are lighter and better suited for specific purposes than generic and reusable.</p>
<div><em>Resources:</em></p>
<ul>
<li><a id="mhq0" title="Lifecycle and Refactoring Patterns that Support Evolution and Reuse" href="http://www.laputan.org/lifecycle/lifecycle.html">Lifecycle and Refactoring Patterns that Support Evolution and Reuse</a>, Brian Foote</li>
<li><a href="http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-approach/">The Elements of Pragmatic Programming Style. Approach.</a></li>
<li><a href="http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-approach/"></a><a id="wnue" title="Should An Effective Developer Innovate, Imitate or  just Integrate?" href="http://softwarecreation.org/2010/should-an-effective-developer-innovate-imitate-or-just-integrate/">Should An Effective Developer Innovate, Imitate or just Integrate?</a></li>
</ul>
</div>
<p><strong>21. Generalize and Simplify</strong><br />
<em>Strategies:</em> Design <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Communication <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<p>Complexity and poor understanding of the system is one of the worst problems in development. Design, code and concepts should be as simple as possible and clearly understood by the team. Simplicity and clarity are difficult to achieve and require special effort. It is much easier to produce convoluted over-engineered solution for complex problem (Ball of Mud) than simple and elegant solution.</p>
<div><em>See Also:</em></div>
<div>
<ul>
<li>Follow Design Principles</li>
<li>Evolution</li>
<li>Domain Specific Design</li>
</ul>
</div>
<p><em>Tips:</em> Great design achieve simplicity by abstracting numerous details into simple concepts in process of solution evolution and learning from implementation.</p>
<div><em>Resources:</em></div>
<ul>
<li><a title="Big Ball of Mud" href="http://www.laputan.org/mud/">Big Ball of Mud</a>, Brian Foote</li>
<li><a id="g8.g" title="11 Laws of The System Thinking in Software Development" href="http://softwarecreation.org/2007/11-laws-of-the-system-thinking-in-software-development/">11 Laws of The System Thinking in Software Development</a></li>
<li><a href="http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-approach/">The Elements of Pragmatic Programming Style. Approach.</a></li>
</ul>
<div>
<div><strong>22. More integration, less innovation </strong></div>
<p><em>Strategies:</em> Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Design <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />,  Adaptation <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" /></div>
<div>Innovation is expensive, uncertain and leave you with custom solutions on your own for support and future development. Piggyback on actively involving products, especially for non-core problems where good and proven solutions are available.<em>Tips: </em>Innovate to gain business advantage or solve serious technical challenges if you have an outstanding team and well-defined problems.</p>
<div><em>Resources:</em></div>
<ul>
<li><a id="x39n" title="Should An Effective Developer Innovate, Imitate or just Integrate?" href="http://softwarecreation.org/2010/should-an-effective-developer-innovate-imitate-or-just-integrate/">Should An Effective Developer Innovate, Imitate or just Integrate?</a></li>
<li><a id="racl" title="Selecting The Best Strategy for Software Teams: Retreat, Evolution or Revolution" href="http://softwarecreation.org/2008/selecting-the-best-strategy-for-software-teams-retreat-evolution-or-revolution/">Selecting The Best Strategy for Software Teams: Retreat, Evolution or Revolution</a></li>
</ul>
<div>
<div><strong>23. Domain Specific Design</strong></div>
<p><em>Strategies:</em> Design <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Communication <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></div>
<div>Keep technical ideas and code concepts close to the customer domain. You will achieve consistency, better sync between system and business concepts. You can easier translate customer ideas into the system and customers will understand your implementation better.<em>Tips:</em> <a id="q4.q" title="Domain Driven Design" href="http://domaindrivendesign.org/resources/what_is_ddd">Domain Driven Design</a> is one the best approaches to achieve synthesis of technical and business ideas for complex domains.</p>
<div><em>Resources:</em></div>
<ul>
<li><a id="mzc9" title="Domain Driven Design" href="http://www.amazon.com/gp/product/0321125215/102-4895263-8374529?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0321125215">Domain Driven Design</a>, Eric Evans</li>
<li><a id="ldpv" title="The Secret of Building Effective Software Systems" href="http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/">The Secret of Building Effective Software Systems</a></li>
<li><a href="http://softwarecreation.org/2009/the-elements-of-pragmatic-programming-style-composition/">The Elements of Pragmatic Programming Style. Composition.</a></li>
</ul>
<p><strong>24. Evolution</strong></p>
<div><em>Strategies:</em> Adaptation <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Design <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></div>
<div>Start with the simplest primitive solutions, enforce early use and seek for feedback. Adjust and improve design before continuing adding new features. Look for better ideas and abstractions. Delay fundamental design decisions until you are confident about system development direction and validated ideas on practice. Do not over-engineer and add unnecessary features.</div>
<p><em>Tips: </em>Evolution main deficiency is slowness. Modern businesses often don’t have time for many improvement cycles – they want results now.<span style="font-family: verdana, tahoma, arial, sans-serif;"><span style="color: #333333;"><span style="font-size: x-small;"><br />
</span></span></span></p>
<div><em>Resources:</em></div>
<ul>
<li><a href="http://softwarecreation.org/2008/what-software-development-can-learn-from-biological-evolution/">What can Software Development learn from Biological Evolution?</a></li>
<li><a href="http://softwarecreation.org/2008/ideas-in-software-development-revolution-vs-evolution-part-1/">Ideas in Software Development: Revolution vs. Evolution. Part 1.</a></li>
</ul>
<ul>
<li><a id="cl2i" title="How a beautiful software system becomes Frankenstein" href="http://softwarecreation.org/2008/how-a-beautiful-software-system-becomes-frankenstein/">How a beautiful software system becomes Frankenstein</a></li>
</ul>
<div><strong>25. Open architecture and API</strong></div>
<p><em>Strategies:</em> Externality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Design<img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></div>
<div>
<div>Open your solution for external developers who can extend and add more useful features. If you are lucky, you will get much more functionality than you can build internally while still controlling a core solution (iPhone is a perfect example).</div>
<div>Also Open API (convenient and supported by good documentation) give developers eligible ways to interact with you system without hacking or completely ignoring it.</div>
<p><em>Tips:</em> Once Open API is used it becomes liability &#8211; next design decisions will be affected by compatibility and legacy concerns.<br />
<em>Resources:</em></p>
<ul>
<li><a title="API" href="http://en.wikipedia.org/wiki/Application_programming_interface">API</a></li>
</ul>
<div><strong>26. Follow Design Principles</strong></div>
<p><em>Strategies:</em> Design <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></div>
<p>Some of design principles</p>
<ul>
<li>You should be able to extend system without modifying it</li>
<li>A class should have one, and only one, reason to change</li>
<li>Depend on abstractions, not on concretions.</li>
<li>Make fine grained interfaces that are client specific.</li>
</ul>
<div>Famous design patterns are built around these principles. Follow sound design principles to build flexible, easy to expand system.</div>
<p><em>Resources:</em></p>
<ul>
<li><a id="x_:o" title="Principles of OOD" href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">Principles of OOD</a>, Rob Martin</li>
<li><a href="http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-approach/">The Elements of Pragmatic Programming Style. Approach.</a></li>
<li><a href="http://softwarecreation.org/2009/the-elements-of-pragmatic-programming-style-composition/">The Elements of Pragmatic Programming Style. Composition.</a></li>
</ul>
<div><strong>27. Shared Code, Ideas and Standards</strong></div>
<p><em>Strategies:</em> Design <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Expertise <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Communication <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<div>The team should collectively own code and pursue consistency and use of best practices. Otherwise the system will become clash of isolated impassible code islands &#8211; scary for people who didn&#8217;t build them. Share code and learn from each other to build outstanding system with high quality and integrity of every component.</div>
<p><em>Tips:</em> Pair Programming is one the best ways to share code, ideas and best practices<br />
<em>Resources:</em></p>
<ul>
<li><a href="http://c2.com/cgi/wiki?CollectiveCodeOwnership">Collective Code Ownership</a></li>
<li><a title="Pair Programming" href="http://c2.com/cgi/wiki?PairProgramming">Pair Programming</a></li>
</ul>
<p><a id="esyk" title="Principles of OOD" href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod"></a></p>
<div><strong>28. Use Better technology and tools</strong></div>
<p><em>Strategies:</em> Individuals <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Design <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></div>
<div>Technologies and outside world expectations are changing. Shift to better technology and tools allows effective solution of new challenges and meeting new needs without pushing people and old technologies to grinding.</div>
<p><em>Tips: </em>Obsession with new technologies and race to use them is dangerous for project. Keep sanity until new technology is proven to be beneficial :)</p>
<div><em>Resources:</em></div>
<ul>
<li><a href="http://www.sdtimes.com/">http://www.sdtimes.com</a></li>
<li><a href="http://www.computerworld.com/">http://www.computerworld.com</a></li>
</ul>
<h3><strong>Guide for increasing team productivity</strong></h3>
<p style="margin: 0px;">
<div>Consider strategies for implementation if you cannot give positive answer on the following questions</div>
<table id="qt.5" style="font-size: 1em; line-height: inherit; border-collapse: collapse;" border="1" cellspacing="0" cellpadding="3" width="100%" bordercolor="#000000">
<tbody>
<tr style="text-align: left;">
<td style="text-align: center;" width="25%"><strong>Questions</strong></td>
<td width="25%" align="center"><strong>Strategy</strong></td>
<td style="text-align: center;" width="25%"><strong>Tools</strong></td>
<td style="text-align: center;" width="25%"><strong>Side-effects</strong></td>
</tr>
<tr style="text-align: left;">
<td width="25%">Is team clear about what should be done and have necessary information? Do people exchange ideas and help each other?</td>
<td width="25%" align="center"><strong>Enhance Communication</strong></td>
<td width="25%">
<ul>
<li>Leaders</li>
<li>Alignment</li>
<li>Integrated Decisions</li>
<li>Customer Ideas</li>
<li>Self-Organization</li>
<li>Generalize and Simplify</li>
<li>Domain Specific Design</li>
<li>Shared Code and Standards</li>
</ul>
</td>
<td width="25%">
<ul>
<li>Hiring</li>
<li>Outsource</li>
</ul>
</td>
</tr>
<tr style="text-align: left;">
<td width="25%">Does team know how they build value for customer and what is important for the project success? Do you have wasteful activities and overhead?</td>
<td width="25%" align="center"><strong>Improve Value Stream</strong></td>
<td width="25%">
<ul>
<li>Feedback</li>
<li>Continuous Improvement</li>
<li>Focus on Core</li>
<li>Customer Ideas</li>
<li>Process Flow</li>
<li>Self-Organization</li>
<li>More Integration</li>
</ul>
</td>
<td width="25%"></td>
</tr>
<tr style="text-align: left;">
<td width="25%">Is team capable and experienced to implement the project?</td>
<td width="25%" align="center"><strong>Expand Expertise</strong></td>
<td width="25%">
<ul>
<li>Hiring</li>
<li>Professional Growth</li>
<li>Specialize</li>
<li>Outsource</li>
<li>Engage communities</li>
<li>Shared Code and Standards</li>
</ul>
</td>
<td width="25%"></td>
</tr>
<tr style="text-align: left;">
<td width="25%">Do team members effectively make decisions, assign and execute tasks and know their responsibilities?</td>
<td width="25%" align="center"><strong>Organize Better</strong></td>
<td width="25%">
<ul>
<li>Leaders</li>
<li>Alignment</li>
<li>Specialize</li>
<li>Process Flow</li>
<li>Discipline</li>
</ul>
</td>
<td width="25%">
<ul>
<li>Hiring</li>
<li>Outsource</li>
<li>Engage communities</li>
</ul>
</td>
</tr>
<tr style="text-align: left;">
<td width="25%">Does team learn from practical results and mistakes? Do they consistently improve and correct how things are done?</td>
<td width="25%" align="center"><strong>Adapt to Reality</strong></td>
<td width="25%">
<ul>
<li>Feedback</li>
<li>Continuous Improvement</li>
<li>Evolution</li>
<li>Integrated Decisions</li>
<li>Self-Organization</li>
<li>Professional Growth</li>
</ul>
</td>
<td width="25%">
<ul>
<li>Reuse</li>
<li>More Integration</li>
</ul>
</td>
</tr>
<tr style="text-align: left;">
<td width="25%">Are people motivated, productive and focused on outcomes?</td>
<td width="25%" align="center"><strong>Empower Individuals</strong></td>
<td width="25%">
<ul>
<li>Motivate</li>
<li>Professional Growth</li>
<li>Individual Flow</li>
<li>Focus on Core</li>
<li>Self-Organization</li>
</ul>
</td>
<td width="25%">
<ul>
<li>Overtime</li>
<li>Discipline</li>
</ul>
</td>
</tr>
<tr style="text-align: left;">
<td width="25%">Is system design sound and code easy to understand and maintain?</td>
<td width="25%" align="center"><strong>Design: Taming Complexity</strong></td>
<td width="25%">
<ul>
<li>Evolution</li>
<li>Reuse</li>
<li>Generalize and Simplify</li>
<li>Design Principles</li>
<li>Domain Specific Design</li>
<li>More Integration</li>
<li>Open API</li>
<li>Shared Code and Standards</li>
</ul>
</td>
<td width="25%"></td>
</tr>
<tr style="text-align: left;">
<td width="25%">Does system have high quality? Does team solves problem quickly and eliminate root causes?</td>
<td width="25%" align="center"><strong>Preserve Quality</strong></td>
<td width="25%">
<ul>
<li>Quality Assurance</li>
<li>Feedback</li>
<li>Continuous Improvement</li>
<li>Professional Growth</li>
<li>Integrated Decisions</li>
<li>Focus on Core</li>
<li>Motivate</li>
<li>Discipline</li>
<li>Reuse</li>
<li>Generalize and Simplify</li>
<li>Shared Code and Standards</li>
</ul>
</td>
<td width="25%">
<ul>
<li>Overtime</li>
</ul>
</td>
</tr>
<tr style="text-align: left;">
<td width="25%">Do you outsource non-core activities or involve external communities for improving or extending system?</td>
<td width="25%" align="center"><strong>Scale Externally</strong></td>
<td width="25%">
<ul>
<li>Outsource</li>
<li>Engage communities</li>
<li>Open API</li>
</ul>
</td>
<td width="25%"></td>
</tr>
<tr style="text-align: left;">
<td width="25%">Did you try other strategies and still require more people?</td>
<td width="25%" align="center"><strong>Increase Capacity </strong></td>
<td width="25%">
<ul>
<li>Hiring</li>
<li>Overtime</li>
<li>Outsource</li>
<li>Engage communities</li>
</ul>
</td>
<td width="25%">
<ul>
<li>Quality Assurance</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><img class="alignnone" title="Thanks" src="http://softwarecreation.org/images/2010/cook.jpg" alt="" width="500" height="357" /></p>
<h3><span style="font-size: small;"><strong>Questions</strong></span></h3>
<div>Did I miss any tools? What tools do you know and successfully use?</div>
<img src="http://softwarecreation.org/?ak_action=api_record_view&id=182&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2010/the-toolkit-for-increasing-productivity-of-software-teams/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<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[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[<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>
<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[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 behavior. But this [...]]]></description>
			<content:encoded><![CDATA[<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>
<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>17</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[Surprisingly, 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[<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>
<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[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 [...]]]></description>
			<content:encoded><![CDATA[<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>
<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[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 concern for people makes [...]]]></description>
			<content:encoded><![CDATA[<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>
<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[&#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 others and heighten their own self-importance [...]]]></description>
			<content:encoded><![CDATA[<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>
<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>15</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[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[<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>
<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>

