<?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; Teams</title>
	<atom:link href="http://softwarecreation.org/category/teams/feed/" rel="self" type="application/rss+xml" />
	<link>http://softwarecreation.org</link>
	<description>What are the forces behind software development?</description>
	<lastBuildDate>Wed, 07 Jul 2010 04:34:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>How to rescue failing software projects: The Toyota Way</title>
		<link>http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/</link>
		<comments>http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 05:02:59 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Teams]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/</guid>
		<description><![CDATA[ShareThe manager slams a door and tells us that we are in a big trouble. Our old customers complain about many bugs and bad performance, new customers complain about delays and lack of dedication. And, top management considers our department financially unsustainable and wants to deeply cut expenses.
The manager tells that we are brilliant programmers, [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/&amp;title=How+to+rescue+failing+software+projects%3A+The+Toyota+Way&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p>The manager slams a door and tells us that we are in a big trouble. Our old customers complain about many bugs and bad performance, new customers complain about delays and lack of dedication. And, top management considers our department financially unsustainable and wants to deeply cut expenses.<br />
The manager tells that we are brilliant programmers, work very hard and create cool software solutions. But there is something wrong and we cannot work this way anymore.</p>
<p>Anxiety started to penetrate our souls. We know what is wrong: our team is short of people, we have too many commitments, our code is becoming a big mess, new technology and our new software version makes something bad with servers. A snowball of different problems makes us stressed, distracted and incapable of productive work.</p>
<p>What could our manager do next?</p>
<ol>
<li><strong>Distrust</strong>. Become a dictator, make own decisions including hiring external consultants to recommend what to do or even replace us. However,
<ul>
<li>we are good programmers and know our business well &#8211; the problem is <strong>not in lack of skill and knowledge</strong></li>
<li>external people will take a lot of time to understand the system and <strong>they will have different motivation</strong> and won&#8217;t care about the long-term success</li>
<li>people will be<strong> demotivated</strong> and the manager cannot make effective decisions <strong>without active team involvement</strong></li>
</ul>
</li>
<li><strong>Faith</strong>. Give to team the full power to fix a problems and make own decisions in hope that smart people, motivation and technical expertise will do magic. However,
<ul>
<li>fresh outlook and thinking out of box are hard when a team <strong>immersed for a long time</strong> into difficult situation</li>
<li>a team possibly doesn&#8217;t have understanding and <strong>control over external forces</strong> &#8211; management, customers, finances</li>
<li><strong>changing of reality is tough</strong> (especially in people heads) and requires more than technical experience</li>
</ul>
</li>
</ol>
<p>There is a third way. Place improvement practices in the core of development process. Make self-improvement inevitable and required for any activity. Do it every day.</p>
<p><img src="http://softwarecreation.org/images/2009/process-improvement.jpg" /></p>
<p><strong>Toyota Way</strong> is the best example of large-scale reliable self-improvement process. It focuses on eliminating waste, solving problems at root cause and making right decisions. Toyota Way reduces problems, increases internal efficiency and makes a company successful. This is the best receipt for coming out of crisis.</p>
<p id="f2g8" style="text-align: left"><img src="http://softwarecreation.org/images/2009/inglorious1.jpg" style="width: 450px; height: 300px" height="300" width="450" /></p>
<p><strong style="color: #000000">Targets:</strong></p>
<ul>
<li><strong><span style="color: #ff0000">Problems</span> </strong>- emergencies, fires that require immediate fix: bugs, server crushes, deadline slips</li>
</ul>
<ul>
<li><strong><span style="color: #ff0000">Waste</span> </strong>- inefficient and non-value adding activities: waiting, misinformation, stress</li>
</ul>
<ul>
<li><strong>Challenges </strong>- adaptation to external forces (market, competitors, customers, society): new trends and technologies, changes in users expectations for user interface and functionality</li>
</ul>
<p><span id="more-87"></span></p>
<h3>Practices to see waste and stop to fix problems</h3>
<p id="fqz3" style="text-align: left"> <img src="http://softwarecreation.org/images/2009/inglorious2.jpg" style="width: 316px; height: 499px" height="499" width="316" /></p>
<h4><strong>1. Seeing waste</strong></h4>
<p id="rjed" style="text-align: left">The team and managers should learn to see targets &#8211; real problems and waste. Otherwise improvements will be wild shots in the dark.</p>
<p>There are many targets in software development:</p>
<ul>
<li>stressed people &#8211; reduced energy, less productivity, more mistakes</li>
<li>waiting &#8211; delays, tools / system problems and downtime, capacity bottlenecks (waiting for results of other people work)</li>
<li>over-engineering &#8211; producing features and complicate design without real need</li>
<li>unfinished work &#8211; functionality not used in a live system, probably still in design or under development or simply discarded (but not removed)</li>
<li>defects &#8211; complete waste of time and money</li>
<li>unused creativity &#8211; loosing time, ideas, skills, improvements and learning by not engaging or listening to your employees</li>
<li>inadequate information &#8211; unclear, misleading or simply wrong information that causes useless activity and leads to rework at the end</li>
</ul>
<ul>
<li>over-processing &#8211; taking unneeded steps to build software because of poor process and system design, overhead, bureaucracy, compliance, cumbersome tools</li>
<li>motion &#8211; how much effort to get necessary information, access systems or use tools</li>
<li>multi-tasking &#8211; losing time to switch between projects, tasks or different activities</li>
</ul>
<h4><strong>2. Jidoka </strong>- stop to fix the problem to get quality right the first time</h4>
<p>It is not enough to see your targets. The Team should carry commandment to shoot targets immediately. Otherwise the best intentions will be buried under growing avalanche of problems.</p>
<p>How to stop:</p>
<ul>
<li>quality for the customer drives all the processes &#8211; prevents temporary patches and bad for quality decisions</li>
<li>low tolerance for quality problems and immediate detection are core work principle</li>
<li>use <a href="http://en.wikipedia.org/wiki/Andon_%28manufacturing%29" title="Andon" id="uk-6">Andon</a> &#8211; a system to signal for help, notify about a problem and stop the process</li>
</ul>
<ul>
<li>build in tools and process capabilities of detecting problems and stopping itself</li>
<li>use all modern QA methods available</li>
<li>managers encourage stops to fix problems and support implementation of counter measures</li>
</ul>
<h3>Making Decisions</h3>
<p><em>&#8220;Make decisions slowly by consensus and thoroughly considering all options, implement rapidly.</em><em>&#8220;</em> &#8211; Toyota Way</p>
<p>Even knowing problems and committed to solve them, the Team should make right decisions how to do it.</p>
<p><strong>Make decisions slowly</strong></p>
<ol>
<li>Go and See (Genchi Genbutsu)</li>
<li>Understand underlying causes (Kaizen)</li>
<li>Broadly consider alternative solutions and develop a detailed rationale for preferred solution delaying certain decision as long as possible (<a href="http://6sigma.mty.itesm.mx/Toyotas.pdf" title="Set-based concurrent engineering" id="t_q_">Set-Based concurrent engineering</a>)</li>
<li>Build consensus within a team and partners where group decision is preferred (while management can step in if consensus is not achieved)</li>
<li>Use very efficient communication devices &#8211; preferably one side of one sheet of paper</li>
</ol>
<p><strong>Implement rapidly</strong></p>
<ol>
<li>Put in place solutions and counter measures.</li>
<li>Evaluate the results</li>
<li>Standardize if solution is effective.</li>
</ol>
<h3>Practices to Eliminate Waste and Solve Problems</h3>
<p id="eigf" style="text-align: left"><img src="http://softwarecreation.org/images/2009/inglorious3.jpg" style="width: 450px; height: 300px" height="300" width="450" /></p>
<h4><strong>3. Genchi Genbutsu</strong> &#8211; go and see for yourself to thoroughly understand situation</h4>
<p>How often do we jump to conclusion based on partial information, vague assumptions and what other people say? Information creates reality in your mind. This reality is a base for your decisions. So, you and the Team should get right information to make right decisions:</p>
<ul>
<li>observe situation with blank mind</li>
<li>avoid assumptions and preconceptions</li>
<li>use personally verified information</li>
</ul>
<p>In short, base decisions on what really is going on</p>
<h4><strong>4. Kaizen (5 why&#8217;s)</strong> -continuous learning and improvement</h4>
<p><em>&#8220;We view errors as opportunities for learning&#8221;</em> &#8211; Toyota Way<br />
The Team should find the root causes of the problems. Kaizen helps to find the root cause by repeatedly asking why the problem occurs.</p>
<p>Example of Kaizen<br />
Problem: there are persistent javascript errors on a live site</p>
<ol>
<li>Why? A developer didn&#8217;t build correct logic for complex web UI components interaction</li>
<li>Why? A developer built own solution without guidance and enough experience in this area</li>
<li>Why? A team expert didn&#8217;t tell about existing proven solutions, didn&#8217;t help and didn&#8217;t share knowledge</li>
<li>Why? The team is under stress, over-committed and don&#8217;t have time to communicate</li>
<li>Why? Managers accept too much work without consulting with development team</li>
<li>Why? you can continue&#8230;</li>
</ol>
<p>Kaizen forces us to overcome desire to find a first convenient explanation and patch problems without fixing root causes. By ruthlessly applying this practice, we get deeper insight into reality and better learn our product, processes, people, environment and tools. Kaizen is a core practice to see waste, solve problems and improve process.</p>
<p>To avoid forgetting learning from Kaizen, it is important to standardize the improved process and make it a base for further improvements.</p>
<h3><strong>Practices to Support Flow</strong></h3>
<p id="l36f" style="text-align: left"><img src="http://softwarecreation.org/images/2009/inglorious4.jpg" style="width: 480px; height: 318px" height="318" width="480" /></p>
<h4><strong>5. Standards</strong> &#8211; best you know today which is to be improved tomorrow</h4>
<p>Standardized work is easier, cheaper and faster &#8211; stable repeatable methods can maintain predictability, high productivity and support quality.<br />
Effective standards are not coming from theories, they come from</p>
<ul>
<li>best practices</li>
<li>accumulated learnings and individual experience</li>
<li>lessons from applying existing standards</li>
</ul>
<p>The Team should try to use standards in many areas: project phases and activities; development practices; architecture and design approaches; code conventions; tools; programming techniques; libraries and third-party code; reuse of components and solutions; testing and so on.<br />
Standardization in software development is a controversial topic &#8211; some <a href="http://en.wikipedia.org/wiki/A_Guide_to_the_Project_Management_Body_of_Knowledge" title="theorists" id="kyqe">theorists</a> want to bring programming closer to standard-dominated engineering, practitioners are keen to reduce standardization to minimum promoting creativity and self-organization. In the rigid interpretation, standards are &#8220;must to follow&#8221; rules for any situation, in other interpretation standards are well defined steps and guidelines highly recommended for specific context. I support the latter definition. A productive team should have standards in place to focus on customer needs instead of fighting with the same puzzles and problems over and over again.</p>
<p>The system of standards shouldn&#8217;t be a heavy bureaucratic conduit, but a light and fluid book of knowledge. The book that contains most helpful and important rules and checklists. Standards will be effective if they are minimal, reviewed often (Kaizen) and followed by every team member.</p>
<h4><strong>6. Reliable thoroughly tested technology </strong></h4>
<p>The Team should be conservative with new technologies. Software development and IT thrive on change and innovation. However, Toyota Way suggests to be conservative in adapting technology and considers stability and reliability of operations as much more important goal than keeping on the cutting edge of technology.</p>
<p>Considerations for using technology</p>
<ul>
<li>primary goal is to improve flow and support people, process and values.</li>
<li>process is driven by business, not technology concerns; software and tools do not eliminate themselves waste</li>
<li>technology is visual and intuitive &#8211; people can use it correctly and effectively</li>
</ul>
<ul>
<li>process manually before adapting technology to support the process &#8211; understand what problems it solves and how technology could help</li>
<li>important: people / processes are easy to Kaizen, machines are difficult</li>
</ul>
<p>Adopting new technology:</p>
<ul>
<li>new technology is unreliable and difficult to standardize, therefore it endangers flow</li>
<li>proven process takes precedence over new and untested technology</li>
<li>conduct actual tests before adapting new technology</li>
<li>reject technology if it conflicts with culture or might disrupt stability, reliability and predictability</li>
</ul>
<p>In the same time <strong>encourage people to consider new technologies</strong> while looking into new approaches. If technology improves process and flow &#8211; quickly implement after thorough testing.</p>
<h4>7. <strong>Visual Controls</strong></h4>
<p id="df5i" style="text-align: left"><img src="http://softwarecreation.org/images/2009/inglorious5.jpg" style="width: 450px; height: 302px" height="302" width="450" /></p>
<p>The Team should have clear status of information. Visual controls can convey complex information in fast and efficient for our brains way. We can use controls as a user story board; status of projects, servers or code build; burn down charts and others.<br />
Simple visual indicators help people determine immediately whether they are deviating from the standards, provide quick gist of situation and direction for solving problems.</p>
<ul>
<li>use simple and most important indicators</li>
</ul>
<ul>
<li>than provide clear picture for decisions and what to do next</li>
<li>reduce reports to one screen / piece of paper even for the most important decisions</li>
</ul>
<h3>People, leaders and teams</h3>
<p id="w7ez" style="text-align: left"><img src="http://softwarecreation.org/images/2009/inglorious6.jpg" style="width: 500px; height: 497px" height="497" width="500" /></p>
<h4><strong>8. People</strong></h4>
<p>People who build software are the people who should improve the process. They are directly involved and have first-hand experience of problems and waste.</p>
<p>Toyota Way expects that each team member is a problem solver and values job experience more than theoretical knowledge. The Team will beat any external consultants and find better way to work if people are open about problems and eager to find good solutions.</p>
<h4><strong>9. Leaders</strong></h4>
<p>The Team desperately needs strong leaders to build great products to overcome problems. Toyota grows leaders within who thoroughly understand the work, live the philosophy and must understand the daily work in great details</p>
<p><strong>Chief Engineer</strong> is a key person in Toyota projects.:</p>
<ul>
<li>blessed by top management</li>
<li>has control over project</li>
<li>exceptional engineer</li>
<li>critical link: between engineers and customer satisfaction</li>
<li>coach for other engineers</li>
<li>focus on concepts first, technicalities later</li>
</ul>
<p>Chief Engineer concept is an excellent example for software technical leadership. A software team leader often lacks authority or makes too technical decisions without good understanding of customer needs.</p>
<h4><strong>10. Teams</strong></h4>
<p>The Team should be diverse and capable of solving wide range of problems. Toyota builds cross functional product teams, which</p>
<ul>
<li>use integrative decision making</li>
<li>fast and accurate in implementation</li>
<li>enhance process and flow by solving difficult technological problems</li>
</ul>
<p>Software developers and their leaders are foundation of success in any project. Management, process and technology can only support them. And anyway, the process is as good as people follow it. Therefore, it is important to make software teams a key player in process improvements &#8211; they know problems, they understand work and they are capable to find good solutions.</p>
<h3>Using Toyota Way</h3>
<p id="n667" style="text-align: left"><img src="http://softwarecreation.org/images/2009/inglorious7.jpg" style="width: 450px; height: 450px" height="450" width="450" /></p>
<p>Can The Team revert a situation and win? Can it build the optimal process and expertise for fast development of high quality and low cost solutions?</p>
<p>This post shows the most effective option &#8211; build continuously improving process into the heart of development. The process that focuses on quality, eliminates waste and fixes problems at root cause. I believe this approach is a foundation of long term success. Your managers and company would love it!</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=87&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/feed/</wfw:commentRss>
		<slash:comments>5</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[Share
A software project is a creative, unique and therefore unpredictable endeavor. We are not building the same thing over and over again, but solve new problems, address increasing demands and use perpetually changing technologies. Under these conditions, people &#8211; smart, creative and productive &#8211; are the most important factor of success . Software development process [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/&amp;title=Reliable+Software+Development+Process%3A+The+Toyota+Way&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><img src="http://softwarecreation.org/images/2009/toyota-factory.jpg" /></p>
<p>A software project is a creative, unique and therefore unpredictable endeavor. We are not building the same thing over and over again, but solve new problems, address increasing demands and use perpetually changing technologies. Under these conditions, people &#8211; smart, creative and productive &#8211; are the most important factor of success . Software development process can only support and compliment these people, but it cannot guarantee success alone and make the factor of people negligible.</p>
<p><strong>But</strong>, business wants predictable, reliable and successful results. I bet they don&#8217;t want to be at mercy how cards are shuffled in their talented development team. The answer is in establishing a process that increases chances of success and aligned with present nature of software development (unpredictable, empirical and heavily dependent on people).</p>
<p>The Toyota Way can be a great example that worth to learn. Toyota evolved from a small looming equipment shop to the largest car manufacturing company. The main foundation of successful growth is the system of few core principles that enables <strong>best quality, high productivity, lowest cost, shortest time and long-term success</strong>.<br />
<span id="more-86"></span><br />
Agile and Lean Software Development adopted some practices from Toyota. <em><a href="http://www.amazon.com/gp/product/0321150783?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0321150783" title="Lean Software Development: An Agile Toolkit" id="ix_v">Lean Software Development: An Agile Toolkit</a></em>  (by Mary Poppendieck, Tom Poppendieck) is an excellent book that review Lean practices and principles in details. This post focuses more on philosophy and the system of practices as a whole that can turn software development team into<strong> a smart reliable machine.</strong></p>
<h3>1. Value</h3>
<p><strong>Why customer will pay money for your product? How does your company creates value?</strong></p>
<blockquote><p>All we are doing is looking at the time line from the moment the customer give us an order to the point when we collect the cash. And we are reducing that time line by removing the non-value-added wastes.</p>
<p style="text-align: right">- Taiichi Ohno, founder of TPS</p>
</blockquote>
<p>The only thing that adds value in software development is transformation of information and code into what customer wants. It is very important for software team to know how does it create value for customers. Or simply, decrypt the formula:<br />
<em>Customer </em>(needs) -&gt; <em>Cash </em>(delivered software)</p>
<p><strong>Software Development Value Stream</strong><br />
Problems, needs and ideas are translated into <strong>units of development</strong> &#8211; functionality, user experience (interface, interactions, usability) and system qualities (performance, reliability, security, etc). A software development team transforms these pieces of requirements into a computer system using value-added and many not-so-value-added actions.</p>
<p><img src="http://softwarecreation.org/images/2009/value-stream.jpg" /></p>
<p><strong>The ultimate goal</strong> of Toyota Way is to eliminate non-value-added activities while keeping the best quality of the product.</p>
<h3>2. Flow</h3>
<p><strong>What is the process of creating value in your company?</strong></p>
<p>Properties of the optimal flow for software development:</p>
<ul>
<li>cut back to zero the amount of time that any unit of work is sitting idle or waiting for somebody to work on it</li>
<li>move design, code and information fast, link processes and people together that problems surface right away</li>
</ul>
<p><strong>One-piece flow</strong><br />
The most effective flow is one-piece flow &#8211; a customer need is immediately converted into a delivered software solution. In the same time this is the most demanding flow: a customer, designers, developers, testers and system administrators should be dedicated to the project, immediately available and work as one team together until the need is implemented in a live system.</p>
<p>One-piece flow has significant benefits (if it is implemented right):</p>
<ul>
<li><strong>Quality </strong>- defects detected quickly; close proximity and connections ensure that necessary information is available immediately and important details are not missing; problems are solved quickly</li>
<li><strong>Flexibility </strong>- flexibility to respond and do what customer really wants in real time</li>
<li><strong>Productivity </strong>- the team engaged in high value added continuous work</li>
<li><strong>Morale </strong>- immediate results of work bring sense of accomplishment and job satisfaction</li>
<li><strong>Cost </strong>- lean production with minimal waste</li>
</ul>
<p>However, in reality one-piece flow is difficult to achieve in many projects:</p>
<ul>
<li>a customer is not engaged all the time</li>
<li>complex business domain requires analysis and preparation before development can start</li>
<li>project activities involve people with different skills that are not available immediately</li>
<li>deployment of mission-critical systems demands intensive testing and scheduling</li>
</ul>
<ul>
<li>management, marketing, end-user expect specific time-lines, features and support</li>
</ul>
<ul>
<li>and so on</li>
</ul>
<p>Toyota uses two additional principles to overcome challenges of one-piece flow: <strong>pull systems and leveling out the workload</strong>.<br />
However, Toyota Way says: <em>&#8220;Flow where you can, pull where you must</em>&#8220;. The big challenging goal is to turn eventually all the processes into one-piece flow.</p>
<p><strong>Pull system (Kanban)</strong><br />
<a href="http://en.wikipedia.org/wiki/Kanban" title="Kanban" id="z:4a">Kanban</a> is a signaling system to trigger action. It adds to flow small buffers pulled by customer demand. Kanban allows optimal use of people and natural breaks in processes.</p>
<p>Agile iterations and Scrum sprints are close to Kanban ideas. A team pulls new user stories every time-boxed iteration from the backlog to design, implement, test and deploy within the same iteration.</p>
<p>However, it is not classical Kanban. An original idea would be to pull small batches of user stories for development after a team has finished a current batch (not at the end of fixed time iteration). In parallel, QA pulls implemented user stories for testing and so on. A customer can continue preparing next batches of work based on their priority of needs.</p>
<p>Main ideas</p>
<ul>
<li>provide dependent down stream teams with what they want, when they want and in amount they want</li>
<li>just-in-time &#8211; started by high priority needs</li>
<li>minimize work-in-progress and untested code</li>
<li>frequently push what a customer can use right away</li>
<li>be responsive to day-by-day shifts in demand instead of relaying on long-term schedules</li>
</ul>
<p>Kanban is effective way to synchronize people and teams work without bringing them into continuous flow, where they should be always ready for the next unit of work.</p>
<p><strong>Level Out the Workload (Heijunka)</strong><br />
The main idea of Heijunka is to <a href="http://en.wikipedia.org/wiki/Production_leveling" title="level production" id="ixiy">level production</a> by volume and activities mix.</p>
<ul>
<li>it is not built around actual flow of customer orders</li>
<li>workload is leveled for the period considering previous history and scheduled projects</li>
</ul>
<p>In software development workload could be leveled and scheduled when people could make reliable guess for what is expected. It is different from Kanban that works as just-in-time system adapting to the current workload.</p>
<p>Good candidates for Heijunka are</p>
<ul>
<li>standard procedures (automated testing, performance testing, deployment)</li>
<li>recurring events (meetings, planning, demo, code reviews)</li>
</ul>
<ul>
<li>scheduled tasks for people with limited availability (external consultants, customers, management)</li>
</ul>
<ul>
<li>tasks with high confidence in estimation, usually done many times before (initial requirement exploration, design mockups, security audit, training new team members, reusing components and solutions)</li>
</ul>
<p>Benefits:</p>
<ul>
<li>predictability and active planning</li>
</ul>
<ul>
<li>balanced use of people, ability to schedule their involvement</li>
</ul>
<ul>
<li>smoother demand on customers, shared resources and contractors</li>
</ul>
<p>Toyota Way is focused on eliminating waste of non-value added work (Muda). Heijunka eliminates two additional types of waste:</p>
<ul>
<li>unevenness in project schedule (Mura)</li>
<li>overburden of people and systems (Muri)</li>
</ul>
<p><img src="http://softwarecreation.org/images/2009/development-flow.jpg" /></p>
<h3>Building your own flow</h3>
<p>These three approaches can help you to build most optimal flow. Consider cons and pros:</p>
<p><strong>One-piece flow (push)</strong><br />
pros: minimal waste, fast implementation, low cost, quick problems resolution<br />
cons: uneven workload, requires full availability and high level of engagement<br />
when to use: for one collocated team work that is dedicated to one project</p>
<p><strong>Kanban (pull)</strong><br />
pros: dynamic adaptation to load; synchronization of different teams and disconnected processes<br />
cons: low predictability for completion; buffers hide waste<br />
when to use: disconnected or involved in the multiple projects teams; activities that need people with limited availability</p>
<p><strong>Heijunka (level)</strong><br />
pros: good predictability, ability to plan, balanced use of people: avoid overburden and uneven workload<br />
cons: non-adaptive, inefficient for tasks with unpredictable effort (a lot in traditional software development)<br />
when to use: activities that are standardized, highly predictable or have to be scheduled</p>
<p><img src="http://softwarecreation.org/images/2009/flow-scenario.jpg" /></p>
<p>You cannot build reliable and optimal flow from the scratch based on a theory only. The best process for your projects will emerge as result of evolution, problem solving and eliminating waste. This is a topic of the next post.</p>
<blockquote><p>If some problem occurs in one-piece flow manufacturing then the whole production line stops. In this sense it is a very bad system of manufacturing. But when production stops everyone is forced to solve the problem immediately. So team members have to think, and through thinking team members grow and become better team members and people.</p>
<p style="text-align: right">- Teruyuki Minoura</p>
</blockquote>
<p><strong><br />
References:</strong><br />
<a href="http://www.amazon.com/gp/product/0071392319?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0071392319" title="The Toyota Way" id="lzhs">The Toyota Way</a> by Jeffrey Liker<br />
<a href="http://www.amazon.com/gp/product/0321150783?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0321150783" title="Lean Software Development: An Agile Toolkit" id="ytmp">Lean Software Development: An Agile Toolkit</a><em> </em> by Mary Poppendieck, Tom Poppendieck</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=86&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pair Programming: To Do or Not To Do</title>
		<link>http://softwarecreation.org/2008/pair-programming-to-do-or-not-to-do/</link>
		<comments>http://softwarecreation.org/2008/pair-programming-to-do-or-not-to-do/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 05:31:52 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Practices]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Skills]]></category>
		<category><![CDATA[Teams]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2008/pair-programming-to-do-or-not-to-do/</guid>
		<description><![CDATA[Share
Pair Programming is a great way to build software systems. When Pair Programming works, it has significant benefits:

better ideas &#8211; continuous brainstorming, larger knowledge pool, less gaps in understanding and more brain power to solve design problems;
better quality &#8211; fewer bugs, instant validation of ideas, consistent approach and stricter adherence to team conventions;
better knowledge &#8211; [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2008/pair-programming-to-do-or-not-to-do/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2008/pair-programming-to-do-or-not-to-do/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2008/pair-programming-to-do-or-not-to-do/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2008/pair-programming-to-do-or-not-to-do/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2008/pair-programming-to-do-or-not-to-do/&amp;title=Pair+Programming%3A+To+Do+or+Not+To+Do&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><img src="http://softwarecreation.org/images/2008/Cirque_du_Soleil.jpg" /></p>
<p>Pair Programming is a great way to build software systems. When Pair Programming works, it has significant benefits:</p>
<ul>
<li><strong>better ideas</strong> &#8211; continuous brainstorming, larger knowledge pool, less gaps in understanding and more brain power to solve design problems;</li>
<li><strong>better quality</strong> &#8211; fewer bugs, instant validation of ideas, consistent approach and stricter adherence to team conventions;</li>
<li><strong>better knowledge</strong> &#8211; experience and knowledge sharing, deeper understanding of <em>why</em>, <em>how </em>and<em> what </em>was done;</li>
<li><strong>increased productivity</strong> &#8211; better focus and higher intensity, pushing each other and motivating to achieve best results, less procrastination and wasting of time;</li>
<li><strong>more enjoyment</strong> &#8211; most people like to work in groups and solve together interesting problems.</li>
</ul>
<p>Extreme Programming leaders <a href="http://www.xprogramming.com/Practices/PracPairs.html" title="insist" id="kj93">insist</a> that all significant development should be done in pairs. But can we say that Pair Programming is the best method in all situations?</p>
<p><span id="more-78"></span></p>
<p>Programmers can find plausible alternatives to Pair Programming that don&#8217;t require two people sitting together all the time:</p>
<ul>
<li><strong>ideas </strong>- frequent team brainstorming combined with short pair (or team) programming sessions for the most complex tasks;</li>
<li><strong>quality </strong>- dedicated tester closely works with developers, writing together automated tests;</li>
<li><strong>knowledge </strong>- frequent discussions, code reviews, training sessions;</li>
<li><strong>productivity </strong>- clear <a href="http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-intention/" title="intent" id="c6-i">intent</a> and pragmatic <a href="http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-approach/" title="approach" id="s5h-">approach</a> that bring focus, clarity and efficiency;</li>
<li><strong>enjoyment </strong>- close cooperation and mutual support</li>
</ul>
<p>When Pair Programming is the most effective method?</p>
<p id="vzb0" style="padding: 1em 0pt; text-align: left"><img src="http://softwarecreation.org/images/2008/when-pair-program.jpg" /><br />
The most important factor is match of skills and challenges. In Solo Programming the most productive mode is <a href="http://softwarecreation.org/2007/how-to-be-happy-at-work-short-tutorial/" title="Flow" id="xsil">Flow</a> when skills and challenges are matched. Pair Programming adds one more effective mode &#8211; Coaching that increases overall team productivity for the present and future tasks.</p>
<p id="vzb0" style="padding: 1em 0pt; text-align: left">
<strong>Successful modes</strong><br />
1. <strong>Flow</strong> &#8211; two programmers work on the interesting and challenging problem. They can have different skills and challenges, but both are capable to find good solution. For example, one can be javascript expert, another super backend programmer. They can get in flow working together on complex AJAX task combining their brainpower, knowledge and experience to create the best solution.<br />
2. <strong>Coaching</strong> &#8211; expert programmer have experience and knowledge for solving the problem and shares it with other programmer, who cannot effectively solve problem alone. This more junior programmer has fundamentals to understand the solution and implementation. He learns and grows to become better programmer.</p>
<p><strong>Failure modes</strong><br />
3. <strong>Wasting expert time</strong> &#8211; the problem is too simple that makes involvement of expert ineffective even for coaching<br />
4. <strong>Overwhelmed novice</strong> &#8211; the problem is too complex or requires too much new knowledge that prevents the programmer from learning anything useful</p>
<p><strong>Questionable modes</strong><br />
5. <strong>Two experts for a manageable task</strong> &#8211; pair programming doesn&#8217;t have much benefits if both programmers know how to implement the task and successfully solved similar problems before.<br />
6. <strong>One programmer is in Flow, other is Learning</strong> &#8211; it is difficult to stay in Flow if other programmer frequently interrupts and needs many explanation for basic things that are not directly related to challenging problem.<br />
7. <strong>One programmer is in Flow, other is Coaching</strong> &#8211; to make this mode successful for the growth, the coach should be open minded, avoid directing too much and should give opportunity for another programmer to come up with own (maybe even better) solutions.</p>
<p>In addition, psychological problems could prevent successful pair programming:</p>
<ul>
<li><strong>Intimidation by expert</strong> &#8211; one programmer is intimidated by superior skills of other programmer and afraid to be considered as incapable</li>
<li><strong>Need time to think</strong> &#8211; a programmer needs more time to think over before pair programming, but he is forced to start pair programming session before thinking over his ideas</li>
<li><strong>Prefer to work alone</strong> &#8211; an introvert programmer likes to work alone (<a href="http://weblogs.java.net/blog/kathysierra/archive/2004/03/pair_programmin.html" title="loner" id="by7b">loner</a>).</li>
<li><strong>Personal antipathy</strong> &#8211; programmers don&#8217;t like each other</li>
</ul>
<p><strong>Can we make Pair Programming always effective?</strong><br />
Yes! Match tasks, skills and pairs. Try to find pairs for 2 productive modes  &#8211; Flow and Coaching. A team will be most productive if the programmers pair solves together interesting problems matching their skills and learn from each other.</p>
<p>However, Pair Programming should be <a href="http://weblogs.java.net/blog/kathysierra/archive/2004/03/pair_programmin.html" title="a free choice" id="dvmx">a free choice</a> and preferred method, but it should not be a forced mandatory practice. As you can see from this post, there are some modes and psychological situations when Pair Programming is not working well.</p>
<p>In short, Pair Programming is one of the most useful tools in arsenal of the software team. Know when and how to use it.</p>
<p><strong>Inspiring resource</strong>: <a href="http://www.amazon.com/gp/product/0060920432/104-2883280-1296732?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0060920432" title="Flow" id="lvhs">Flow</a>, Mihaly Csikszentmihal</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=78&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2008/pair-programming-to-do-or-not-to-do/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Selecting The Best Strategy for Software Teams: Retreat, Evolution or Revolution</title>
		<link>http://softwarecreation.org/2008/selecting-the-best-strategy-for-software-teams-retreat-evolution-or-revolution/</link>
		<comments>http://softwarecreation.org/2008/selecting-the-best-strategy-for-software-teams-retreat-evolution-or-revolution/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 03:27:21 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Teams]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2008/selecting-the-best-strategy-for-software-teams-retreat-evolution-or-revolution/</guid>
		<description><![CDATA[Share&#8220;If you do not change direction, you may end up where you are heading.&#8221; &#8211; Lao Tzu
Software teams have three main strategies to achieve success: retreat, evolution or revolution.

Retreat &#8211; refusal to act or the art of knowing when to say NO. 
Evolution &#8211; continuous improvement and generation of ideas stemmed from existing set of ideas.
Revolution [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2008/selecting-the-best-strategy-for-software-teams-retreat-evolution-or-revolution/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2008/selecting-the-best-strategy-for-software-teams-retreat-evolution-or-revolution/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2008/selecting-the-best-strategy-for-software-teams-retreat-evolution-or-revolution/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2008/selecting-the-best-strategy-for-software-teams-retreat-evolution-or-revolution/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2008/selecting-the-best-strategy-for-software-teams-retreat-evolution-or-revolution/&amp;title=Selecting+The+Best+Strategy+for+Software+Teams%3A+Retreat%2C+Evolution+or+Revolution&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><img src="http://softwarecreation.org/images/2008/taoism.gif" align="bottom" /><em>&#8220;If you do not change direction, you may end up where you are heading.&#8221;</em> &#8211; Lao Tzu</p>
<p>Software teams have three main strategies to achieve success: retreat, evolution or revolution.</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">Retreat &#8211; refusal to act or the art of knowing when to say NO.<span class="Apple-converted-space"> </span></li>
<li style="margin-top: 0px; margin-bottom: 0px">Evolution &#8211; continuous improvement and generation of ideas stemmed from existing set of ideas.</li>
<li style="margin-top: 0px; margin-bottom: 0px">Revolution &#8211; rapid advance with radical and disruptive ideas, overhaul of existing core ideas.</li>
</ul>
<p>How can software teams choose the best strategy? They should consider three components:</p>
<ol style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">The Players</li>
<li style="margin-top: 0px; margin-bottom: 0px">The Game</li>
<li style="margin-top: 0px; margin-bottom: 0px">The Dynamics</li>
</ol>
<p id="jr26" style="padding: 1em 0pt; text-align: left; margin-top: 0px; margin-bottom: 0px"><img src="http://softwarecreation.org/images/2008/strategy-selection.jpg" /></p>
<p><span id="more-75"></span> <strong>1. The Players</strong><br />
A software team includes programmers, designers, domain experts, system administrators, testers and other active contributors. Each players has 2 main characteristics</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">motivation to achieve success</li>
<li style="margin-top: 0px; margin-bottom: 0px">capabilities (experience, knowledge, skills, ability to learn)</li>
</ul>
<p id="ieqk" style="padding: 1em 0pt; text-align: left; margin-top: 0px; margin-bottom: 0px"><img src="http://softwarecreation.org/images/2008/the-players.jpg" /></p>
<p><strong>2. The Game</strong><br />
Each project could be considered as<span class="Apple-converted-space"> </span><a href="http://softwarecreation.org/2008/ideas-in-software-development-the-game" title="The Game" id="ot1b">The Game</a><span class="Apple-converted-space"> </span>where the main goal is successful delivery of software. The game represents various factors: client&#8217;s needs and goals, technology, project context, constraints and environment. The game has two main variables:</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">novelty &#8211; how much players know and understand about The Game, and their ability to make intelligent moves</li>
<li style="margin-top: 0px; margin-bottom: 0px">complexity &#8211; how complex, predictable and controllable is The Game</li>
</ul>
<p id="obs." style="padding: 1em 0pt; text-align: left; margin-top: 0px; margin-bottom: 0px"><img src="http://softwarecreation.org/images/2008/the-game2.jpg" /></p>
<p><strong>3. Dynamics</strong><br />
Interaction of a software team with external and internal forces. Characteristics:</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">pressure &#8211; customers, users, competitors, market, environment</li>
<li style="margin-top: 0px; margin-bottom: 0px">trend &#8211; positive or negative dynamic of the project and software product</li>
</ul>
<p style="margin-top: 0px; margin-bottom: 0px">&nbsp;</p>
<p id="e-07" style="padding: 1em 0pt; text-align: left; margin-top: 0px; margin-bottom: 0px"><img src="http://softwarecreation.org/images/2008/the-dynamics.jpg" /></p>
<h3 style="font-size: 12pt">Strategies overview</h3>
<p><strong>1. Retreat</strong></p>
<p style="margin-top: 0px; margin-bottom: 0px"><em>&#8220;A good retreat is better than a bad stand&#8221; - </em><span style="font-style: normal">Irish sayings</span></p>
<p style="margin-top: 0px; margin-bottom: 0px">&nbsp;</p>
<p style="margin-top: 0px; margin-bottom: 0px">Pros</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">saving energy, time and money</li>
<li style="margin-top: 0px; margin-bottom: 0px">maintain capacity to join the game later under more favourable conditions or move to another game</li>
</ul>
<p>Cons</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">no chances to succeed</li>
</ul>
<p>How?</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">Don&#8217;t do anything</li>
</ul>
<p>When?<span class="Apple-converted-space"> </span></p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">poor players &#8211; lack of expertise, skills or low morale</li>
<li style="margin-top: 0px; margin-bottom: 0px">too complex, uncertain and overwhelming game</li>
<li style="margin-top: 0px; margin-bottom: 0px">a project is collapsing or hopelessly loosing positions in a highly competitive environment</li>
</ul>
<p><strong>2. Evolution</strong></p>
<p style="margin-top: 0px; margin-bottom: 0px"><em>&#8220;Evolution is not a force but a process. Not a cause but a law.&#8221;</em><span class="Apple-converted-space"> </span>- John Morley</p>
<p style="margin-top: 0px; margin-bottom: 0px">&nbsp;</p>
<p style="margin-top: 0px; margin-bottom: 0px">Pros</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">Reliable mechanism</li>
<li style="margin-top: 0px; margin-bottom: 0px">Continuous improvement, adaptation to changes and complex environment</li>
<li style="margin-top: 0px; margin-bottom: 0px">Emergence of unforeseen advantageous traits</li>
<li style="margin-top: 0px; margin-bottom: 0px">Supports stability and full functioning of the project</li>
<li style="margin-top: 0px; margin-bottom: 0px">Enables productive focus, collaboration and harmony; keeps morale high</li>
</ul>
<p>Cons</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">Slow, requires many improvement cycles</li>
<li style="margin-top: 0px; margin-bottom: 0px">Reliance on existing fundamentals and core ideas</li>
<li style="margin-top: 0px; margin-bottom: 0px">Low chances of emergence of disruptive ideas and breakthroughs</li>
</ul>
<p>How?<br />
Select working existing ideas and improve them, dump harmful ideas</p>
<p>When?<span class="Apple-converted-space"> </span></p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">interested and learning players</li>
<li style="margin-top: 0px; margin-bottom: 0px">complex, unpredictable, but promising game</li>
<li style="margin-top: 0px; margin-bottom: 0px">moderate pressure, positive dynamic, absence of serious fundamental problems</li>
</ul>
<p><strong>3. Revolution</strong></p>
<p style="margin-top: 0px; margin-bottom: 0px">&nbsp;</p>
<p style="margin-top: 0px; margin-bottom: 0px"> <em>&#8220;It is impossible to predict the time and progress of revolution. It is governed by its own more or less mysterious laws.&#8221;<span class="Apple-converted-space"> </span></em><span style="font-style: normal">- Vladimir Lenin </span></p>
<p style="margin-top: 0px; margin-bottom: 0px">&nbsp;</p>
<p style="margin-top: 0px; margin-bottom: 0px">Pros<span class="Apple-converted-space"> </span></p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">Fast leap forward, rapid advance</li>
<li style="margin-top: 0px; margin-bottom: 0px">Quick removal of barriers, fundamental problems and weaknesses</li>
<li style="margin-top: 0px; margin-bottom: 0px">Overcoming people inertia and group thinking</li>
</ul>
<p>Cons</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">Sporadic, discontinuous, unreliable, risky</li>
<li style="margin-top: 0px; margin-bottom: 0px">Possible resistance and fear of change</li>
<li style="margin-top: 0px; margin-bottom: 0px">Provides little time for adaptation and ignores complex environment interactions and feedback loops</li>
<li style="margin-top: 0px; margin-bottom: 0px">Causes destabilization, temporary chaos in the project</li>
</ul>
<p>How?<br />
Come up with new crazy ideas, close your eyes and jump to implement them</p>
<p>When?</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">the best and highly motivated players</li>
<li style="margin-top: 0px; margin-bottom: 0px">manageable and well understood game</li>
<li style="margin-top: 0px; margin-bottom: 0px">radical shift is required to sustain pressure and overcome limits to growth or fundamental problems</li>
</ul>
<h3 style="font-size: 12pt">The Road to The Best Strategy</h3>
<p>As you can see, there is no best strategy for every situation.</p>
<p id="yy7q" style="padding: 1em 0pt; text-align: left; margin-top: 0px; margin-bottom: 0px">Evolution is the most preferable, comfortable and reliable strategy in the complex uncertain world. Few revolutionary ideas will be very successful, come at right time and have significant impact, but most will fail and fade. Most of our achievements are result of evolution than revolution. However, revolution could promote new disruptive ideas, solve fundamental problems and achieve radical shift and advantage. Retreat is a conservative and disaster preventing strategy. A software team can apply these strategies on different stages for different levels of the project.</p>
<p>Software team should think about two goals:</p>
<ol style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">The best strategy for the present moment (criteria are discussed above)</li>
<li style="margin-top: 0px; margin-bottom: 0px">Actions to enable better strategy in the future</li>
</ol>
<p>What can a team do to prepare for the better<span class="Apple-converted-space"> </span>strategy?</p>
<p style="margin-top: 0px; margin-bottom: 0px"><img src="http://softwarecreation.org/images/2008/road-to-strategy.jpg" /></p>
<ol style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px"><strong>Grow</strong><span class="Apple-converted-space"> </span>- increase capabilities and motivation of players:
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">Experiment, make mistakes, acquire knowledge and shape skills.<span class="Apple-converted-space"> </span></li>
<li style="margin-top: 0px; margin-bottom: 0px">Consider<span class="Apple-converted-space"> </span><a href="http://softwarecreation.org/2008/five-big-personality-traits-of-a-programmer-do-they-matter/" title="personalities" id="s6ge" style="color: #551a8b">personalities</a>,<span class="Apple-converted-space"> </span><a href="http://softwarecreation.org/2007/lost-personalities-how-our-company-alters-us/" title="group psychology" id="u4i1">group psychology</a>,<span class="Apple-converted-space"> </span><a href="http://softwarecreation.org/2007/how-to-be-happy-at-work-short-tutorial/" title="interests" id="snor" style="color: #551a8b">interests</a><span class="Apple-converted-space"> </span>to make people energized and motivated to achieve success.</li>
<li style="margin-top: 0px; margin-bottom: 0px">Create stimulus for growth</li>
</ul>
</li>
<li style="margin-top: 0px; margin-bottom: 0px"><strong>Learn</strong><span class="Apple-converted-space"> </span>- you cannot actively change the game, but you can learn the game and make it more predictable and manageable.<span class="Apple-converted-space"> </span>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">Apply<span class="Apple-converted-space"> </span><a href="http://softwarecreation.org/2007/11-laws-of-the-system-thinking-in-software-development/" title="system thinking" id="fpps" style="color: #551a8b">system thinking</a><span class="Apple-converted-space"> </span>to understand core principles, relations and forces.</li>
<li style="margin-top: 0px; margin-bottom: 0px">Become an expert, whose knowledge and intuition could suggest the best moves</li>
</ul>
</li>
<li style="margin-top: 0px; margin-bottom: 0px"><strong>Watch</strong><span class="Apple-converted-space"> </span>- you should watch the internal and external changes
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">Set up feedback loops (e.g. retrospectives) and intelligence that serve as early warning and prevention system</li>
<li style="margin-top: 0px; margin-bottom: 0px">Honestly evaluate existing situation without<span class="Apple-converted-space"> </span><a href="http://softwarecreation.org/2008/dealing-with-programmers-who-are-different-and-disagree/" title="self-deception and blaming others" id="ofso" style="color: #551a8b">self-deception and blaming others</a>.</li>
</ul>
</li>
<li style="margin-top: 0px; margin-bottom: 0px"><strong>Adapt</strong><span class="Apple-converted-space"> </span>- constantly improve, adjust and respond to become fit for the changing environment, people minds and new opportunities
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">Be Agile</li>
</ul>
</li>
<li style="margin-top: 0px; margin-bottom: 0px"><strong>Innovate</strong><span class="Apple-converted-space"> </span>- strive for the new revolutionary ideas that could change the game or at least give you advantage (within tight project budget :)) Maybe new ideas will fail, but they will provide you with invaluable experience and increased capabilities of the team.</li>
<li style="margin-top: 0px; margin-bottom: 0px"><strong>Remove limits to growth</strong><span class="Apple-converted-space"> </span>- every process have some bottlenecks that slow growth. Removal of these barriers allow to move faster with better results.
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">Find your<span class="Apple-converted-space"> </span>limits for growth<span class="Apple-converted-space"> </span>and start eliminating them.</li>
</ul>
</li>
</ol>
<p><strong><a href="http://www.amazon.com/gp/product/0385517254?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0385517254" id="bpmd" title="Limits to growth">Limits to growth</a>:</strong><span class="Apple-converted-space"> </span>reinforcing process is set in motion to produce a desired results. It creates a spiral of success but also creates secondary effects which eventually slow down the success.</p>
<p style="margin-top: 0px; margin-bottom: 0px"><img src="http://softwarecreation.org/images/2008/limits-to-growth.jpg" /></p>
<p>Another method of finding fundamental problems is<span class="Apple-converted-space"> </span><a href="http://en.wikipedia.org/wiki/5_Whys" title="5 Whys" id="pbfi">5 Whys</a>. The 5 Whys is a question-asking method used to explore the cause/effect relationships underlying a particular problem. Ultimately, the goal of applying the 5 Whys method is to determine a root cause of a defect or problem.</p>
<p style="margin-top: 0px; margin-bottom: 0px">&nbsp;</p>
<h3 style="font-size: 12pt">External Forces<span class="Apple-converted-space"> </span></h3>
<p>A software team has power to change things, but external forces are very strong.</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">environment can change</li>
<li style="margin-top: 0px; margin-bottom: 0px">opponents become stronger</li>
<li style="margin-top: 0px; margin-bottom: 0px">product idea become useless</li>
</ul>
<p>Three small case studies show dialectic of evolution and revolution.</p>
<p><strong>Cambrian period</strong><span class="Apple-converted-space"> </span>- environment triggers revolution within evolution.<br />
<a href="http://en.wikipedia.org/wiki/Cambrian_explosion" title="The Cambrian explosion" id="h340">The Cambrian explosion</a><span class="Apple-converted-space"> </span>was the seemingly rapid appearance of most major groups of complex animals around 530 million years ago. Before about 580 million years ago, most organisms were simple, composed of individual cells occasionally organised into colonies. Over the following 70 or 80 million years the rate of evolution accelerated by an order of magnitude and the diversity of life began to resemble today&#8217;s.</p>
<p>Relatively small changes in the environment are considered one of the main reason for the explosion. One of them is increase in oxygen levels. Shortage of oxygen prevented the rise of large, complex animals. An increase in the concentration of oxygen in air or water increase the size to which an organism could grow without its tissues becoming starved of oxygen.<span class="Apple-converted-space"> </span><br />
Raise of complex animals triggered arms races between predators and prey that caused explosion of huge variety of animals shaped by natural selection. Many species become extinct that could be considered as an extreme version of retreat.</p>
<p><strong>Auto industry -<span class="Apple-converted-space"> </span></strong>winning opponents stop revolution<br />
100 years ago<span class="Apple-converted-space"> </span><a href="http://en.wikipedia.org/wiki/History_of_the_automobile" title="hundreds of automobile companies" id="p_la">hundreds of automobile companies</a><span class="Apple-converted-space"> </span>competed and produced many revolutionary ideas &#8211; from steamed cars to battery powered vehicles. Innovation was rapid and rampant, with no clear standards for basic vehicle architectures, body styles, construction materials, or controls. Development of automotive technology was rapid, due in part to a huge number of small manufacturers all competing to gain the world&#8217;s attention.</p>
<p>Revolution continued until gasoline-powered cars makers won with a cost effective design, standardized components and better mass production techniques such as an assembly line. After 1930, the number of auto manufacturers declined sharply as the industry consolidated and matured. Starting from 1960 nearly all modern passenger cars are front wheel drive<span class="Apple-converted-space"> </span>unibody<span class="Apple-converted-space"> </span>designs with transversely-mounted engine running on oil products.</p>
<p>Fundamental changes in the game (ecology, fuel cost) seem to trigger a new revolution with gas-electrig<span class="Apple-converted-space"> </span>hybrids, electric, fuel cells, biomass powered automobiles, but this is much smaller revolution than 100 years ago.</p>
<p><strong>Search engines -</strong><span class="Apple-converted-space"> </span>a simple algorithm and profitable business model renders evolution pointless<strong><br />
</strong>From creation of the Internet in 1993 multiple<span class="Apple-converted-space"> </span><a href="http://www.wiley.com/legacy/compbooks/sonnenreich/history.html" title="search engines" id="y8ap">search engines</a><span class="Apple-converted-space"> </span>appeared and become popular and faded &#8211; Archie, Excite, Yahoo,<span class="Apple-converted-space"> </span>Lycos,<span class="Apple-converted-space"> </span>Infoseek, Alta Vista and many others.<br />
Search engines revolution produced many ideas. Yahoo created manual directory. Wanderer deployed web spiders. Excite brought statistical analysis of words. Alta Vista introduced natural language processing and Boolean operators.<span class="Apple-converted-space"> </span>Inktomi<span class="Apple-converted-space"> </span>popularized the paid-per-click model.</p>
<p style="margin-top: 0px; margin-bottom: 0px">However, Google won this revolution with Page Rank algorithm counting incoming links as votes with different degree of authority. After adding profitable business model based on pay-per-click AdWords service, Google become unstoppable -<span class="Apple-converted-space"> </span><a href="http://news.cnet.com/8301-1023_3-9991866-93.html" title="70% of searches in United States" id="glq_">70% of searches in United States</a><span class="Apple-converted-space"> </span>with constantly increasing share.<br />
Can anybody beat Google in search? Evolution won&#8217;t help here &#8211; revolutionary ideas are needed.</p>
<h3 style="font-size: 12pt">Afterword</h3>
<p>I don&#8217;t know what is the best strategy for your team &#8211; there are so many factors to consider. But I know, your team will win if players honestly recognize reality, pragmatically select present strategies and move to enable the best strategies for achieving success in this complex world.<br class="Apple-interchange-newline" /></p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=75&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2008/selecting-the-best-strategy-for-software-teams-retreat-evolution-or-revolution/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Do We Need Software Architects? 10 Reasons Why Not</title>
		<link>http://softwarecreation.org/2007/do-we-need-software-architects-10-reasons-why-not/</link>
		<comments>http://softwarecreation.org/2007/do-we-need-software-architects-10-reasons-why-not/#comments</comments>
		<pubDate>Thu, 30 Aug 2007 04:45:22 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[Teams]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2007/do-we-need-software-architects-10-reasons-why-not/</guid>
		<description><![CDATA[Share
Recently I was reviewing requirements for Microsoft Architect Certification and had found description for architect roles. After reading I had a question: do we need this kind of architects in a software team? Can they really help with building successful software?
The summary of architect responsibilities (as per Microsoft):

     Enterprise architects: set [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2007/do-we-need-software-architects-10-reasons-why-not/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2007/do-we-need-software-architects-10-reasons-why-not/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2007/do-we-need-software-architects-10-reasons-why-not/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2007/do-we-need-software-architects-10-reasons-why-not/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2007/do-we-need-software-architects-10-reasons-why-not/&amp;title=+Do+We+Need+Software+Architects%3F+10+Reasons+Why+Not&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><img src="http://softwarecreation.org/images/2007/superman.jpg" /></p>
<p>Recently I was reviewing requirements for <a href="http://www.microsoft.com/learning/mcp/architect/default.mspx" title="Microsoft Architect Certification">Microsoft Architect Certification</a> and had found description for <a href="http://www.microsoft.com/learning/mcp/architect/specialties/default.mspx" title="architect roles">architect roles</a>. After reading I had a question: do we need this kind of architects in a software team? Can they really help with building successful software?</p>
<p>The summary of architect responsibilities (as per Microsoft):</p>
<ul>
<li>     <span style="font-weight: bold">Enterprise architects:</span> set the overall vision and framework for the IT environment from a strategic business perspective.</li>
<li>     <span style="font-weight: bold">Solutions architects</span>: design the solution to take advantage of the existing assets, integrate them into the existing environment, follow the enterprise architecture, and solve the business problems of the business owner or unit.</li>
<li>     <span style="font-weight: bold">Infrastructure architects</span>: responsible for creating an architecture that meets the business and service level agreement requirements of the business owners and supports the applications and solutions that are required to operate their day-to-day businesses.</li>
</ul>
<p>The bottom line is that company hires expensive and canny software architects before start of the project. They talk with the business, come up with solutions and make bright key decisions about architecture. <span style="font-weight: bold">But they don&#8217;t program</span>. During the course of the project they ensure that developers don&#8217;t spoil this great architecture.<br />
<span style="font-weight: bold"></span></p>
<p>Now business owners can hire not so bright programmers, who should just follow directives and implement this great architecture. There is even correspondence with <a href="http://softwarecreation.org/2007/programmers-are-lazy-capricious-pseudo-intellectuals-really/" title="theories">theories</a> of some management consultants that programmers are just house painters.</p>
<p>Completely irrelevant questions: Can you trust advise of your friend about Paris, if he saw the city only on TV? Can you trust battle plans if battle didn&#8217;t begin and your commander knows little about enemy? How many chess moves ahead can you predict with high certainty before start of the game?</p>
<p>I don&#8217;t reject a need in architecture, but I don&#8217;t agree <span style="font-weight: bold">who</span>, <span style="font-weight: bold">when </span>and <span style="font-weight: bold">how </span>should make architecture decisions in a software project.</p>
<p><span id="more-32"></span></p>
<h3>Top 10 reasons why you don&#8217;t need Software Architect</h3>
<p>The Architect (dedicated non-programming technical decision maker and problem solver for business):</p>
<ol>
<li>     Has outdated programming knowledge and experience, loss of touch with modern development approaches and practices.</li>
<li>     Don&#8217;t program and don&#8217;t know much about evolving system internals, but makes key technical decisions. Often has completely irrelevant and unreal picture what is happening with the system.</li>
<li>     Tends to complex, premature and generic solutions when the system is still in infancy and nothing is clear. Applies latest modern buzzword technologies as SOA, MDA, SaaS, Software Factories, etc. which look so beautiful in technical magazines, conferences and CV, but cause unnecessary headache for developers.</li>
<li>     Plays role of the middleman introducing complexity in coordination and project responsibilities. Represents software team in interactions with business customers reducing communication value for the rest of the team and <a href="http://softwarecreation.org/2007/software-development-is-the-flow-of-ideas-the-rest-is-secondary/" title="impacting idea flow">impacting idea flow</a>.</li>
<li>     Reduces quality of decisions, which become limited to one perspective; decision making starts lacking diversity, independence and decentralization, which are essential attributes of <a href="http://softwarecreation.org/2007/review-the-wisdom-of-crowds-making-the-best-decisions/" id="mxv." title="collective intelligence">collective intelligence</a>.</li>
<li>     Creates tension with developers who experience mismatch between grand design and reality. Often continues pushing design decisions until the system becomes overly complex, difficult to change and becomes completely unusable.</li>
<li>     Secures job and justifies high salary &#8211; becomes authoritative center for solving business problems without much input from the team.</li>
<li>     Causes loss of sense of ownership, motivation and accountability in developers by detaching them from the key architecture decisions.</li>
<li>     Concentrates project knowledge and the big picture in one head, limiting (and sometimes preventing) complete understanding for others.</li>
<li>     Contributes to creation of specialized IT verticals that <a href="http://softwarecreation.org/2007/it-business-gap-widens-is-this-a-problem/" id="jx_6" title="hurt relations">hurt relations</a> with the business.</li>
</ol>
<p>I&#8217;m sure that some architects bring strong technical leadership, excellent solutions and overall project success. However, the architect role itself, as described by Microsoft and employed by other companies, doesn&#8217;t encourage productive development and effective solutions.</p>
<h3> What is effective architecture? Who is effective architect?</h3>
<p><a href="http://www.laputan.org/metamorphosis/metamorphosis.html" id="hdid" title="Emerging">Emerging</a> and <a href="http://martinfowler.com/articles/designDead.html" id="d5sw" title="evolutionary">evolutionary</a> architecture is a core for a successful agile (and not only) software system, emerging from the implementation of business needs, learning from working code, problems and interactions with people, other systems and operational environment.</p>
<p>Effective architecture:</p>
<ol>
<li>     Provides stable foundation and integrity for the growing software system, enabling desired system qualities for the business solutions.</li>
<li>     Ensures seamless and consistent integration, well defined interfaces and interaction between subsystems, external systems and operational environment.</li>
<li>     Supports emerging abstractions, key system elements and frameworks for conceptual integrity, efficiency and reuse.</li>
</ol>
<p>Effective architect:</p>
<ol>
<li>     Guards a system against failure, sensing worrying changes in the project dynamic, system code and business requests.</li>
<li>     Keeps the <a href="http://en.wikipedia.org/wiki/Vitruvius" id="dg5h" title="trinity of system qualities">trinity of system qualities</a> (known from time of Roman empire) in a balance and prevent degradation and entropy:
<ul>
<li>       <span style="font-weight: bold">Firmitas </span>(Strength) &#8211; the system is reliable, secure, has good performance and easy to support</li>
<li>       <span style="font-weight: bold">Utilitas </span>(Utility) &#8211; the system is usable, meets business business needs and add business value every day instead of drifting into technology trenches</li>
<li>       <span style="font-weight: bold">Venustas </span>(Beauty) &#8211; code and system structure are clean, easy to understand, minimal</li>
</ul>
</li>
<li>     Encourages constant improving of the code design, enhancing system abstractions and structure, removing duplication, defining boundaries and interfaces of the subsystems.</li>
<li>     Keeps solutions as simple as possible, maintains intellectual control over system and avoids over-engineering.</li>
<li>     Most important &#8211; grows and coaches other developers to become architects</li>
</ol>
<p>If your company can afford dedicated non-programming technical person, hire an expert for complex technical areas, a <a href="http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/" id="pydp" title="coach">coach</a> to share best practices and experience or a technical supporter to coordinate with different external groups and help to resolve problems and make them all part of the team.</p>
<p><span style="font-weight: bold">But don&#8217;t take technical decisions and concern about architecture from the development team.</span></p>
<p>The ultimate solution &#8211; every developer covers these architect responsibilities. Hire few experienced, motivated and capable developers and start project with them. Developers will constantly evolve the system based on real needs and shape effective architecture. You can trust that system will be healthy, meet business needs and bring success. Often only few important architecture decisions should be made before start of the project &#8211; trust them to the developers, who will implement the system.</p>
<p>So, here is the answer regarding who, when and how should make architecture decisions:</p>
<p><span style="font-weight: bold">Who</span> &#8211; every developer timely makes architecture decisions and constantly improves evolving architecture<br />
<span style="font-weight: bold">When</span> &#8211; mostly after start of implementation, when system becomes more complex and need design improvements to maintain system qualities, intellectual control and conceptual integrity.<br />
<span style="font-weight: bold">How</span> &#8211; preventing degradation and entropy by making design changes and refactoring; learning from the project dynamic, working code and business requests and adjusting a way how the development team works.</p>
<p>Do you still think that software projects need The Architect?</p>
<p><strong>Useful resources:</strong></p>
<p><a href="http://www.microsoft.com/learning/mcp/architect/default.mspx" title="Microsoft Architect Certification">Microsoft Architect Certification</a></p>
<p><a href="http://martinfowler.com/articles/designDead.html" title="Is Design Dead?">Is Design Dead?</a>, Martin Fowler</p>
<p><a href="http://www.laputan.org/mud/" title="Big Ball of Mud">Big Ball of Mud</a>, Brian Foote and Joseph Yoder</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=32&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2007/do-we-need-software-architects-10-reasons-why-not/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Better Brainstorming: Individually or Together?</title>
		<link>http://softwarecreation.org/2007/better-brainstorming-individually-or-together/</link>
		<comments>http://softwarecreation.org/2007/better-brainstorming-individually-or-together/#comments</comments>
		<pubDate>Tue, 14 Aug 2007 03:55:07 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[People]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Skills]]></category>
		<category><![CDATA[Teams]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2007/better-brainstorming-individually-or-together/</guid>
		<description><![CDATA[Share Marc Andressen quotes Frans Johansson&#8217;s book &#8220;The Medici Effect&#8221;:
 In a [1987 study, researchers] concluded that brainstorming groups have never outperformed virtual groups.  Of the 25 reported experiments by psychologists all over the world, real groups have never once been shown to be more productive than virtual groups. In fact, real groups that [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2007/better-brainstorming-individually-or-together/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2007/better-brainstorming-individually-or-together/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2007/better-brainstorming-individually-or-together/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2007/better-brainstorming-individually-or-together/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2007/better-brainstorming-individually-or-together/&amp;title=+Better+Brainstorming%3A+Individually+or+Together%3F&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p> Marc Andressen <a href="http://blog.pmarca.com/2007/07/quote-of-the--3.html">quotes</a> Frans Johansson&#8217;s book &#8220;The Medici Effect&#8221;:</p>
<blockquote><p> In a [1987 study, researchers] concluded that brainstorming groups have <em>never</em> outperformed virtual groups.  Of the 25 reported experiments by psychologists all over the world, real groups have never once been shown to be more productive than virtual groups. In fact, real groups that engage in brainstorming consistently generate about half the number of ideas they would have produced if the group&#8217;s individuals had [worked] alone.</p></blockquote>
<p>It is hard to believe (as with any categorical statement) that this is a final verdict. Some bloggers correctly point that done right, brainstorming is a powerful tool (<a href="http://www.interactionassociates.com/ideas/2007/08/in_defense_of_brainstorming.php" title="here">here</a> and <a href="http://edgecrafting.blogspot.com/2007/08/group-brainstorming-is-good-idea-when.html" title="here">here</a>). <a href="http://www.mindtools.com/brainstm.html" title="Mindtools.com"><span class="misspell" suggestions="Mind tools,Mind-tools,Mandrills,Mandrels,Mantels">Mindtools</span>.com</a> and <a href="http://en.wikipedia.org/wiki/Brainstorming" title="Wikipedia">Wikipedia</a> describe effective brainstorming process.</p>
<p>However, group brainstorming indeed has potential risks for generating less and lower quality ideas:</p>
<ol>
<li>Ideas that challenge conventional wisdom are suppressed or considered mistaken</li>
<li>People can change or even disregard own ideas while listening to ideas from others, especially authoritative sources</li>
<li>Sticking with the crowd causes less willingness for risky and innovative ideas.</li>
</ol>
<p>Effective brainstorm process avoids these problems when:</p>
<ol>
<li>People investigated the topic before the meeting and come prepared with own ideas and considerations.</li>
<li>People are diverse, have different perspective and background. They bring specialized and tacit knowledge to the table.</li>
<li>People are encouraged to think independently, creatively and don&#8217;t criticize others. Everybody contributes as equal; ideas could be even presented anonymously.</li>
</ol>
<p>I experienced myself both successful and unproductive brainstorming sessions. I found that good brainstorming session produces ideas, which are better and more than just selection from individual ideas. It is real enjoyment to see when people create ideas, enrich each other thinking and generate new wonderful and unseen ideas. A side effect is important: people consider themselves as a part of the process, feeling ownership and control. They accept final ideas readily, better understand these ideas and are committed to implement them. This is a way to become <a href="http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/" title="self-organizing team">self-organizing team</a>.</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=29&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2007/better-brainstorming-individually-or-together/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>What is The Best Leadership Style for The Software Team?</title>
		<link>http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/</link>
		<comments>http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/#comments</comments>
		<pubDate>Thu, 09 Aug 2007 04:46:14 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Teams]]></category>

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