<?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; Skills</title>
	<atom:link href="http://softwarecreation.org/category/skills/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>Should An Effective Developer Innovate, Imitate or just Integrate?</title>
		<link>http://softwarecreation.org/2010/should-an-effective-developer-innovate-imitate-or-just-integrate/</link>
		<comments>http://softwarecreation.org/2010/should-an-effective-developer-innovate-imitate-or-just-integrate/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 04:22:50 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Expertise]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=162</guid>
		<description><![CDATA[Sharein·no·va·tion &#8211; introduction of new things or methods
im·i·ta·tion &#8211; the copying of patterns of activity and thought of other groups or individuals
in·te·gra·tion &#8211; an act of combining into an integral whole.
What is the best strategy for an effective developer &#8211; innovation, imitation or integration? Should you introduce new creative solutions, adapt other people ideas or [...]]]></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/2010/should-an-effective-developer-innovate-imitate-or-just-integrate/&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/2010/should-an-effective-developer-innovate-imitate-or-just-integrate/' 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/2010/should-an-effective-developer-innovate-imitate-or-just-integrate/'></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/2010/should-an-effective-developer-innovate-imitate-or-just-integrate/'></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/2010/should-an-effective-developer-innovate-imitate-or-just-integrate/&amp;title=Should+An+Effective+Developer+Innovate%2C+Imitate+or+just+Integrate%3F&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><strong>in·no·va·tion</strong> &#8211; introduction of new things or methods<br />
<strong>im·i·ta·tion</strong> &#8211; the copying of patterns of activity and thought of other groups or individuals<br />
<span id="glkd"><strong>in·te·gra·tion</strong> &#8211; an</span> act of combining <span id="hurx">into</span> <span id="qhxc">an</span> <span id="x-93">integral</span> <span id="kkor">whole.</span></p>
<p>What is the best strategy for an effective developer &#8211; innovation, imitation or integration? Should you introduce new creative solutions, adapt other people ideas or just integrate existing components?</p>
<p><img title="Jan Matejko - Alchemist Sedziwoj" src="http://softwarecreation.org/images/2010/alchemist.jpg" alt="" width="800" height="452" /></p>
<p>Software Development is an exciting intellectual endeavor without physical barriers. It is easy to start innovating &#8211; come up with new ideas and quickly submerge into their implementation. And I don&#8217;t mean here fundamental breakthroughs. I consider as innovation building of any non-trivial solution that is not directly stemmed from Google search results, development resources or available examples. And certainly, I pose the dilemma &#8211; innovate or not innovate &#8211; to skillful developers who are quite capable to innovate and who enjoy meaningful creative work.</p>
<p><span id="more-162"></span></p>
<h3>Discount Machine</h3>
<p>Lets start from <a id="jm7-" title="a tournament" href="http://www.intercult.su.se/cultaptation/tournament.php">a tournament</a> organized by <span style="color: #000000;"><a href="http://lalandlab.st-andrews.ac.uk/" target="nsarticle">Kevin Laland</a></span> of the University of St Andrews to find out what strategy works best to gain maximum pay-off:</p>
<ul>
<li><strong>innovation </strong>- a new behaviour randomly acquired by individual learning;</li>
<li><strong>observation -</strong> a new behaviour acquired by learning from others or imitation;</li>
<li><strong>exploitation -</strong> using a previously learned behaviour to gain pay-off.</li>
</ul>
<p>The participant had to build a strategy that their virtual agents would use to decide between these options in a computer-generated world. The challenge was to create the strategy that generated the most successful agents.</p>
<div>New Scientist <a id="lp:s" title="reported" href="http://www.newscientist.com/article/mg20627581.700">reported</a> that the winner strategy, Discount Machine, spent almost all learning time observing rather than innovating. Optimal learning time was between 10-20% and spaced through agent&#8217;s life.</div>
<blockquote><p>Therefore, a tournament showed that the best strategy is keeping up-to-date by learning what others are doing and using their successful solutions most of the time.</p></blockquote>
<div>Can we apply these results to software development?</div>
<h3>Strategies</h3>
<p>You have three main strategies for approaching a new problem in software development</p>
<ol>
<li><strong>Integrate </strong>into the system existing software product, component or service &#8211; commercial or open source (for example, Payment Gateway as PayPal, Blog Engine as WordPress, CMS as Drupal, UI Components as Telerik and so on)</li>
<li><strong>Imitate </strong>good enough solutions and adapt to your problem (Architecture Patterns as MVC, available code examples and guidelines as MSDN, borrow ideas from blogs, open source projects, Starter Kits, SDK and so on)</li>
<li><strong>Innovate </strong>and create new solutions or make significant improvements to existing approaches</li>
</ol>
<div><strong>Strategy comparison (*)</strong></div>
<table id="k7l9" border="1" cellspacing="0" cellpadding="3" width="100%" bordercolor="#000000">
<tbody>
<tr>
<td width="25%"></td>
<td width="25%"><strong>Integrate</strong></td>
<td width="25%"><strong>Imitate</strong></td>
<td width="25%"><strong>Innovate</strong></td>
</tr>
<tr>
<td width="25%"><strong>Time to market</strong></td>
<td width="25%"><img class="alignnone" title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" /> <img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" />Fast, if effort to integrate with other system components is low</td>
<td width="25%"><img title="bad" src="http://softwarecreation.org/images/2010/thumb-down.png" alt="" width="16" height="16" /><img title="bad" src="http://softwarecreation.org/images/2010/thumb-down.png" alt="" width="16" height="16" />Slow, but predictable, if not many hidden pitfalls or adaptation problems are encountered</td>
<td width="25%"><img title="bad" src="http://softwarecreation.org/images/2010/thumb-down.png" alt="" width="16" height="16" /><img title="bad" src="http://softwarecreation.org/images/2010/thumb-down.png" alt="" width="16" height="16" />Unpredictable as any innovative work</td>
</tr>
<tr>
<td width="25%"><strong>Cost</strong></td>
<td width="25%"><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" /><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" />Low, if components are reasonably priced and not much integration work needed</td>
<td width="25%"><img title="bad" src="http://softwarecreation.org/images/2010/thumb-down.png" alt="" width="16" height="16" />More expensive and depends on complexity and adaptation effort</td>
<td width="25%"><img title="bad" src="http://softwarecreation.org/images/2010/thumb-down.png" alt="" width="16" height="16" /><img title="bad" src="http://softwarecreation.org/images/2010/thumb-down.png" alt="" width="16" height="16" />Unpredictable</td>
</tr>
<tr>
<td width="25%"><strong>System integrity (with system architecture and environment)</strong></td>
<td width="25%"><img title="bad" src="http://softwarecreation.org/images/2010/question.png" alt="" width="16" height="16" />Acceptable if new components don&#8217;t screw and over-complicate core architecture</td>
<td width="25%"><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" />Good, if developers adapt ideas to existing architecture</td>
<td width="25%"><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" /><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" />Solution is built to match core architecture and customer needs</td>
</tr>
<tr>
<td width="25%"><strong>Required Expertise</strong></td>
<td width="25%"><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" /><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" />Not much specialized expertise is required, usually external support is available for integration</td>
<td width="25%"><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" />Good developers can effectively adopt good ideas that are explained well</td>
<td width="25%"><img title="bad" src="http://softwarecreation.org/images/2010/thumb-down.png" alt="" width="16" height="16" />High level expertise, creativity and specialized knowledge are required for good innovative solution</td>
</tr>
<tr>
<td width="25%"><strong>Control over code and future development</strong></td>
<td width="25%"><img title="bad" src="http://softwarecreation.org/images/2010/thumb-down.png" alt="" width="16" height="16" /><img title="bad" src="http://softwarecreation.org/images/2010/thumb-down.png" alt="" width="16" height="16" />Little control and you are on mercy of external developers</td>
<td width="25%"><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" />Good control if ideas are applied well and not over-engineered</td>
<td width="25%"><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" /><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" />Full control</td>
</tr>
<tr>
<td width="25%"><strong>Competitive advantage and uniqueness</strong></td>
<td width="25%"><img title="bad" src="http://softwarecreation.org/images/2010/thumb-down.png" alt="" width="16" height="16" />Not much for the standard solution that many can use</td>
<td width="25%"><img title="bad" src="http://softwarecreation.org/images/2010/question.png" alt="" width="16" height="16" />Depends on quality and creativity in adaptation</td>
<td width="25%"><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" /><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" />Innovation is an excellent opportunity to gain advantage</td>
</tr>
<tr>
<td width="25%"><strong>Maintenance, support and improving capabilities</strong></td>
<td width="25%"><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" /><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" />Work is outsourced to dedicated external developers who fix, support and improve the product</td>
<td width="25%"><img title="bad" src="http://softwarecreation.org/images/2010/question.png" alt="" width="16" height="16" />Your effort is supported in original source of ideas if you are lucky</td>
<td width="25%"><img title="bad" src="http://softwarecreation.org/images/2010/thumb-down.png" alt="" width="16" height="16" /><img title="bad" src="http://softwarecreation.org/images/2010/thumb-down.png" alt="" width="16" height="16" />Completely your own effort</td>
</tr>
<tr>
<td width="25%"><strong>Learning curve, tacit knowledge, help</strong></td>
<td width="25%"><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" /><img title="good" src="http://softwarecreation.org/images/2010/thumb-up.png" alt="" width="16" height="16" />Usually supported by help, tutorials, training and community involvement</td>
<td width="25%"><img title="bad" src="http://softwarecreation.org/images/2010/question.png" alt="" width="16" height="16" />Partially supported by original source, however can drift far as the result of internal implementation</td>
<td width="25%"><img title="bad" src="http://softwarecreation.org/images/2010/thumb-down.png" alt="" width="16" height="16" /><img title="bad" src="http://softwarecreation.org/images/2010/thumb-down.png" alt="" width="16" height="16" />Should be covered by you to enable effective support and future development by existing and new developers</td>
</tr>
</tbody>
</table>
<p>(*) <strong>Disclosure:</strong> I should confess that the table above has some assumptions. I assume that external components for integration have good quality, work as advertised and are backed by solid support and team . Also, I assume that internal developers involved in implementation have good skills and experience. They follow good practices and are motivated to do great job and know what they are doing. I fully realize that life is not simple, and  my assumptions could be completely wrong and this would change the table and the whole game :)</p>
<div>As you can see, <strong>Integration</strong> of existing components is the most effective way to develop a new system with lowest risk, effort and minimal future support. However, it still could be not the best approach as sometimes:</p>
<ul>
<li>available solutions do not meet needs or compromises are not satisfactory</li>
<li>non-conventional and state-of-art solution is required for challenging important needs</li>
<li>the component is crucial for the competitive advantage and uniqueness of the software product</li>
<li>full control is required over code and future development of the component</li>
<li>the component has low compatibility with system ideas and core architecture, over-complicates technical solution and breaks integrity of the system that result in
<ul>
<li>unnecessary code and rough system seams to make components work together</li>
<li>limited refactoring and re-design options</li>
<li>reduced ability to expand the system</li>
</ul>
</li>
</ul>
<p><strong>Imitation</strong> is a middle ground &#8211; you build solution yourself but use other people ideas and experience as a guidance.</div>
<div><strong>Innovation</strong> is expensive and risky to solve the problems. However, it can be the only way if you face unique challenges, cannot find good ideas and cannot change requirements to use existing solution.</div>
<div>Good innovation makes the system better suited for customer needs, economically successful and more reliable. It could be</div>
<ul>
<li>Improvement and simplification of the system design to make it easier to evolve and support</li>
<li>Removing technical constraints and solving technical challenges to make the system faster, more responsive and reliable</li>
<li>Introduction of important business features where no standard solutions exists</li>
<li>Significant improvement of users experience</li>
<li>Reducing cost of development and support</li>
</ul>
<div>Innovation can be harmful. For example,</div>
<ul>
<li>Developing system features or properties that are not required</li>
<li>Building alternatives for good available solutions (reinventing the wheel)</li>
<li>Playing with interesting ideas without customer awareness</li>
</ul>
<h3>The Effective Way To Build Software System</h3>
<div>A short answer to dilemma: <strong>maximum integration and minimal innovation</strong>.</div>
<div><img class="alignnone" title="Building Effective System" src="http://softwarecreation.org/images/2010/BuildingEffectiveSystem.png" alt="" width="800" height="400" /></div>
<div>A long answer with nuances and description of approach:</div>
<ol>
<li><strong>Understand</strong> purpose of the system, essence of customer needs and desired outcome</li>
<li><strong>Break down</strong> the system into components and research if
<ol>
<li>standard solutions exist (for integration)</li>
<li>implementation ideas exist (for imitation)</li>
<li>innovation is required</li>
</ol>
</li>
<li>Can you <strong>change needs and requirements</strong>? Transform customer needs and architecture ideas to minimize development effort
<ol>
<li>by moving from innovation to imitation strategy</li>
<li>by moving from imitation to integration strategy</li>
</ol>
</li>
<li><strong>Evaluate</strong> each component from the system and business perspective
<ol>
<li>Should you avoid integration and use imitation if:
<ul>
<li>System integrity under the threat and the component is part of the system core</li>
<li>Control over code and future development is required</li>
<li>Competitive advantage and uniqueness are important</li>
</ul>
</li>
<li>Should you still go with innovation because of unresolved contradictions, challenging and unmet needs?</li>
</ol>
</li>
<li><strong>Build prototypes</strong> clearly separated from mainstream development to confirm selected strategy</li>
</ol>
<h3>Becoming an effective software developer</h3>
<div>How can a developer prepare for selecting and using the right strategy?</div>
<div><strong>All strategies</strong></div>
<ol>
<li>Systematically study other solutions in your area of specialization (at least a couple in a month &#8211; understand strengths, weaknesses, high-level architecture and interesting tricks)</li>
<li>Learn concepts and language of your business domain to be able to understand customers and shape their needs together</li>
<li>Enhance abilities to find and brainstorm alternatives (improve techniques, make them essential part of your process)</li>
<li>Become an expert in Google search and fast evaluation (no kidding, these skills <a id="v8ed" title="become very important" href="../2008/how-to-use-search-skills-to-become-effective-programmer/"> become very important</a> for any modern developer)</li>
<li>Master rapid prototyping, apply solutions in practice and seek for rapid feedback (answer in short time if proposed solution is good, learn and correct if you made a mistake)</li>
<li>Develop a holistic view and knowledge of the system, infrastructure and environment (understand subsystems, connections, integration options and trade-offs)</li>
<li>Keep up with latest software development trends, technologies and approaches (subscribe to blogs, magazines and other sources)</li>
</ol>
<div><strong>Innovation</strong></div>
<ol>
<li>Achieve deep specialization in your core technical area and business domain (extensive experience and deep knowledge are great assets for innovator)</li>
<li>Continuously develop creativity and problem solving (<a id="dmcp" title="the post about creative problem solving" href="../2010/how-to-become-an-expert-creative-problem-solving/">the post about creative problem solving</a>)</li>
<li>Enhance architecture and fundamental programming expertise based on own practice and ideas from others</li>
<li>Master <a id="ifze" title="Evolutionary" href="http://martinfowler.com/articles/designDead.html"> Evolutionary</a> and <a id="l7yg" title="Domain Driven Design" href="http://domaindrivendesign.org/resources/what_is_ddd"> Domain Driven Design</a></li>
</ol>
<div>
<h3>At the end,</h3>
<div>The effective developer understands the purpose of the system and customer needs, selects a right strategy for the system components and builds a great solution with minimal effort.</div>
</div>
<!-- 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=162&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2010/should-an-effective-developer-innovate-imitate-or-just-integrate/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to Become an Expert: Creative Problem Solving</title>
		<link>http://softwarecreation.org/2010/how-to-become-an-expert-creative-problem-solving/</link>
		<comments>http://softwarecreation.org/2010/how-to-become-an-expert-creative-problem-solving/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 21:11:24 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Expertise]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=144</guid>
		<description><![CDATA[Share&#8220;Ideas are like rabbits. You get a couple and learn how to handle them, and pretty soon you have a dozen&#8221; &#8211; John Steinbeck
Your success in life mostly depends on two things &#8211; luck and ability to solve problems. I would leave luck topic for Irish tales and concentrate on the topic of creative problem [...]]]></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/2010/how-to-become-an-expert-creative-problem-solving/&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/2010/how-to-become-an-expert-creative-problem-solving/' 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/2010/how-to-become-an-expert-creative-problem-solving/'></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/2010/how-to-become-an-expert-creative-problem-solving/'></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/2010/how-to-become-an-expert-creative-problem-solving/&amp;title=How+to+Become+an+Expert%3A+Creative+Problem+Solving&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><em>&#8220;Ideas are like rabbits. You get a couple and learn how to handle them, and pretty soon you have a dozen&#8221;</em> &#8211; John Steinbeck</p>
<div>Your success in life mostly depends on two things &#8211; luck and ability to solve problems. I would leave <a id="por4" title="luck" href="http://en.wikipedia.org/wiki/Luck">luck</a> topic for Irish tales and concentrate on the topic of creative problem solving.</div>
<p><img title="problems" src="http://softwarecreation.org/images/2010/cat-cubic-rubik.jpg" alt="" /></p>
<div>Any active person constantly facing many problems and challenges. For example,</div>
<ul>
<li>Improving relationship</li>
<li>Flying to space to be the first man on Mars</li>
<li>Overweighting and health problems</li>
<li>Winning bodybuilding or beauty contest.</li>
<li>Procrastination</li>
<li>Learning new technology</li>
<li>Making more money</li>
<li>Building next Facebook or Twitter</li>
<li>Raising kids</li>
<li>Boosting career growth</li>
<li>Becoming Olympic champion or billionaire</li>
<li>Making the world a better place</li>
<li>Planning a dream vacation</li>
<li>Seeking for happiness&#8230;</li>
</ul>
<p>We often are inconsistent in solving problems and cannot find a good solution. This post focus on effective and creative problem solving by offering systematic approach and wide range of techniques.</p>
<p><span id="more-144"></span></p>
<p><img class="alignnone" title="problem solving" src="http://softwarecreation.org/images/2010/problem-solving.png" alt="" width="846" height="825" /></p>
<h3>Beginning</h3>
<p>There are<span> </span><strong>four<span> </span></strong>main elements of Creative Problem Solving:</p>
<ol>
<li><strong>Problem</strong><span> </span>- any question or matter involving doubt, uncertainty or difficulty</li>
<li><strong>Solution<span> </span></strong>- set of actions that solves a problem</li>
<li><strong>You</strong> &#8211; your knowledge, beliefs, emotions and abilities</li>
<li><strong>Context </strong>-forces, people and environment</li>
</ol>
<p>And there are<span> </span><strong>seven<span> </span></strong>strategies:</p>
<ol>
<li><strong>Knowing<span> </span></strong>- you know how to solve the problem in practice</li>
<li><strong>Copying</strong> &#8211; copy and adapt working solutions</li>
<li><strong>Logic<span> </span></strong>- follow reasoning and step-by-step approach to find a solution</li>
<li><strong>Lateral thinking </strong>- solving problems through an indirect and creative approach</li>
<li><strong>Psychology </strong>- use intuition and subconscious to pop a solution</li>
<li><strong>Dialogue<span> </span></strong>- engage brains of other people</li>
<li><strong>Trial and errors </strong>- make guess, verify and refine by experiments</li>
</ol>
<p>Before you start finding a solution, you should board the problem &#8211; understand and accept it.</p>
<h4 style="font-size: 10pt;">Boarding a problem in 3 steps</h4>
<div><em>&#8220;A wise man&#8217;s question contains half the answer.&#8221;</em> &#8211; Solomon Ibn Gabirol</div>
<p><strong>Step 1.<span> </span></strong>What is the core of the problem?</p>
<ul>
<li><strong>Essentials</strong><span> </span>- What are symptoms, facts, key points, players, context?</li>
<li><strong>Root Conflict</strong><span> </span>- Why is this a problem? What is the core of a problem? What is not a problem?<span> </span><a id="p.ya" style="color: #551a8b;" title="Ask 5 whys" href="http://en.wikipedia.org/wiki/5_Whys">Ask 5 whys</a></li>
<li><strong>Clarity</strong><span> </span>- What is still unknown and unclear? Do I need more information?</li>
</ul>
<div><strong>Step 2</strong>. Is this a right problem for me?</div>
<ul>
<li><strong>Feasible </strong>- Is the problem real and you can solve it? Continue by asking critical questions about the problem
<ul>
<li>Is it logical? Does the problem make sense for the rational part of my brain?</li>
<li>Is it subjective? Is it possible that problem exist only in my mind?</li>
<li>What are emotions and feelings? How do they contribute to my perception of the problem?</li>
<li>Is the problem based on hard facts and proven information?</li>
</ul>
</li>
<li><strong>Fit</strong><span> </span>- Why is it necessary to solve? Should I really solve this problem based on my
<ul>
<li>needs</li>
<li>priorities</li>
<li>values and principles</li>
<li>resources (time / money)</li>
<li>potential benefits / risks?</li>
</ul>
</li>
</ul>
<div><strong>Step 3.</strong><span> </span>What is my target for solution?</div>
<ul>
<li><strong>Purpose<span> </span></strong>- what is the purpose of solving the problem?</li>
<li><strong>Stretch<span> </span></strong>- should I solve bigger problem?</li>
<li><strong>Squeeze<span> </span></strong>- should I solve only part of the problem?</li>
<li><strong>Model</strong><span> </span>- what are elements and parameters of the problem? What are forces?</li>
<li><strong>Question </strong>- use<span> </span><a id="gshl" style="color: #551a8b;" title="CIA Phoenix checklist" href="http://www.futurelab.net/blogs/marketing-strategy-innovation/2007/01/the_phoenix_checklist.html">CIA Phoenix checklist</a><span> </span>of problem solving questions</li>
</ul>
<h4 style="font-size: 10pt;">Ideal solution</h4>
<div>Next, you should think about the ideal solution (even impossible). This will help you to direct your thoughts and focus on the gap between what is possible and what you want. (<a id="xs8g" style="color: #551a8b;" title="Ideal Final Result" href="http://www.mycoted.com/Ideal_Final_Result">Ideal Final Result</a>)</div>
<ul>
<li>Find<span> </span><strong>contradictions<span> </span></strong>that can be resolved -<span> </span><em>I want more money, but also want to work less</em> and impossible -<span> </span><em>I have to be in two places in the same time</em>. Use them as a creative stimulus to define an ideal solution.</li>
<li>Understand when you can stop, what is<span> </span><strong>good enough outcome</strong><span> </span>and how much time, energy and money you are willing to spend on resolving a problem</li>
<li>What are potential<span> </span><strong>harms and cost</strong><span> </span>of the solution?</li>
</ul>
<div>Now, we can move to the strategies</div>
<h3>Knowing</h3>
<div><em>&#8220;Good judgment comes from experience. Experience comes from bad judgment.&#8221;</em><span> </span>- Will Rogers</div>
<div><img class="alignnone" title="knowing" src="http://softwarecreation.org/images/2010/storyteller.jpg" alt="" width="179" height="200" /></div>
<div>The best option is when you know how to solve the problem and have practical experience. However Indians say that you can never enter the same river twice. Before repeating a solution think</div>
<ol>
<li>Is the situation same?</li>
<li>Should you improve or change something from your previous solution?</li>
<li>Can you come up with better alternatives?</li>
</ol>
<h3>Copying</h3>
<div><em>&#8220;The secret to creativity is knowing how to hide your sources.&#8221;</em> &#8211; Albert Einstein</div>
<div><img class="alignnone" title="copying" src="http://softwarecreation.org/images/2010/konica.jpg" alt="" width="200" height="194" /></div>
<div>Reinvention of wheel is not the best way to apply your energy. Copying of existing solution is one of the most effective options that taps into boundless experience of other people (sometimes learned hard way). However, think</div>
<ol>
<li>Can you trust sources? Do they provide full unbiased information?</li>
<li>Do you pay attention not only to glorious outcomes of the solution, but also to problems?</li>
<li>Can you use this solution for your specific problem, situation and abilities?</li>
</ol>
<h3>Logic</h3>
<div><em>&#8220;No problem can stand the assault of sustained thinking.&#8221; </em>- Voltaire</div>
<div><img class="alignnone" title="spock" src="http://softwarecreation.org/images/2010/spock.jpg" alt="" width="300" height="283" /></div>
<div><a id="mapi" title="Logical thinker" href="http://en.wikipedia.org/wiki/Logic">Logical thinker</a><span> </span>solves a problem by reasoning and following defined steps. Many problems can be successfully attacked by our rational brain, but not all. You can use following techniques.</div>
<p style="margin: 0px;"><strong>Reorganize </strong>-<span> </span><a id="vsqh" style="color: #551a8b;" title="break down" href="http://creatingminds.org/tools/breakdown.htm">break down</a><span> </span>the problem into elements or parameters and manipulate them. You can use<span> </span><a id="cs38" title="SCAMPER" href="http://creatingminds.org/tools/scamper.htm">SCAMPER</a> method defined by Bob Eberle. (Example:<em><span> </span>a problem with failing relationship)</em></p>
<ul>
<li>S -<span> </span><em><strong>Substitute<span> </span></strong></em>- components, materials, people
<ul>
<li><em>substitute something in your behavior or find another partner</em></li>
</ul>
</li>
<li>C -<span> </span><strong>Combine</strong><span> </span>- mix, combine with other assemblies or services, integrate
<ul>
<li><em>start doing some things together</em></li>
</ul>
</li>
<li>A -<span> </span><strong>Adapt<span> </span></strong>- alter, change function, use part of another element
<ul>
<li><em>change your home responsibilities</em></li>
</ul>
</li>
<li>M -<span> </span><strong>Modify<span> </span></strong>- increase or reduce in scale, change shape, modify attributes (e.g. colour)
<ul>
<li><em>communicate more often, change your tone</em></li>
</ul>
</li>
<li>P -<span> </span><strong>Put to another use</strong>
<ul>
<li><em>use your partner as a tennis or chess opponent, engage as an assistant in fishing</em></li>
</ul>
</li>
<li>E -<span> </span><strong>Eliminate<span> </span></strong>- remove elements, simplify, reduce to core functionality
<ul>
<li><em>separate or stop doing things that annoy your partner</em></li>
</ul>
</li>
<li>R -<span> </span><strong>Reverse<span> </span></strong>- turn inside out or upside down
<ul>
<li><em>say opposite to what you said before </em></li>
</ul>
</li>
</ul>
<div><strong>Abstract</strong> &#8211; solve a problem on an abstract level and apply to the specific problem to find a specific solution. (<a id="e6lo" style="color: #551a8b;" title="Abstraction" href="http://www.creativethinking.net/DT05_ToProduceSomethingCreative.htm?Entry=Good">Abstraction</a>) (Example: <em>Start your blog</em>)</div>
<ul>
<li><em>Think about a specific topic you want to cover. Find out how people start blogs in general, what works and what are common pitfalls. Apply to your topic and situation to grow successful blog.</em></li>
</ul>
<p><strong>Analyze Variations<span> </span></strong>(Example:<span> </span><em>Develop and promote new Content Management System</em>)</p>
<ol>
<li><strong>Parameters of a problem</strong><span> </span>- list variations, combine differently
<ul>
<li><em>cost, time, features, people, quality, vendors, etc; time vs features, in-house vs outsourcing, quality vs speed</em></li>
</ul>
</li>
<li><strong>Attributes list</strong><span> </span>- list attributes of the object (or problem) and try to improve them (<a id="zmih" style="color: #551a8b;" title="Attributes analysis" href="http://www.creativethinking.net/DT07_AttributeAnalysis.htm?Entry=Good">Attributes analysis</a>,<span> </span><a id="y_z5" style="color: #551a8b;" title="Morphological Analysis" href="http://www.mycoted.com/Morphological_Analysis">Morphological Analysis</a>)
<ul>
<li><em>architecture, design, performance, scalability, security, reusability, networking</em></li>
</ul>
</li>
<li><strong>Matrix<span> </span></strong>- create related keywords in main areas, mix and match keywords to form new ideas (<a id="horh" style="color: #551a8b;" title="Leonardo da Vinci Ideabox" href="http://www.creativethinking.net/DT08_DaVincisIdeabox.htm?Entry=Good">Leonardo da Vinci Ideabox</a>)
<ul>
<li><em>solutions (blog, company website, e-commerce, news, social connections), needs (inform, advertise, sell, support), markets (individuals, companies, non-profit, schools, small social groups), technologies (web, video, mobile, aggregation), services (hosting, installation, support, training). For example, what could be opportunity in combination: blog + inform + schools + video + hosting</em></li>
</ul>
</li>
</ol>
<p><strong>Change Context / Process / Forces<span> </span></strong>(Example: <em>Career advance</em>)</p>
<ol>
<li><strong>Force field analysis</strong><span> </span>- maximize positive forces, minimize negative (<a id="dtxm" style="color: #551a8b;" title="Force-Field Analysis" href="http://www.mycoted.com/Force-Field_Analysis">Force-Field Analysis</a>)
<ul>
<li><em>find how to use your strengths more and avoid negative impact of weaknesses</em></li>
</ul>
</li>
<li><strong>Substitute<span> </span></strong>rules, principles, people, places
<ul>
<li><em>change job responsibilities or job itself</em></li>
</ul>
</li>
<li><strong>Anti-action</strong><span> </span>- compensate harmful effect by specific action
<ul>
<li><em>minimize overtime or uninteresting work by changing how you accept your tasks</em></li>
</ul>
</li>
<li><strong>Preliminary action</strong><span> </span>- pre-arrange or change problem context in advance
<ul>
<li><em>build consensus with potential opponents before important meeting</em></li>
</ul>
</li>
<li><strong>Theory of Constraints<span> </span></strong>- find the worst bottleneck and improve until it is no longer a bottleneck, continue with the next bottleneck (<a id="ofx3" style="color: #551a8b;" title="Theory of Constraints" href="http://en.wikipedia.org/wiki/Theory_of_Constraints">Theory of Constraints</a>)
<ul>
<li><em>find what are limiting factors of your growth, work on reducing their impact and increase your abilities and potential</em></li>
</ul>
</li>
<li><strong>Eliminate waste</strong>
<ul>
<li><em>eliminate wasteful activities at work to boost your productivity</em></li>
</ul>
</li>
<li><strong>Lemonade from Lemons</strong><span> </span>- use waste or harmful effect to achieve a positive effect
<ul>
<li><em>learn from your mistakes and use them to improve and become better next time</em>. As Friedrich Nietzsche said:<span> </span><em>&#8220;What doesn&#8217;t kill us makes us stronger.&#8221;</em></li>
</ul>
</li>
<li><strong>Feedback<span> </span></strong>- introduce or increase feedback to improve action or process
<ul>
<li><em>seek for feedback and objective evaluation of your performance to advance faster by fixing your shortcomings</em></li>
</ul>
</li>
</ol>
<p><strong>Explore future scenarios</strong><span> </span>- project future scenarios to find unexpected opportunities (<a id="egmq" style="color: #551a8b;" title="Alternative Scenarios" href="http://www.mycoted.com/Alternative_Scenarios">Alternative Scenarios</a>) (Example:<span> </span><em>Deciding where to invest money</em>)<br />
<em>&#8220;The best way to predict the future is to invent it&#8221;</em> &#8211; Alan Kay</p>
<ol>
<li>Identify<strong><span> </span>forces </strong>
<ul>
<li><em>identify current economic forces and your personal situation</em></li>
</ul>
</li>
<li>Come up with 4-5<span> </span><strong>scenarios<span> </span></strong>- good and bad
<ul>
<li><em>what could happen in the future with both economic and you?</em></li>
</ul>
</li>
<li>Search big<span> </span><strong>opportunities<span> </span></strong>in each
<ul>
<li><em>find how you can benefit from investment in each of scenario</em></li>
</ul>
</li>
</ol>
<div><strong><a id="ppjs" style="color: #551a8b;" title="Absence thinking" href="http://creatingminds.org/tools/absense_thinking.htm">Absence thinking</a></strong><span> </span>- think about what is not there or you didn&#8217;t think before</div>
<h3>Lateral thinking (Creative Spark)</h3>
<p><img class="alignnone" title="both brains" src="http://softwarecreation.org/images/2010/both-brains.jpg" alt="" width="300" height="317" /></p>
<div><a id="tp6x" title="Lateral thinker" href="http://en.wikipedia.org/wiki/Lateral_thinking">Lateral thinker</a> abandons logic, use creative tools and changes concepts and perceptions</div>
<p><strong>Challenge assumptions</strong>, break away from obvious perspectives (<a id="rq2c" style="color: #551a8b;" title="Assumption Busting" href="http://creatingminds.org/tools/assumption_busting.htm">Assumption Busting</a>) (Example:<span> </span><em>Raising troubled teenager</em>)<br />
<em>&#8220;The significant problems we face cannot be solved at the same level of thinking we were at when we created them. &#8220;</em> &#8211; Albert Einstein</p>
<ol>
<li><strong>Expose and challenge</strong><span> </span>all assumptions
<ul>
<li><em>challenge your beliefs about role of a parent</em></li>
</ul>
</li>
<li><strong>Reverse problem<span> </span></strong>in some way<span> </span><a id="u3re" style="color: #551a8b;" title="(Reversal" href="http://creatingminds.org/tools/reversal.htm">(Reversal</a>)
<ul>
<li><em>praise for something you was punishing before</em></li>
</ul>
</li>
<li><strong>Paradox<span> </span></strong>- opposites exist simultaneously (<a id="o2u1" style="color: #551a8b;" title="True and False" href="http://www.creativethinking.net/DT13_TrueAndFalse.htm?Entry=Good">True and False</a>)
<ul>
<li><em>accept that you and your teenager are both right about controversial topic. Try to negotiate from this position</em></li>
</ul>
</li>
<li><strong>Provocation </strong>- wishful thinking, thought experiments
<ul>
<li><em>unleash your imagination, go for crazy ideas about solving a problem</em></li>
</ul>
</li>
<li><strong>Changing viewpoint</strong><span> </span>- think from different perspective (<a id="sgno" style="color: #551a8b;" title="Six hats)" href="http://creatingminds.org/tools/six_hats.htm">Six hats)</a>
<ul>
<li><em>imagine that you are a bird or live in another time. How would you resolve your relations with kid?</em></li>
</ul>
</li>
<li>Finally,<span> </span><strong>challenge any part</strong><span> </span>of the problem &#8211; ask why for anything</li>
</ol>
<p><strong>Force Associations</strong><span> </span>(Example:<span> </span><em>Starting your own software business</em>)<br />
<em>&#8220;Creativity is the power to connect the seemingly unconnected&#8221;</em> &#8211; William Plomer</p>
<ol>
<li><strong>Random keywords</strong><span> </span>- select any word from dictionary and try to connect to your problem  (<a id="cjc5" style="color: #551a8b;" title="Random Words" href="http://creatingminds.org/tools/random_words.htm">Random Words</a>)
<ul>
<li><em>For example, how a tree can be related to your new business?</em></li>
</ul>
</li>
<li><strong>Words of great thinkers</strong><span> </span>- use their quotes and wisdom to associate with a problem.
<ul>
<li>
<div><em>For example, how can Oscar Wilde&#8217;s quote: &#8220;Be yourself; everyone else is already taken&#8221; helps with business ideas? </em></div>
</li>
</ul>
</li>
<li><strong>Free associating with common attributes<span> </span></strong>- select 12 attributes, choose random 2, consider separating and combined (<a id="gc4j" style="color: #551a8b;" title="Combinatory Play" href="http://www.creativethinking.net/DT10_CombinatoryPlay.htm?Entry=Good">Combinatory Play</a>)
<ul>
<li><em>break down into areas &#8211; finances, sales, development, clients, technology, usability, etc. Start pairing randomly</em></li>
</ul>
</li>
<li><strong>Metaphors</strong><span> </span>- similarities and connections of your problem with other distant area
<ul>
<li><em>How analogies of railroad or tropical forest can help with business idea</em></li>
</ul>
</li>
<li><strong>Hieroglyphs </strong>- use Egyptian hieroglyphs to associate with your problem
<ul>
<li><em>arrange randomly <a id="e5-q" style="color: #551a8b;" title="hieroglyphs" href="http://www.greatscott.com/hiero/">hieroglyphs</a> from <a id="afp4" style="color: #551a8b;" title="The Book of Dead" href="http://en.wikipedia.org/wiki/Book_of_the_Dead">The Book of Dead</a> to find clues for creating business</em></li>
</ul>
</li>
</ol>
<p><strong>Visual clues</strong><span> </span>(Example:<span> </span><em>Designing web user interface for the new complex domain</em>)</p>
<ol>
<li><strong>Diagram</strong> to explore, organize and analyze (<a id="h8ov" style="color: #551a8b;" title="Lotus Blossom" href="http://www.creativethinking.net/DT06_LotusBlossomApproach.htm?Entry=Good">Lotus Blossom</a>,<span> </span><a id="hqcb" style="color: #551a8b;" title="Mind Map" href="http://en.wikipedia.org/wiki/Mind_map">Mind Map</a>,<span> </span><a id="f:t0" style="color: #551a8b;" title="Concept Fan" href="http://www.mindtools.com/pages/article/newCT_06.htm">Concept Fan</a>)
<ol>
<li>Explore &#8211; search for new areas that can be related to the problem</li>
<li>Organize &#8211; put together as one picture what you know about the problem</li>
<li>Analyze &#8211; go deep into a problem to find missing details and relations</li>
</ol>
<ul>
<li><em>Draw these 3 types of diagram for web site and business domain: put web site purpose in the center, start drawing branches for big ideas and aspects, branch for smaller and so on<br />
</em></li>
</ul>
</li>
<li><strong>Draw and link abstract symbols</strong><span> </span>for attributes
<ul>
<li><em>create symbols for web patterns and business concepts, shuffle and find ideas in random associations</em></li>
</ul>
</li>
<li><strong>Drawing<span> </span></strong>- draw anything that can be related to your problem;<span> </span><span style="font-family: verdana,arial,helvetica,sans-serif;">lets your subconscious drive your hand</span> (<a id="fg1d" title="Doodling" href="http://creatingminds.org/tools/doodling.htm">Doodling</a>)
<ul>
<li><em>just draw any screen ideas</em></li>
</ul>
</li>
</ol>
<h3>Psychological tools</h3>
<p style="margin: 0px;"><em>&#8220;Everything you can imagine is real.&#8221;</em> &#8211; Pablo Picasso</p>
<p style="margin: 0px;"><img class="alignnone" title="dreamcatcher" src="http://softwarecreation.org/images/2010/dreamcatcher.gif" alt="" width="300" height="450" /></p>
<p style="margin: 0px;">
<p style="margin: 0px;">Use intuition and subconscious to find answers. Our subconscious is a large scene where conscious thought is a <a id="s:8-" style="color: #551a8b;" title="spotlight." href="http://www.newscientist.com/article/mg20627541.900-picking-our-brains-how-powerful-is-the-subconscious.html">spotlight.</a><span> </span>Try to elicit ideas from these dark corners of the most powerful part of your mind. <em><span style="font-style: normal;">(Example:<span> </span></span>Finding new kicking-ass website idea<span style="font-style: normal;">)</span></em></p>
<ol>
<li><strong>Intuition<span> </span></strong>- ask and listen to your intuition
<ul>
<li><em>come up with website ideas without thinking</em></li>
</ul>
</li>
<li><strong><a id="pflp" style="color: #551a8b;" title="Incubation" href="http://creatingminds.org/tools/incubation.htm">Incubation</a></strong><span> </span>- best ideas come than you don&#8217;t expect them, just don&#8217;t miss them
<ul>
<li><em>deeply dig into a problem, put into your mind and forget, and probably soon you will jump from the bath and run to the street screaming &#8216;eureka!&#8217;</em></li>
</ul>
</li>
<li><strong>Fantasies<span> </span></strong>- unleash unreal or crazy questions, suspend judgment and answer them (<a id="hk:5" style="color: #551a8b;" title="Crazy Ideas" href="http://www.creativethinking.net/DT03_IsYourIdeaCrazyEnough.htm?Entry=Good">Crazy Ideas</a>)
<ul>
<li><em>what if you build site for aliens? now you can think about usability for complete dummies, space design, navigation as a star system, etc.</em></li>
</ul>
</li>
<li><strong>Dreaming<span> </span></strong>- capture ideas from dreams
<ul>
<li><em>set questions before you sleep, try to recover answers from dreams immediately after you wake up</em></li>
</ul>
</li>
<li><strong>Drink beer</strong><span> </span>- to slip into different mind state. I don&#8217;t suggest becoming drunk or use  something stronger or illegal :)
<ul>
<li><em>drink and start thinking about website, don&#8217;t foget to record your thoughts early enough :)</em></li>
</ul>
</li>
<li><strong>Surrealistic images</strong><span> </span>- find association of hypnogogic imagery with your challenges
<ul>
<li><em>relax, quiet mind and eyes, become almost unconscious- record experiences immediately after they occur</em></li>
</ul>
</li>
<li><strong>Guided imaginary scenarios</strong><span> </span>to find ideas in unexpected places (<a id="w9d2" style="color: #551a8b;" title="Imaginary Excursion" href="http://www.creativethinking.net/DT09_ImaginaryExcursion.htm?Entry=Good">Imaginary Excursion</a>)
<ul>
<li><em>choose scenario (e.g. going to camp and lost in the forest) and while you experience the journey in the head, search for clues </em></li>
</ul>
</li>
<li><strong>Psychosynthesis<span> </span></strong>- spiritual advisers (<a id="e:x1" style="color: #551a8b;" title="Role-playing" href="http://creatingminds.org/tools/role_play.htm">Role-playing</a>)
<ul>
<li><em>invite Bill Gates, Sigmund Freud or Karl Marx to talk with you inside your head about the kicking-ass website</em></li>
</ul>
</li>
<li><strong>Streaming</strong> <em>- </em>writing out what is in your mind to associate later with the problem
<ul>
<li><em>hide in a comfortable place and start writing &#8211; smart thoughts or gibberish. Find how it could be related to the new website later.</em></li>
</ul>
</li>
</ol>
<h3>Dialogue</h3>
<div><em>&#8220;Adults are always asking little kids what they want to be when they grow up because they&#8217;re looking for ideas”</em><span> </span>- Paula Poundstone</div>
<div><img class="alignnone" title="dialogue" src="http://softwarecreation.org/images/2010/dialogue.jpg" alt="" width="350" height="256" /></div>
<div>Surprisingly, most people think differently than you and can introduce many novel ideas and solutions (Example:<span> </span><em>Plan dream vacation</em>)</div>
<div>
<ol>
<li><strong>Talk with strangers</strong>
<ul>
<li><em>ask about vacation ideas people you don&#8217;t communicate often and you&#8217;ll get plenty of new ideas</em></li>
</ul>
</li>
<li><strong>Brainstorming</strong><span> </span>- exchange ideas and suggestions without judgment, evaluate and revise ideas later (<a id="rxok" style="color: #551a8b;" title="KJ Brainstorming" href="http://www.creativethinking.net/DT15_KJBrainstorming.htm?Entry=Good">KJ Brainstorming</a>)
<ul>
<li><em>ask group of people to generate as many as possible vacation ideas without discussion</em></li>
</ul>
</li>
<li><strong>Brainwriting<span> </span></strong>- parallel generation of ideas in silence (index cards); exchange and develop each other ideas in turn (<a id="lyhg" style="color: #551a8b;" title="Brainwriting" href="http://www.creativethinking.net/DT14_Brainwriting.htm?Entry=Good">Brainwriting</a>)
<ul>
<li><em>everybody in group writes vacation idea on card, give to the next in circle who continue refining this idea</em></li>
</ul>
</li>
<li><strong>Survey<span> </span></strong>- collect ideas from large group of people (<span style="font-family: verdana,arial,helvetica,sans-serif;"><span style="font-size: x-small;"><a id="c7fk" title="Crawford Slip Method" href="http://creatingminds.org/tools/crawford.htm">Crawford Slip Method</a>,<span> </span><a id="i4mr" title="Delphi method" href="http://creatingminds.org/tools/delphi.htm">Delphi method</a></span></span>)
<ul>
<li><em>post survey (e.g. Facebook or </em><a style="color: #551a8b;" href="http://www.surveymonkey.com/"><em>surveymonkey.com</em></a><em>) for vacation ideas</em></li>
</ul>
</li>
<li><strong>Storyboarding<span> </span></strong>- put ideas on the wall as a group works out problems
<ul>
<li><em>post vacation ideas on the wall and let anybody to contribute (add or extend idea)</em></li>
</ul>
</li>
<li><em><strong><span style="font-style: normal;">Socratic dialogue -</span></strong><span style="font-style: normal;"> have a conversation with a smart person and probe various dimensions of thinking: purpose, evidence, reasons, data, claims, beliefs, interpretations, deductions, conclusions, the implications and consequences of thought, response to alternative thinking from contrasting points of view, and so on.</span><br />
</em></li>
</ol>
<h3>Trials and Errors</h3>
<div><span style="font-size: small;"><strong><img class="alignnone" title="Edison" src="http://softwarecreation.org/images/2010/edison.jpg" alt="" width="300" height="399" /><br />
</strong></span></div>
<p>Solving a problem by trial and error is an expensive, but reliable way to find a solution. In science it called<span> </span><a id="qutk" style="color: #551a8b;" title="scientific method" href="http://en.wikipedia.org/wiki/Scientific_method">scientific method</a>. Most scientific discoveries are done using this method. (Example:<span> </span><em>Becoming happy</em>)</p>
<ol>
<li><strong>Ask a Question</strong>
<ul>
<li><em>form a problem statement &#8211; what is happiness for you?</em></li>
</ul>
</li>
<li><strong>Do Background Research</strong>
<ul>
<li><em>learn what other people think about happiness</em></li>
</ul>
</li>
<li><strong>Construct a Hypothesis</strong>
<ul>
<li><em>what could make you happy?</em></li>
</ul>
</li>
<li><strong>Test Your Hypothesis by Doing an Experiment</strong>
<ul>
<li><em>try your ideas in practice</em></li>
</ul>
</li>
<li><strong>Analyze Your Data and Draw a Conclusion</strong>
<ul>
<li><em>are you happy now? should you change a hypothesis and start again?<br />
</em></li>
</ul>
</li>
<li><strong>Communicate Your Results</strong>
<ul>
<li><em>share your results &#8211; help other people to become happier</em></li>
</ul>
</li>
</ol>
<h3>Summary</h3>
<div>Your life success depends on your ability to choose right problems and solve them. Do not give up or settle for an ineffective solution. Use the power of your mind to creatively solve problems the best way possible. Control your life.</div>
<div><em>&#8220;He is able who thinks he is able&#8221;</em> -Buddha</p>
<h3>References</h3>
<ul>
<li><a title="Thinkertoys: a handbook of creative-thinking techniques" href="http://www.amazon.com/gp/product/1580087736?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1580087736">Thinkertoys: a handbook of creative-thinking techniques</a>, Michael Michalko</li>
<li><a id="ujso" style="color: #551a8b;" title="http://www.mycoted.com/Category:Creativity_Techniques" href="http://www.mycoted.com/Category:Creativity_Techniques">http://www.mycoted.com/Category:Creativity_Techniques</a></li>
<li><a href="http://creatingminds.org/">http://creatingminds.org/</a></li>
<li><a title="http://www.mindtools.com/pages/main/newMN_CT.htm" href="http://www.mindtools.com/pages/main/newMN_CT.htm">http://www.mindtools.com/pages/main/newMN_CT.htm</a></li>
<li><a href="http://www.creativethinking.net/WP03_Techniques.htm">http://www.creativethinking.net/WP03_Techniques.htm</a></li>
</ul>
</div>
</div>
<!-- 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=144&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2010/how-to-become-an-expert-creative-problem-solving/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>How to Become an Expert: Creativity</title>
		<link>http://softwarecreation.org/2010/how-to-become-an-expert-creativity/</link>
		<comments>http://softwarecreation.org/2010/how-to-become-an-expert-creativity/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 04:20:08 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Expertise]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=122</guid>
		<description><![CDATA[Sharecre·a·tiv·i·ty -the ability to transcend traditional ideas, rules, patterns, relationships, or the like, and to create meaningful new ideas, forms, methods, interpretations

Creativity can be developed and improved. Here is my Theory of Creativity in 3 parts

Prepared Mind &#8211; prepare your mind to be creative
Right challenges &#8211; know what challenges you should embrace now
Creative ideas &#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/2010/how-to-become-an-expert-creativity/&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/2010/how-to-become-an-expert-creativity/' 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/2010/how-to-become-an-expert-creativity/'></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/2010/how-to-become-an-expert-creativity/'></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/2010/how-to-become-an-expert-creativity/&amp;title=How+to+Become+an+Expert%3A+Creativity&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><span style="font-family: verdana,arial,helvetica,sans-serif;"><span style="color: #333333;"><strong>cre·a·tiv·i·ty -</strong><em>the ability to transcend traditional ideas, rules, patterns, relationships, or the like, and to create meaningful new ideas, forms, methods, interpretations</em></span></span></p>
<p><img class="alignnone" title="Vladimir Kush" src="http://softwarecreation.org/images/2010/windmills.jpg" alt="" /></p>
<p>Creativity can be developed and improved. Here is my Theory of Creativity in 3 parts</p>
<ol>
<li><strong>Prepared Mind</strong> &#8211; prepare your mind to be creative</li>
<li><strong>Right challenges</strong> &#8211; know what challenges you should embrace now</li>
<li><strong>Creative ideas</strong> &#8211; use powerful techniques to get new ideas</li>
</ol>
<h3>I. Prepared Mind</h3>
<div>Your mind is the main tool for generating ideas. Empty, timid and rigid mind will not produce successful ideas.</div>
<p>What should be the qualities of the mind to get great ideas and solve complex problems?</p>
<ol>
<li><strong>Knowledgeable </strong>- know problem domain and other fields that can inspire new ideas</li>
<li><strong>Flexible </strong>- able to vary and adapt the ways of thinking</li>
<li><strong>Forceful </strong>- eager and resolute to find a solution</li>
<li><strong>Easy </strong>- clear and free from stress and fear</li>
<li><strong>Playful </strong>- can surprise and break rules</li>
<li><strong>Intuitive </strong>- come up with ideas without thinking and reasoning</li>
</ol>
<div>How can you develop these qualities and prepare your mind to be creative?</div>
<div><span id="more-122"></span></div>
<h4>1. Feed Head &#8211; make mind knowledgeable</h4>
<div><em>&#8220;If you want to make an apple pie from scratch, you must first create the universe.&#8221;</em> &#8211; Carl Sagan</div>
<p><em> </em>Organize regular information channels for delivering intellectual food for your head and push your mind outside of familiar boundaries.</p>
<p><strong>Build optimal flow of information in areas of your interests </strong></p>
<ul>
<li>Subscribe to blogs, magazines, podcasts, rss, twitter, etc.
<ul>
<li>Balance <strong>broad </strong>(e.g. <a id="fgdm" title="techcrunch.com" href="http://techcrunch.com/">techcrunch.com</a>, <a id="hmvu" title="digg.com" href="http://digg.com/">digg.com</a>) and <strong>deep </strong>sources (specialized sites or thought leaders blogs).</li>
<li>Group online sources (rss, blogs, twitter) based on <strong>frequency </strong>of updates and <strong>value </strong>to avoid missing valuable posts in the pile of shallow news.</li>
<li>Periodically review existing sources and re-arrange or remove them to keep the feed optimal for your current needs</li>
</ul>
</li>
</ul>
<ul>
<li>Scan for new books, blogs and articles
<ul>
<li>amazon.com is the best site to find great new books</li>
<li>Collect references and mentions from trusted sources</li>
<li>Use sites like <a id="wu9s" title="www.stumbleupon.com" href="http://www.stumbleupon.com/">www.stumbleupon.com</a> to discover new blogs and articles</li>
</ul>
</li>
</ul>
<p><strong><br />
Probe other fields</strong> &#8211; regularly try new fields for potentially useful information, interesting ideas and new perspectives.<br />
<em><br />
<span style="font-style: normal;">Start with general fields &#8211; history, art, economy, philosophy, management, psychology, physics, engineering and many others. Dig deeper if you find the field interesting.</span><br />
</em></p>
<ul>
<li>Subscribe to magazine and websites with interesting articles in wide range of fields targeted for general audience (e.g. <a id="s8lo" title="New Scientist" href="http://www.newscientist.com/">New Scientist</a> for science fields)</li>
<li>Search for highly ranked sources that are interesting and deliver good overview of the selected field.</li>
<li>Again, amazon.com and Google search are good starting points</li>
<li>Connect new information to your field &#8211; approaches, concepts, problems, solutions</li>
</ul>
<p><strong>Content analysis</strong> &#8211; keep your hand on pulse of your society and industry &#8211; general trends, key events, statistics, buzzes, news. All this information can be a valuable source for understanding present and future.</p>
<p><strong>Take notes</strong> &#8211; write down facts, thoughts and problems that can give rise to the new ideas, solutions or topics for future investigation</p>
<ul>
<li>Find good tools to capture your thoughts &#8211; otherwise you can lose great thoughts and ideas forever</li>
<li>Maintain Brainbank &#8211; collection of idea starters (undeveloped idea briefs) for specific topics in designated virtual or physical folders</li>
</ul>
<h4>2. Prime Your Mind &#8211; make it flexible</h4>
<p><em>&#8220;The mind is everything. What you think you become.&#8221;</em> &#8211; Buddha <em> </em></p>
<p><em> </em>Train mind to be creative, flexible and open to the world. Do not allow to stale &#8211; shake and exercise it every day with</p>
<ul>
<li><strong>daily idea quote</strong> &#8211; come up with few ideas every day for any aspect of your professional, public or private life.</li>
<li><strong>routines </strong>- change what you do and how you do from time to time</li>
<li><strong>experiences</strong> &#8211; strive for new experiences &#8211; travel, engage in the new activities, meet new people and attend new events</li>
<li><strong>thinking techniques</strong> &#8211; improve how you think, always look for new approaches</li>
</ul>
<h4>3. Explorer&#8217;s Drive (Energy, Courage, Self-Belief) &#8211; make mind forceful</h4>
<p><em>&#8220;The wind and the waves are always on the side of the ablest navigators.&#8221; <span style="font-style: normal;">- Edward Gibbon</span><br />
</em></p>
<div>Eager, brave and energetic mind can tackle any challenge and overcome any difficulty. A human without this explorer&#8217;s drive is passive bystander following beaten paths. This person will not be creative.</div>
<div>Believe in yourself. Remove psychological and physical barriers to be creative. It is a complex topic how to overcome these barriers and develop a strong inner self. You can find many recommendations &#8211; raising self-esteem, finding meaning in life, positive thinking, improving health and lifestyle, diet, physical exercises and <a id="ach7" title="fulfilling daily activities" href="../2008/the-happiness-programmers-edition/">fulfilling daily activities</a> and so on. Whatever it takes, but make an effort to ignite the drive, if you miss it.</div>
<div>You should believe in three things:</div>
<ul>
<li>better ideas exist</li>
<li>you will find them</li>
<li>you can make mistakes</li>
</ul>
<div>Explorers often fail, but you will fail for sure if you don&#8217;t try and don&#8217;t believe in yourself.</div>
<h4>4. Clear Mind &#8211; make it easy</h4>
<div><em>&#8220;The time to relax is when you don&#8217;t have time for it.&#8221;</em> &#8211; Jim Goodwin</div>
<div>Anxious, overwhelmed and stressed mind will not cooperate well. Meditate, relax and slow down sometimes to make your mind ready to be creative.</div>
<h4>5. Fun, Play, Being a Child &#8211; make your mind playful</h4>
<p><em>&#8220;All children are artists. The problem is how to remain an artist once he grows up.&#8221;</em> &#8211; Pablo Picasso</p>
<div>A normal adult becomes more serious and conservative with age that incur heavy cost &#8211; decreasing ability to find surprising and groundbreaking ideas.</div>
<p>Try to</p>
<ul>
<li>have fun, play</li>
<li>forget dogmas, break rules</li>
<li>be curious and spontaneous</li>
<li>be silly and illogical</li>
</ul>
<p>Encourage your inner child and don&#8217;t let him to grow up :)</p>
<h4>6. Train gut feeling &#8211; make mind intuitive</h4>
<div><em>&#8220;It is through science that we prove, but through intuition that we discover.&#8221;</em> &#8211; Jules H. Poincare</div>
<div>Our subconscious mind is much more powerful than linear conscious mind and in the same time it is much more difficult to control. The greatest thinkers know how to use both minds. In essence, gut feeling is your internalized experience, a form of pattern recognition and the way to communicate with subconsciousness. It can be <a id="cb7r" title="encouraged" href="http://www.cyc-net.org/features/ft-gutfeeling.html">encouraged</a> and <a id="qp_q" title="trained" href="http://www.ehow.com/how_2060669_develop-intuition.html">trained</a>.</div>
<div>Every time you have problem try to come up with ideas and solutions without thinking. Good intuition enable you to</div>
<ul>
<li>know how to attack the problem without know how you know</li>
<li>relate problems in one field to unrelated another field</li>
<li>recognize the crux of the problem</li>
<li>see general solution to the problem</li>
<li>recognize solution because it feels right</li>
</ul>
<p>(by George Turin, of the University of California)</p>
<h3>II. Right Challenges</h3>
<p><em>&#8220;He who knows when he can fight and when he cannot will be victorious&#8221; -</em> Sun Tzu</p>
<p>And still, creative person with prepared mind can waste talent and energy on solving irrelevant problems. You should focus on the most important problems instead of stretching yourself to fight any challenge.</p>
<ul>
<li>Select few important battles that you can win instead of squandering your energy in useless fights.</li>
<li>Actively prioritize, select or reject your outstanding challenges.</li>
<li>Select challenges that you are ready to accept and come up with ideas and solutions.</li>
<li>Focus and work the challenge</li>
</ul>
<h4>1. Know your problems</h4>
<div><em>&#8220;You won&#8217;t find a solution by saying there is no problem.&#8221;</em> &#8211; William Rotsler</p>
<p>Monitor your life, inquire your situation and make your problems explicit. Solving right problems in the right time is the best way to apply your creativity and improve your life.</p></div>
<p>Regularly,</p>
<ul>
<li><strong>keep the journal of interesting problems</strong> &#8211; problems you want to solve</li>
<li><strong>see waste</strong> &#8211; useless activities and commitments in your life. Streamline your life to have more time for important stuff.</li>
<li><strong>measure key parameters of your life</strong> &#8211; health, happiness, career, achievements, wealth. Small changes that you barely notice could lead to serious future problems.</li>
<li><strong>go and see</strong> (<a id="xf9i" title="Genchi Genbutsu" href="http://en.wikipedia.org/wiki/Genchi_Genbutsu">Genchi Genbutsu</a>) &#8211; if you feel that something is wrong, do not hide, but understand and face the challenge</li>
<li><strong>ask 5 whys</strong> (<a id="e9dp" title="Kaizen" href="http://en.wikipedia.org/wiki/Kaizen">Kaizen</a>) &#8211; find root causes of your problems. Do not discard problems as impossible to solve &#8211; convert into challenges and opportunities for making your life better.</li>
</ul>
<p>(the list is inspired by <a id="r7gs" title="Toyota Production System" href="../2009/how-to-rescue-failing-software-projects-toyota-way/">Toyota Production System</a>)</p>
<h4>2. Accept challenge</h4>
<p><em>&#8220;Even if you&#8217;re on the right track, you&#8217;ll get run over if you just sit there.&#8221; - <span style="font-style: normal;">Will Rogers</span></em></p>
<p>The last step before working on the challenge is to <strong>accept it</strong>. We have so many distraction in our life, we procrastinate and keep postponing actions. You have to make a serious deal with yourself to succeed with challenges. Accept the challenge means to commit yourself to work on it. Period. Commit, focus and work the problem, otherwise your attempts will be in vain.</p>
<h3>Questions to assess your mind preparation</h3>
<ol>
<li>Do I have good sources of information and adequate knowledge?</li>
<li>Do I have broad perspective of various fields?</li>
<li>Am I flexible and open-minded?</li>
<li>Do I have drive, energy and courage to embrace challenges?</li>
<li>Is my mind clear and relaxed?</li>
<li>Am I playful, curious and free of dogmas?</li>
<li>Does my intuition work well?</li>
<li>Do I know my challenges?</li>
<li>Do I accept them?</li>
</ol>
<h3>Action Plan</h3>
<table id="xhs4" border="1" cellspacing="0" cellpadding="3" width="100%" bordercolor="#000000">
<tbody>
<tr>
<td style="background-color: #000000; color: #ffffff; text-align: center;" width="25%"><strong><br />
</strong></td>
<td style="background-color: #000000; color: #ffffff; text-align: center;" width="25%"><strong>Daily</strong></td>
<td style="background-color: #000000; color: #ffffff; text-align: center;" width="25%"><strong>Weekly</strong></td>
<td style="background-color: #000000; color: #ffffff; text-align: center;" width="25%"><strong>Monthly</strong></td>
</tr>
<tr>
<td style="background-color: #eeeeee;" width="25%"><strong>Feed Brains</strong>: blogs, twitter, websites, rss, podcasts, books, magazines, audio, video</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>read</li>
<li>think</li>
<li>take notes</li>
</ul>
</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>scan for new information sources</li>
<li>rearrange or remove sources to keep them optimal</li>
<li>plan learning for the week</li>
<li>content analysis &#8211; news, events, buzzes</li>
</ul>
</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>select a new general field for learning: get overall picture, find top ranked sources, add to learning plan</li>
<li>set and evaluate strategic learning goals and plans</li>
<li>analyse industry trends and statistics</li>
</ul>
</td>
</tr>
<tr>
<td style="background-color: #cccccc;" width="25%"><strong>Prime mind</strong></td>
<td style="background-color: #cccccc;" width="25%">
<ul>
<li>generate 5 ideas daily</li>
<li>change routines</li>
</ul>
</td>
<td style="background-color: #cccccc;" width="25%">
<ul>
<li>meet new people</li>
<li>look for new experiences</li>
</ul>
</td>
<td style="background-color: #cccccc;" width="25%">
<ul>
<li>learn new thinking techniques and improve existing</li>
<li>travel, visit new places</li>
</ul>
</td>
</tr>
<tr>
<td style="background-color: #eeeeee;" width="25%"><strong>Clear mind</strong></td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>meditate</li>
</ul>
</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>connect to nature</li>
<li>do what you like</li>
</ul>
</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>retreat and rest</li>
</ul>
</td>
</tr>
<tr style="background-color: #cccccc;">
<td width="25%"><strong>Boost driv</strong>e &#8211; energy, courage and self-believe</td>
<td width="25%">
<ul>
<li>diet</li>
<li>physical exercises</li>
<li>fulfilling activities</li>
</ul>
</td>
<td width="25%">
<ul>
<li>praise your achievements, work on weaknesses</li>
</ul>
</td>
<td width="25%">
<ul>
<li>find meaning in the life</li>
</ul>
</td>
</tr>
<tr>
<td style="background-color: #eeeeee;" width="25%"><strong>Have fun, play</strong></td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>laugh, play and don&#8217;t miss any opportunity to have fun</li>
</ul>
</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>have fun, do stupid things (within crime code and human norms :))</li>
</ul>
</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>have a lot of fun :)</li>
</ul>
</td>
</tr>
<tr>
<td style="background-color: #cccccc;" width="25%"><strong>Train intuition</strong></td>
<td style="background-color: #cccccc;" width="25%">
<ul>
<li>come up with ideas without thinking</li>
</ul>
</td>
<td style="background-color: #cccccc;" width="25%">
<ul>
<li>sharpen gut feeling &#8211; evaluate success of your intuitive ideas</li>
</ul>
</td>
<td style="background-color: #cccccc;" width="25%">
<ul>
<li>spend time understanding your inner-self</li>
</ul>
</td>
</tr>
<tr>
<td style="background-color: #eeeeee;" width="25%"><strong>Know your problems and work on them</strong></td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>log problems</li>
<li>work on accepted challenges</li>
</ul>
</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>monitor life parameters</li>
<li>Kaizen &#8211; ask 5 whys, find root causes</li>
<li>streamline and remove waste from your life</li>
</ul>
</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>Long-term planning and life review</li>
<li>Convert problems into opportunities</li>
<li>Accept or reject challenges</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>If your mind is prepared, you are ready to use your creativity for solving challenges. The next post will equip you with powerful techniques for getting new ideas.</p>
<h4>Resources</h4>
<p><a id="e5ix" title="Thinkertoys: a handbook of creative-thinking techniques" href="http://www.amazon.com/gp/product/1580087736?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1580087736">Thinkertoys: a handbook of creative-thinking techniques</a>, Michael Michalko<br />
<a id="o-le" title="How to get ideas" href="http://www.amazon.com/gp/product/1576754308?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1576754308">How to get ideas</a>, Jack Foster</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=122&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2010/how-to-become-an-expert-creativity/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to Become an Expert: Making Ideas Stick</title>
		<link>http://softwarecreation.org/2010/how-to-become-an-expert-making-ideas-stick/</link>
		<comments>http://softwarecreation.org/2010/how-to-become-an-expert-making-ideas-stick/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 03:49:05 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Expertise]]></category>
		<category><![CDATA[Job]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=106</guid>
		<description><![CDATA[ShareAre ideas born interesting or made interesting? &#8211; Chip &#38; Dan Heath

angelderoca
You have 2 options to communicate your ideas:


Tell people what is interesting for you &#8211; easy, but unfortunately, your ideas will be wasted because of other people low interest, incomplete knowledge or disagreement.
Make your ideas interesting for other people &#8211; hard, but you have [...]]]></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/2010/how-to-become-an-expert-making-ideas-stick/&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/2010/how-to-become-an-expert-making-ideas-stick/' 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/2010/how-to-become-an-expert-making-ideas-stick/'></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/2010/how-to-become-an-expert-making-ideas-stick/'></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/2010/how-to-become-an-expert-making-ideas-stick/&amp;title=How+to+Become+an+Expert%3A+Making+Ideas+Stick&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><div style="margin-top: 10px; margin-bottom: 10px;"><em>Are ideas born interesting or made interesting?</em> &#8211; Chip &amp; Dan Heath</div>
<div><span style="font-weight: normal; font-size: 13px; "><img class="alignnone" title="ideas" src="http://softwarecreation.org/images/2010/apple-snake.jpg" alt="" width="500" height="429" /></span></div>
<div><a class="photocredit" href="http://www.flickr.com/photos/angelderoca/3998624908/">angelderoca</a></div>
<p>You have 2 options to communicate your ideas:</p>
<div>
<ol>
<li>Tell people what is interesting <strong>for you</strong> &#8211; easy, but unfortunately, your ideas will be wasted because of other people low interest, incomplete knowledge or disagreement.</li>
<li>Make your ideas interesting <strong>for other people</strong> &#8211; hard, but you have chances that other people will pay attention, understand, remember and act upon your ideas.</li>
</ol>
</div>
<div>This post is devoted to people who are interested in the second option.</div>
<p><strong>Why should a programmer care about communicating ideas to other people?</strong></p>
<p>It is true, the primary job of a programmer is to feed computers with ideas. But you cannot quietly hide behind a computer forever. You have to deal with other people:</p>
<div>
<ul>
<li>team &#8211; to contribute and explain your programming ideas</li>
<li>customers &#8211; to discuss and build trust in your solutions</li>
<li>end-users &#8211; to make your programming ideas useful for users</li>
<li>programmers of the world &#8211; to share your knowledge and exchange ideas</li>
<li>capitalists &#8211; to sell your ideas</li>
</ul>
<ul>
<li>low tech crowd &#8211; to promote technology ideas</li>
</ul>
<p><strong>Why is it so hard to make ideas interesting for other people?</strong></p>
<ol>
<li><a id="f62:" style="color: #551a8b;" title="Curse of knowledge" href="http://37signals.com/svn/posts/213-the-curse-of-knowledge">Curse of knowledge</a> &#8211; once you know something, it is hard to imagine not knowing it and communicate to novices</li>
<li><a id="nwtu" style="color: #551a8b;" title="Resistance" href="http://changingminds.org/disciplines/change_management/resistance_change/rationale_resistance.htm">Resistance</a> &#8211; many people ignore or resist new ideas</li>
<li>Limited brains &#8211; people have short <a id="edk2" style="color: #551a8b;" title="attention span" href="http://en.wikipedia.org/wiki/Attention_span">attention span</a> and can be easily overwhelmed by new and complex information</li>
</ol>
<p><span id="more-106"></span></p>
<p>The turning point in my professional life was Kent Beck&#8217;s book &#8211; <a id="tr45" title="Extreme Programming Explained" href="http://www.amazon.com/gp/product/0321278658?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0321278658">Extreme Programming Explained</a>. Kent Beck made me think beyond technical aspects of software development. In addition to algorithms, computer languages and technologies, I started to realize very important factors &#8211; simplicity, feedback, business value and people interactions. Kent Beck influenced not only me, but millions of programmers by introducing Agile approach (Extreme Programming), iterations, user stories, refactoring, unit testing, pair programming, continuous integration and other practices. Kent transformed new and existing ideas into the form that made them widely accepted and used by almost any professional programming team now. Kent Beck knows how to make his ideas <a id="xoei" title="sticky" href="http://www.amazon.com/gp/product/1400064287?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1400064287">sticky</a>.</div>
<div>
<h3>Principles of Stickiness</h3>
<p>Chip and Dave Heath defined 6 principles of sticky ideas in the book <a  title="Made to Stick" href="http://www.amazon.com/gp/product/1400064287?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1400064287">Made to Stick</a>: Simple Unexpected Concrete Credible Emotional Stories (SUCCESs).</p>
<h4>Simple</h4>
<div>
<p><img style="width: 240px; height: 180px;" src="http://softwarecreation.org/images/2010/Inukshuk.jpg" alt="" width="240" height="180" /><br />
<a class="photocredit" href="http://www.flickr.com/photos/manning999/2165379782/">manning999</a></p>
</div>
<p>Usually people will remember only one idea from your message. They will remember nothing, if your ideas are complex and difficult to get. Therefore, distill your ideas into the simple and compact form.</p>
<ol>
<li><strong>Find core of your idea</strong> &#8211; remove all unimportant information, keep bare essential minimum</li>
<li><strong>Prepare <a id="xifw" title="Commander Intent" href="http://en.wikipedia.org/wiki/Commander's_intent">Commander Intent</a></strong> &#8211; plain statement of <span style="font-family: Verdana, Arial, Helvetica, sans-serif;"><span style="font-size: x-small;">the purpose of the operation and the desired end state.</span></span> Example: <em>The goal of this iteration is to build minimal end-to-end order flow &#8211; capture and save order, display it to an administrator.</em></li>
<li><strong>Build people understanding on familiar knowledge</strong> &#8211; introduce new ideas gradually, compare and merge with existing. Example: <em>Design patterns &#8211; we can use Factory method here to have full control over object creation.</em></li>
<li><strong>Use metaphors and analogies</strong> as a base for the new thinking. Substitute something easy for something difficult. Best examples are proverbs: <em>&#8220;A bird in the hand is worth two in the bush&#8221; &#8211; lets build first version on the proven technology to avoid risk of missing release date.</em></li>
<li><strong>Establish common language</strong> &#8211; with the same meaning to everybody. Domain Driven Design has <a id="kvfs" style="color: #551a8b;" title="ubiquitous language" href="http://domaindrivendesign.org/node/132">ubiquitous language</a> as a core principle for communication between business and technology people.</li>
</ol>
<h4>Unexpected</h4>
<div>
<p><img style="width: 240px; height: 160px;" src="http://softwarecreation.org/images/2010/judo.jpg" alt="" width="240" height="160" /><br />
<a class="photocredit" href="http://www.flickr.com/photos/parrhesiastes/2566999335/">parrhesiastes</a></p>
</div>
<p>
The sad truth is that people won&#8217;t get your idea if they don&#8217;t pay attention. You have to get and hold attention if you are serious about success of your ideas. It is similar to judo &#8211; once you get good grip on your opponent, you become in control and open possibility for many effective techniques. You cannot do much without solid grip.
</p>
<ol>
<li><strong>Surprise people and violate their expectations</strong>. Example: <em>my idea will remove half of the existing code and make the system much faster<br />
</em></li>
<li><strong>Stimulate curiosity</strong>: open gaps in knowledge and fill them with interesting answers, be provocative: <em>We can increase traffic to your website 10 times in two weeks. Do you want to know how?<br />
</em></li>
<li><strong>Make you message interesting for people</strong>. Use new information, twists, suspense and humor. Example: <em>Do you know that you current system is open for hackers and important information is leaking to Internet?</em></li>
</ol>
</div>
<div>
<h4>Concrete</h4>
<div>
<p><img class="alignnone" src="http://softwarecreation.org/images/2010/montessori.jpg" alt="" width="181" height="200" /></p>
</div>
<p>People have hard time to understand abstract vague language. Use instead definite and concrete language. Often <a id="y3iz" style="color: #551a8b;" title="bullshit" href="http://www.erikandanna.com/Humor/bullshit_generator.htm">bullshit</a> is disguised as abstract and conceptual language.<br />
Compare A to B:<br />
A. Our IT governance mandate requires us to carefully consider all the aspects of software quality, scalability and performance. We use comprehensive QA methods to meet wide range of possible live system usage scenarios and challenges. We employ best resources to accomplish this mission.<br />
B. We need one more week for thorough testing.</p>
<ol>
<li><strong>Make ideas clear and tangible</strong> &#8211; everybody should understand your message the same way</li>
<li><strong>Provide real examples</strong>, discuss real scenarios to nail down understanding, let customers play with concrete working implementation as early as possible</li>
<li><strong>Help to visualize ideas</strong> &#8211; one image is worth thousands words &#8211; build prototypes, wireframes, draw on paper</li>
</ol>
<h4>Credible</h4>
<div>
<p><img class="alignnone" src="http://softwarecreation.org/images/2010/einstein.jpg" alt="" width="300" height="180" /></p>
</div>
<p>People will believe in your ideas only if they are credible. Establish credibility with</p>
<ol>
<li><strong>Facts, statistics and arguments</strong> &#8211; build a strong case for your idea, provide clear explanation and rationale</li>
<li><strong>Proven solutions</strong> &#8211; reference similar ideas that are already implemented and successfully working</li>
<li><strong>Past success</strong> &#8211; quotes, testimonials and live examples of your previous solutions; use Sinatra test: <em>if you </em><em>can make it there, you </em><em>can make it anywhere </em>(he referred to success in New York)</li>
<li><strong>Reliable methods</strong> &#8211; disclose your QA and verification process, monitoring and troubleshooting procedures; build trust in your ability to deliver quality implementation</li>
<li><strong>Control and transparency</strong> &#8211; give impression of control to your clients by providing testable solutions and full information to understand and manage the system independently.</li>
</ol>
</div>
<div>
<h4>Emotional</h4>
<div>
<p><img class="alignnone" src="http://softwarecreation.org/images/2010/goal.jpg" alt="" width="140" height="200" /></p>
</div>
<p>People can do wonders if they care. They will care about your ideas if you wake their emotions and feelings. Emotions motivate and move us.</p></div>
<ol>
<li><strong>Make ideas connected with people, not abstractions</strong>. Tell them about Joe who was frustrated with our search or Jenny who was so excited with our website new features.</li>
<li><strong>Appeal to the senses of responsibility and professional dignity</strong> &#8211; make people conscience aware about quality problems, system security concerns, low user satisfaction</li>
<li><strong>Use self-interest</strong> &#8211; what is in this idea for the person: survival in the company, career growth opportunity or interesting challenge</li>
<li><strong>Appeal to identity</strong> &#8211; people care about their image and status: &#8220;what could someone like me do in this situation?&#8221; <em>A good developer not only cares about working code, but also about usability of a solution.</em></li>
</ol>
<div>
<h4>Stories</h4>
<div>
<p><img class="alignnone" src="http://softwarecreation.org/images/2010/storyteller.jpg" alt="" width="179" height="200" /></p>
</div>
<p>Stories are the best and oldest communication tool. The brain even process them differently (with <a id="sive" title="episodic memory" href="http://en.wikipedia.org/wiki/Episodic_memory">episodic memory</a>). We remember stories longer and recall them better. Stories are</p>
<ol>
<li><strong>Inspirations</strong> &#8211; <em>about a developer who build overnight prototype of super fast search fixing most frequent complain for past year.</em></li>
<li><strong>Simulations</strong> &#8211; <em>about crashes of the system and hours of downtime, long desperate troubleshooting under guns of management that were caused by a small bug with infinite loop</em></li>
<li><strong>Lessons</strong> &#8211; <em>about the programmer who committed code without testing</em></li>
<li><strong>Awareness</strong> &#8211; <em>about users who couldn&#8217;t figure out how to complete simple tasks on a website</em></li>
</ol>
<h3>Finally,</h3>
<p>Programmers expertise grows not only with increased technical knowledge, but also with ability to transform and communicate ideas. Expert programmers know how to make their ideas interesting, working and successful.</p></div>
<div>In short, their ideas are</div>
<div>
<ul>
<li><strong>simple &#8211; </strong>to understand</li>
<li><strong>unexpected &#8211; </strong>to pay attention</li>
<li><strong>concrete </strong>- to make sense</li>
<li><strong>credible </strong>- to believe</li>
<li><strong>emotional &#8211; </strong>to care</li>
<li><strong>stories </strong>- to remember</li>
</ul>
<p>I wish you many great ideas that people will love, remember and follow.</p>
<p><strong>Reference:</strong></p>
<div><a id="jo9y" title="Made to Stick: Why Some Ideas Survive and Others Die" href="http://www.amazon.com/gp/product/1400064287?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1400064287">Made to Stick: Why Some Ideas Survive and Others Die</a>, Chip Heath, Dan Heath</div>
</p>
</div>
<!-- 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=106&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2010/how-to-become-an-expert-making-ideas-stick/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Three Dimensions of a Software Programmer: How to get things done</title>
		<link>http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/</link>
		<comments>http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 04:43:40 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Job]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Skills]]></category>

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

		<guid isPermaLink="false">http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/</guid>
		<description><![CDATA[ShareReality is merely an illusion, albeit a very persistent one &#8211; Albert Einstein
An expert have much better models of reality and methods to build them than an ordinary specialist. The expert, armed with these models, can quickly put pieces of a problem puzzle together, find explanations and solve the problem.

Models can be related to anything [...]]]></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-become-an-expert-embrace-reality/&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-become-an-expert-embrace-reality/' 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-become-an-expert-embrace-reality/'></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-become-an-expert-embrace-reality/'></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-become-an-expert-embrace-reality/&amp;title=How+to+become+an+Expert.+Embrace+Reality.&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><em>Reality is merely an illusion, albeit a very persistent one</em> &#8211; Albert Einstein</p>
<p>An expert have much better models of reality and methods to build them than an ordinary specialist. The expert, armed with these models, can quickly put pieces of a problem puzzle together, find explanations and solve the problem.</p>
<p id="ejcw" style="text-align: left"><img src="http://softwarecreation.org/images/2009/expert-models.jpg" width="600" height="600" /></p>
<p>Models can be related to anything &#8211; software systems, business domain or your personal relationships. <span id="more-83"></span></p>
<h3><strong>Predictions and </strong><strong>Solutions!</strong></h3>
<blockquote><p><em>A theory is a good theory if it satisfies two requirements: It must accurately describe a large class of observations on the basis of a model that contains only a few arbitrary elements, and it must make definite predictions about the results of future observations.</em></p>
<p align="right">Stephen Hawking, A Brief History of Time</p>
</blockquote>
<p>Any expert as good as he can effectively predict future outcomes and solve new unforeseen problems. Solutions and predictions are not coming out of blue. They stem from good understanding of reality in an expert&#8217;s head. Internal models of reality help to explain problems, find relations and play with future scenarios. These models establish the base for effective thinking and direct expert&#8217;s effort to solve problems. If you have poor models of reality, you will make bad decisions. Good models of reality allow reliable predictions and efficient solutions than vague guesses and ad-hoc spontaneous fixes.</p>
<p>Characteristics of a good model:</p>
<ol>
<li><strong>Explanation </strong>- provides understanding of elements, processes, events, root causes and effects</li>
<li><strong>Testable predictions </strong>- a model that makes no predictions that can be observed is not a useful model.</li>
<li><strong>Simple </strong>- you can remember and use a model without titanic effort</li>
<li><strong>Frameworks </strong>- knowledge how to recognize common patterns and deal with range of similar problems. Frameworks allow to extend and apply existing models to new situations without building new models.</li>
</ol>
<h3>Brains &#8211; the main tool of an expert</h3>
<p><em>I think, therefore I am</em> &#8211; Rene Descartes</p>
<p>An expert&#8217;s brain carry and operates with models of reality. Unfortunately, our brains are not ideal for this task. Models they create are not identical to reality. Here is why.</p>
<p><strong>limitations</strong></p>
<ul>
<li><em>perception </em>- our senses deliver to brain partial and incomplete information</li>
<li><em>memory </em>- our brains can process and memorize only fraction of available information; and even more &#8211; we quickly forget this knowledge without practice</li>
<li><em>imagination </em>- brains automatically filling gaps for missing information, substitute with interpretation based on internal representation of the outside world</li>
</ul>
<p><strong>cognitive biases</strong> (bugs in brain software)</p>
<ul>
<li><em>anchoring or priming</em> &#8211; previous irrelevant experiences prime your consequent thinking and decisions</li>
<li><em>need for closure</em> &#8211; we are uncomfortable with doubt and uncertainty; we have urge to resolve and find convenient explanations quickly without much thinking</li>
<li><em>confirmation bias</em> -  from all facts we unconsciously pick facts that confirm our beliefs and predispositions</li>
<li><em>symbolic reduction</em> &#8211; we are anxious to reduce complexity for better understanding and tend to form simplified generalizations ignoring complex details and relations.</li>
<li>and <a href="http://en.wikipedia.org/wiki/List_of_cognitive_biases" title="many others" id="fa5u">many others</a></li>
</ul>
<p><strong>social behavior</strong></p>
<ul>
<li><em>subconscious models and believes</em> &#8211; our minds carry beliefs and views imposed by our parents, teachers and culture.  These subconscious models deeply influence our models of reality without much awareness.</li>
<li><em>peer pressure, conformity</em> &#8211; our minds are wired to conform and agree with other people making us blind for inconvenient facts, ready to follow crowd and accept conventional views without critical revision</li>
</ul>
<h3><strong>Objective Reality</strong></h3>
<p><em>There are no facts, only interpretations.</em>  &#8211; Friedrich Nietzsche</p>
<p>Even smartest brains will have challenges to understand reality.</p>
<p>We deal with <strong>complex situations</strong>:</p>
<ul>
<li><em>incomplete information</em> &#8211; we rarely have access to full information and even if it is available we don&#8217;t have capacity to collect and absorb all of it</li>
<li><em>perpetual changes</em> &#8211; reality is very fluid and changes every second</li>
<li><em>complex relations and behavior</em> &#8211; complex systems are difficult to understand: causes and effects, correlations, feedback loops, influence of processes in external systems</li>
<li><em>difficult to test</em> &#8211; we often cannot afford large number of experiments, trials and errors to come up with right models and explanations</li>
</ul>
<p>We deal with <strong>people</strong> who make our reality very complicated:</p>
<ul>
<li><em>unpredictable </em>- people are difficult to predict, they are often irrational and inconsistent</li>
<li><em>confusing </em>- people cannot clearly explain their thinking and feelings or even don&#8217;t understand themselves</li>
<li><em>deceiving </em>- sometimes people have difficulty to tell truth or simply lie for own advantage</li>
</ul>
<h3><strong>Building Models</strong></h3>
<p><em>The test of a first-rate intelligence is the ability to hold two opposed ideas in the mind at the same time, and still retain the ability to function.</em> -  F. Scott Fitzgerald</p>
<p>We understand reality different ways &#8211; learning, investigating problems, finding new solutions and practicing. For years we can concentrate on solving immediate problems and do our work without attempts to understand the big picture. Many good specialists have incomplete understanding and fragmented knowledge that still allow to perform well. But it is impossible to become an expert without deep understanding and conscious effort to build good models of reality.</p>
<p>For example, we can stumble for a long time with challenges and failures in building software without understanding its <a href="http://softwarecreation.org/2007/what-is-software-development/" title="essence" id="y:mc">essence</a>  and <a href="http://softwarecreation.org/2007/human-forces-and-software-creators/" title="forces" id="iufv">forces</a>. (By the way, search for this understanding is the reason for this blog existence).</p>
<p>Potentially everything what we do in life could help to build and improve our models of reality. We just need to consciously relate our experience and learning to our understanding of reality. And we can do it on the go without special preparation, when we actively engage our minds &#8211; working, talking, reading, practicing, traveling, thinking and even sleeping. Just focus on reality modeling.</p>
<p>The models of reality could be explicit (<strong>facts and theories</strong>) and implicit (<strong>intuition and tacit knowledge</strong>).<br />
<img src="http://softwarecreation.org/images/2009/models-composition.jpg" width="300" height="300" /></p>
<p>You can use several strategies to build models in your whole mind.<br />
<strong>A. Analytical</strong></p>
<ul>
<li>find what is most important, map and connect main elements, players and subsystems; learn relations; draw Mind Maps</li>
<li>understand influence of context and main forces</li>
<li>create stories, metaphors and patterns &#8211; make your models better suited for your brain</li>
<li>repeat the process for the most important subsystems</li>
</ul>
<p><strong>B. Empirical</strong></p>
<ul>
<li>find most pressing problems, contradictions or real life facts</li>
<li>understand how do they fit into your models of reality</li>
<li>it is great if they don&#8217;t fit &#8211; you have opportunity to improve your models</li>
</ul>
<p><strong>C. Synthesis</strong> &#8211; reconcile your models with existing knowledge and leading models</p>
<ul>
<li>find what are dominating models, views and believes; what other experts think</li>
<li>critically analyze this information and theories behind</li>
<li>find the best opposing theories and try to combine them to form better model</li>
</ul>
<p><strong>D.</strong> <strong><a href="http://en.wikipedia.org/wiki/Scientific_method" title="Scientific method" id="yk9g">Scientific method</a> </strong> &#8211; use it for practical evaluation of models and confirmation of your theories.</p>
<ul>
<li>build hypothesis about reality and outcomes of your actions</li>
<li>test it in practice</li>
<li>learn from results and adjust your models</li>
</ul>
<p><strong>E. People interests and agenda</strong> &#8211; people are often most surprising and unpredictable element of reality. Your models will be much closer to reality if you understand motives, interests and agenda of involved people.<br />
<strong>F. Change perspective</strong> &#8211; switch different perspectives to enrich models &#8211; economic, emotional, social, physical, etc. Try to view from opposite viewpoints and set of principles. Imagine yourself as user of your system, investor of your company, manager, any animal, computer part, etc. (Try to get back without loosing your identity :))  Web developers have interesting concepts of <a href="http://en.wikipedia.org/wiki/Personas" title="Personas" id="dujl">Personas</a> &#8211; imaginary users with distinct behavior on website that help to design a system for various cohesive sets of needs.<br />
<strong>G.</strong> <strong><a href="http://en.wikipedia.org/wiki/Lateral_thinking" title="Lateral thinking" id="u._z">Lateral thinking</a> </strong></p>
<ul>
<li>random association &#8211; associate models with recent books, distant knowledge fields, your favorite characters</li>
<li>provocative thinking &#8211; make unacceptable, funny, stupid ways to explain problems and shock your models</li>
<li>ask &#8220;why?&#8221; &#8211; continue asking &#8216;why&#8217; until your reach questions that nobody could answer on this Earth (or the only answer is <a href="http://en.wikipedia.org/wiki/Phrases_from_The_Hitchhiker%27s_Guide_to_the_Galaxy#Answer_to_Life.2C_the_Universe.2C_and_Everything_.2842.29" title="42" id="pc2c">42</a>).</li>
<li>expand concepts borrowed from other sources to have wider horizon for ideas</li>
</ul>
<p>In overall, you will switch between <a href="http://softwarecreation.org/2008/ideas-in-software-development-revolution-vs-evolution-part-1/" title="two grand strategies" id="xpdh">two grand strategies</a> &#8211; Evolution (discover reality and adopt to it) and Revolution (breakthrough and change reality). The choice depends on models maturity, certainty and your people capabilities.</p>
<h3>Therefore</h3>
<p><em>Few people have the imagination for reality.</em>  &#8211; Johann Wolfgang von Goethe</p>
<p>You can be certain that reality in your head is different from objective reality, which is complex, changing and controversial. Effective experts don&#8217;t have choice and master reality by<br />
1. Accepting own limitations in understanding of elusive reality<br />
2. Building good models of reality applying different strategies<br />
3. Using, testing and improving models in practice</p>
<p>Good models of reality will make your thinking, decisions and solutions much better. They will make you a master of reality instead of a victim of reality. Good luck with embracing reality!<br />
<strong>References:</strong><br />
<a href="http://www.amazon.com/gp/product/1422118924?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1422118924" title="The Opposable Mind: How Successful Leaders Win Through Integrative Thinking" id="ri0p">The Opposable Mind: How Successful Leaders Win Through Integrative Thinking</a> , by Roger L. Martin<br />
<a href="http://www.amazon.com/gp/product/1934356050?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1934356050" title="Pragmatic Thinking and Learning: Refactor Your Wetware" id="n9_c">Pragmatic Thinking and Learning: Refactor Your Wetware</a>, by Andy Hunt</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=83&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How to Become an Expert. Top 7 Qualities</title>
		<link>http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/</link>
		<comments>http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 04:43:23 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Expertise]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/</guid>
		<description><![CDATA[ShareExperts do not need rules to make decisions. They have qualities that allow them to consistently make good decisions and show high level of performance under different circumstances without any rules. This post discusses these core qualities that turn a novice into an expert.

Definitions
rule: prescribed guide for conduct or action
intuition: instinctive knowing (without the use [...]]]></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-become-an-expert-top-7-qualities/&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-become-an-expert-top-7-qualities/' 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-become-an-expert-top-7-qualities/'></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-become-an-expert-top-7-qualities/'></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-become-an-expert-top-7-qualities/&amp;title=How+to+Become+an+Expert.+Top+7+Qualities&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p>Experts do not need rules to make decisions. They have qualities that allow them to consistently make good decisions and show high level of performance under different circumstances without any rules. This post discusses these core qualities that turn a novice into an expert.</p>
<p><img src="http://softwarecreation.org/images/2009/novice-expert.jpg" /></p>
<p><strong>Definitions</strong><br />
<strong>rule:</strong> prescribed guide for conduct or action<br />
<strong>intuition:</strong> instinctive knowing (without the use of rational processes)<br />
<strong><a href="http://en.wikipedia.org/wiki/Tacit_knowledge" title="tacit knowledge" id="v:.:">tacit knowledge</a>:</strong> automatic, unexpressed knowledge that provides context for people, places, ideas, and experiences. Tacit knowledge is not easily shared. As Polanyi said: &#8220;We know more than we can tell.&#8221;<br />
<strong>context</strong>: the set of circumstances or facts that surround a particular event, situation, etc.</p>
<h3>Problems with rules</h3>
<p>Most rules didn&#8217;t come from heaven. They come from ordinary people. They are product of <strong>practice, theories, traditions and fear</strong>.<br />
Problems:</p>
<ul>
<li><strong>context-free</strong> &#8211; rules reflect standard situations without considering your specific circumstances</li>
<li><strong>limited verification</strong> &#8211; most rules are empirical and do not pass vigorous analysis, strict prove and experiments</li>
<li><strong>time sensitive</strong> &#8211; many rules become outdated quickly in dynamic professions, industries and societies</li>
<li><strong>overcautious</strong> &#8211; fear fuels many rules and seeks to protect from the worst scenario, often imaginable</li>
<li><strong>low skills denominator</strong> &#8211; rules tuned to match capabilities of the majority without accounting for individual strengths and weaknesses</li>
<li><strong>misinterpretation</strong> &#8211; tacit knowledge of experts, which forms base for many rules, is <a href="http://en.wikipedia.org/wiki/Tacit_knowledge" title="difficult to transfer" id="ntk5">difficult to transfer</a> in correct and understandable form</li>
</ul>
<p><span id="more-82"></span></p>
<h3>Core 7 Qualities of the Expert</h3>
<p><strong>1. </strong><strong>Motivation. </strong><strong>Believe in self. Energy. Unsatisfaction</strong><br />
<em>Motivation appears to be a more important factor than innate ability in the development of expertise.</em><em> &#8211; </em><a href="http://www.sciam.com/article.cfm?id=the-expert-mind" id="vu87" title="Scientific American">Scientific American</a></p>
<p>You have to believe in self to become a successful expert. An expert need strength, energy and motivation to go beyond ordinary performance levels.<br />
Top performers in different disciplines do this &#8211; envision own success and prepare their minds to achieve higher levels. Thinking <a href="http://www.amazon.com/gp/product/0345472322?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0345472322" title="can " id="fziu">can &#8220;wire&#8221;</a>  our brains for developing new capabilities and success.<br />
<strong>Questions:</strong> Am I ready? How can I boost my strength, energy and motivation? How will I succeed?</p>
<p><strong> 2. Hard Work. Discipline. Focus.</strong><br />
<em> The differences between expert performers and normal adults reflect a life-long period of deliberate effort to improve performance in a specific domain.</em> &#8211; <a href="http://projects.ict.usc.edu/itw/gel/EricssonDeliberatePracticePR93.pdf" id="pxqg" title="Anders Ericsson">Anders Ericsson</a></p>
<p>Hard work is not as difficult after you start and dive into it. Often the problem is that you cannot start or concentrate. Procrastination ruins your progress. There are many barriers for focused and productive work:</p>
<ul>
<li><strong>pressure and stress</strong> kills productivity</li>
<li><strong>low interest</strong> &#8211; without engaged mind your brain will resist to form knowledge</li>
<li><strong>multitasking</strong> &#8211; takes away precious concentration and mindset needed for productive work</li>
<li><strong>unclear goals</strong> &#8211; disoriented mind cannot focus effectively</li>
<li><strong>no specific time</strong>  &#8211; you will tend to postpone, delay and miss practice without strictly scheduled time</li>
<li><strong>distractions</strong> &#8211; inconvenient  environment and frequent interruptions don&#8217;t help</li>
</ul>
<p>New Scientist had an advice <a href="http://www.newscientist.com/article/mg19926732.000-the-origins-of-willpower.html?page=3" title="how to get a grip on yourself" id="we5g">how to get a grip on yourself</a> and strengthen willpower. The main ideas &#8211; willpower is limited resource, easily depleted; it requires planning, boost and  practice.</p>
<p>Also, keep yourself interested. Switch if you start loosing focus and interest. Reboot. Have prepared practices in different areas to enable fresh start for your mind.<br />
<strong>Questions:  </strong>How do I maintain focus, stay committed and interested? Do I have clear goals, action plan and productive environment?</p>
<p><strong>3. Think critically. Think as a beginner</strong><br />
<em>In the beginner&#8217;s mind there are many possibilities, but int the expert there are few</em> &#8211; Suzuki Roshi</p>
<p>As an expert you cannot go with the flow, believe everything and hide behind authoritative opinions. You cannot stick with your own views forever without changing them. You have to think critically: challenge beliefs, existing theories and dominant ideas. Some of them are completely wrong. Many of them have flaws and can be improved. Most of them are not the best in your specific context.<br />
<a href="http://en.wikipedia.org/wiki/5_Whys" id="dzy-" title="5 Whys">5 Whys</a> is an excellent method to discover reality.<br />
Better unforeseen solutions exist if you look for them. If you don&#8217;t think critically, you will be a follower without much chances to grow your ideas and find better solutions. Keep your mind open and question ideas including your own.<br />
<strong>Questions:</strong>  What are hard facts, assumptions and theories? What should I trust, dismiss or verify?</p>
<p><strong>4. Full brain power. Use right brain </strong>(in addition to left).<br />
<em>The right hemisphere synthesizes over space. The left analyzes over time.</em> &#8211; Jerre Levy</p>
<p>Your right brain (more accurately &#8211; right brain mode) is inherited from our animal ancestors and shaped by millions years of evolution. Right brain mode is much more powerful, reliable and faster than left brain mode. Right brain works in parallel with images, subconscious mind and deep vast memory (even when you sleep). On the contrary, left brain works with symbols and words; it is logical, analytical and linear. It can only work with few ideas in the same time (4-7) and needs focus and conscious effort. We need left brain to formulate, express ideas and communicate them to others.<br />
Experts are using both brains &#8211; <strong>left </strong>for rational thinking, analysis and communication, <strong>right </strong>for intuition, imagination and creative insights. One of the best books how to start using you right brain is <a href="http://www.amazon.com/gp/product/0874774241?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0874774241" title="The New Drawing on the Right Side of the Brain" id="mnuy">The New Drawing on the Right Side of the Brain</a>.<br />
Learn how to expand your brain power with the right brain mode. If you use only left brain mode, you&#8217;ll stay dull, rational and predictable specialist.<br />
<strong>Questions:</strong> How can I engage my both brain modes? (Hint: interest, humor, senses, emotions, surprise.) What puzzles can I feed to my subconscious mind?</p>
<p><strong>5. Continuous learning. Sharing</strong><br />
<em>The real voyage of discovery consists not in seeking new landscapes but in having new eyes.</em> &#8211; Marcel Proust</p>
<p>Experts never stop to learn. The day you believe you know everything is your last day as an expert. Experts learn from new research and existing knowledge, they learn from other people and they learn from own experience. Also they learn from disciplines outside of their professional realm that can provide new ideas.<br />
For a example, a programmer could benefit from learning:</p>
<ul>
<li>  <strong>psychology</strong> &#8211; better understand how users think and perceive, how to engage customers, how to make yourself and team productive and motivated;</li>
<li>  <strong>design, aesthetics, art</strong> &#8211; beautiful systems are more usable and successfu<strong>l<br />
</strong></li>
<li><strong>  management theories and practices</strong> &#8211; learn how to organize people and activities  (for example Agile learned a lot from <a href="http://www.informit.com/articles/article.aspx?p=664147&amp;seqNum=4" title="Toyota Production System" id="m_id">Toyota Production System</a> and <a href="http://jeffsutherland.com/scrum/2009/01/roots-of-scrum-takeuchi-and-nonaka.html" title="Japanese product development" id="dk:o">Japanese product development</a>)</li>
<li>  <strong>system theories</strong> &#8211; understand fundamental principles and laws governing complex systems</li>
<li>  <strong>economics, business</strong> &#8211; why people and business need software, how software fails or succeed on market; how your software fits into company business; how to start your own company</li>
<li>  <strong>culture, social life, demographics</strong> &#8211; trends in behavior, interest and problems of groups of people (by sex, age, education, profession, etc). This knowledge will explain current dynamic and suggest future opportunities.</li>
</ul>
<p>Make learning essential part of your everyday life. If you don&#8217;t learn, you stop your journey to become an expert.<br />
You gain deeper knowledge if you <strong>share </strong>your knowledge with other people &#8211; <strong>discuss, explain, teach, blog, speak, present</strong>. Other people &#8211; with different views and perspective &#8211; will quickly show weaknesses and quality of your knowledge. Sharing with others will push your learning further and deeper than keeping knowledge to yourself.</p>
<p><strong>Questions:</strong> What do I not know? How will I learn it? How will I share it?</p>
<p><strong>6. Self-improvement</strong>.<strong> Know yourself. </strong><br />
<em>Why do you see the speck in your brother&#8217;s eye but fail to notice the beam in your own eye?<span class="body"></span></em><span class="body"> &#8211; </span>Matthew</p>
<p>We protect ourselves from inconvenient truth and often are blind to own mistakes. Our psychological defense systems help to avoid depression and anxiety by protecting our ego, but also distort our view and perception of true reality.<br />
Good experts are capable to see truth, be objective and correct themselves. They try to avoid the trap of groupthink, crowd psychology and self white washing.  They know own strengths, weaknesses and biases.<br />
Seek  the truth about self, know your internal beliefs and motivation and improve yourself. Otherwise, your rosy distorted pictures will hinder your growth and you will become the part of a problem, not the part of a solution.<br />
<strong>Questions:</strong> What can I do better? How can I improve myself? Am I honest with myself?</p>
<p><strong>7. Big picture. Systems Thinking. Creative solutions.</strong><br />
<em><span class="body">Opportunity ideas do not lie around waiting to be discovered. Such ideas need to be produced</span></em><span class="body"><em>.</em> &#8211; </span>Edward de Bono</p>
<p>Experts main advantages are tacit knowledge and experience. They understand big picture, reality, context and how systems work. However, it is not enough. <strong>Experts should solve problems</strong>. And therefore, they should train themselves for problem solving, innovation and changing reality in the novel ways. The outcome, a creative solution,  is quintessence of hard work, deep knowledge and intuition.<br />
<strong>Questions:  </strong>What is the big picture: forces, players and relations? How things can be done better? Do I see new ways?</p>
<h3>Questions to Ask Yourself</h3>
<ol>
<li><strong>Motivation</strong> &#8211; Am I ready? How can I boost my strength, energy and motivation? How will I succeed?</li>
<li><strong>Focus</strong> &#8211; How do I maintain focus, stay committed and interested? Do I have clear goals, action plan and productive environment?</li>
<li><strong>Critical thinking</strong> &#8211; What are hard facts, assumptions and theories? What should I trust, dismiss or verify?</li>
<li><strong>Full </strong><strong>Brain power</strong> &#8211; How can I engage my both brain modes? What puzzles can I feed to my subconscious mind?</li>
<li><strong>Continuous Learning</strong> &#8211; What do I not know? How will I learn it? How will I share it?</li>
<li><strong>Self Improvement</strong> &#8211; What can I do better? How can I improve myself? Am I honest with myself?</li>
<li><strong>Creative solutions</strong> &#8211; What is the big picture: forces, players and relations? How things can be done better? Do I see new ways?</li>
</ol>
<p>If you know answers to these questions, you don&#8217;t need rules to solve problems &#8211; you are ready to make good decisions and become an expert.</p>
<p><strong>References:</strong><br />
<a href="http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition" title="Dreyfus Model of Skill Acquisition" id="kr4d">Dreyfus Model of Skill Acquisition</a> , Wikipedia<br />
<a href="http://www.time.com/time/health/article/0,8599,1717927-1,00.html" title="The Science of Experience" id="pyn3">The Science of Experience</a>, by John Cloud/Tallahassee, TIME<br />
<a href="http://www.amazon.com/gp/product/1934356050?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1934356050" title="Pragmatic Thinking and Learning: Refactor Your Wetware" id="n9_c">Pragmatic Thinking and Learning: Refactor Your Wetware</a>, by Andy Hunt<br />
<a href="http://www.amazon.com/gp/product/0874774241?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0874774241" title="The New Drawing on the Right Side of the Brain" id="mnuy">The New Drawing on the Right Side of the Brain</a>, by Betty Edwards<br />
<a href="http://www.sciam.com/article.cfm?id=the-expert-mind" title="The Expert Mind">The Expert Mind</a> , Scientific American<br />
<a href="http://projects.ict.usc.edu/itw/gel/EricssonDeliberatePracticePR93.pdf" title="The Role of Deliberate Practice in the Acquisition of Expert Performance">The Role of Deliberate Practice in the Acquisition of Expert Performance</a>, K. Anders Ericsson, Ralf Th. Krampe, and Clemens Tesch-Romer</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=82&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>How to Become an Expert. The Effective Way.</title>
		<link>http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/</link>
		<comments>http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 22:09:28 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Expertise]]></category>
		<category><![CDATA[Job]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/</guid>
		<description><![CDATA[Shareexperts are made, not born &#8211; Scientific American
  Disclaimer: This post is devoted to a person who wants to become an expert &#8211; the top player in a specific field as programming, soccer or chess. This post will be not interesting for people who are satisfied with their current performance and not interested to [...]]]></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-become-an-expert-the-effective-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-become-an-expert-the-effective-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-become-an-expert-the-effective-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-become-an-expert-the-effective-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-become-an-expert-the-effective-way/&amp;title=How+to+Become+an+Expert.+The+Effective+Way.&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><em>experts are made, not born &#8211; </em><a href="http://www.sciam.com/article.cfm?id=the-expert-mind" id="vu87" title="Scientific American">Scientific American</a></p>
<p><small>  <strong>Disclaimer:</strong> This post is devoted to a person who wants to become an expert &#8211; the top player in a specific field as programming, soccer or chess. This post will be not interesting for people who are satisfied with their current performance and not interested to be the best. </small></p>
<p><img src="http://softwarecreation.org/images/2009/kasparov.jpg" /></p>
<p>If you want to become an expert, it is not enough to follow your work assignments or occasionally play with interesting stuff at home. You have to push yourself hard in specially designed way.</p>
<p><strong>@Work</strong><br />
Your paid work tasks and projects are not designed to make you an expert. Your company expects results from your work: reliable, with minimal mistakes and focused on the company main goal &#8211; make money. Your employer could provide minimal training to help you with job requirements. However, your growth will be constrained by company needs, timelines, work assignments and acceptable methods. We cannot blame our organizations &#8211; this is part of the deal &#8211; they pay for your work and expect specific results. But&#8230; is this the best way for you to become an expert, acquire new skills and gain knowledge? To become an expert, you have to make many mistakes, learn from them, experiment with alternatives and work hard on your weaknesses. How many organizations do allow this risky, unproductive and unreliable way of working?</p>
<p><strong>@Home</strong><br />
Your play at home with interesting stuff has problems too. To satisfy your programming instincts and curiosity, you will probably select what you enjoy to do and eager to try. You&#8217;ll immense in this activity and find great satisfaction from doing it. But&#8230;  is this the best way to become an expert by doing only what you like? Becoming an expert requires hard, sometimes unpleasant work, specifically designed to improve your performance and push you over comfort zone. <span id="more-81"></span></p>
<h3><strong>Genesis of an expert</strong></h3>
<p><img src="http://softwarecreation.org/images/2009/kasparovyoung.jpg" /></p>
<p>Research shows that experts <a href="http://projects.ict.usc.edu/itw/gel/EricssonDeliberatePracticePR93.pdf">do not have more innate talent</a>, but put more effort and dedication. Newcomers to the field <a href="http://www.time.com/time/health/article/0,8599,1717927,00.html" id="ipzg">need at least 10 years</a> to become an expert. They move through <a href="http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition" title="several stages" id="ur5d">several stages</a>: from a novice, who blindly follows rules, to an expert, who does not need rules.<br />
Most people will stop on the level of competent specialist acceptable for the majority of jobs in the field. Only few will continue pushing forward to achieve the top level.</p>
<blockquote><p>  <em>We agree that expert performance is qualitatively different from normal performance and even that expert performers have characteristics and abilities that are qualitatively different from or at least outside the range of those of normal adults. However, we deny that these differences are immutable, that is, due to innate talent. Only a few exceptions, most notably height, are genetically prescribed. Instead, we argue that the differences between expert performers and normal adults reflect a life-long period of deliberate effort to improve performance in a specific domain</em>. &#8211; <a href="http://projects.ict.usc.edu/itw/gel/EricssonDeliberatePracticePR93.pdf" id="pxqg" title="Anders Ericsson">Anders Ericsson</a></p></blockquote>
<blockquote><p>  <em>Even the novice engages in effortful study at first, which is why beginners so often improve rapidly in playing golf, say, or in driving a car. But having reached an acceptable performance&#8211;for instance, keeping up with one&#8217;s golf buddies or passing a driver&#8217;s exam&#8211;most people relax. Their performance then becomes automatic and therefore impervious to further improvement. In contrast, experts-in-training keep the lid of their mind&#8217;s box open all the time, so that they can inspect, criticize and augment its contents and thereby approach the standard set by leaders in their fields. </em><em> &#8211; </em><a href="http://www.sciam.com/article.cfm?id=the-expert-mind" id="vu87" title="Scientific American">Scientific American</a></p></blockquote>
<p>Kathy Sierra <a href="http://headrush.typepad.com/creating_passionate_users/2006/03/how_to_be_an_ex.html" id="rwk5" title="wrote">wrote</a> that you, to become an expert who kicks ass, should keep reminding: <em>&#8220;I&#8217;ll keep pushing myself. There&#8217;s always some way to do it better&#8230;&#8221;</em>. How should we push ourselves?</p>
<p>If you do same tasks over and over again, you will not become an expert. If you do what you are good at, you will not improve your overall performance. You should focus on improving skills beyond your present competence. <strong>Outcome of your practice as not as important as developing your capabilities.</strong><br />
You can spend years doing your favorite activities and still stay at amateur level while dedicated novice can quickly leave you behind. <strong>Practice should concentrate around your weaknesses</strong> and areas that are important, but you probably try to avoid. You should repeatedly progress to the higher level through persistent training and overcome your limits.</p>
<p>Anders Ericsson (his research is the most influential in this area) calls this approach <strong>deliberate practice</strong>:</p>
<blockquote><p> &#8220;Deliberate practice is different. It entails considerable, specific, and sustained efforts to do something you can&#8217;t do well-or even at all. Research across domains shows that it is only by working at what you can&#8217;t do that you turn into the expert you want to become.&#8221;</p></blockquote>
<h3>  <strong>Design your practice</strong></h3>
<p><img src="http://softwarecreation.org/images/2009/kasparov1.jpg" /></p>
<p>Follow 7 steps</p>
<p><strong>1. Who is an expert?</strong><br />
You should understand what is the profile of an expert that you want to be &#8211; required capabilities, knowledge, areas of expertise and types of the problems experts work on.<br />
Have a beer with guru and ask for opinion (early enough), study job advertisements for high skilled positions (don&#8217;t be carried away), read about top players &#8211; why they are considered experts, what makes them special (skip part how they spend money) and how they achieved top level.<br />
<strong><br />
2. Find your gaps and weaknesses.</strong><br />
You can identify areas which require improvement once you know the profile of the ideal expert. Put them on the list and assign importance.</p>
<p><strong>3. Build roadmap.</strong><br />
Answer the questions: in what order you want to work on these areas and what are the major steps.<br />
Instead of focusing for a long time on one area, I would recommend to go in spiral &#8211; learn and practice various areas in parallel. Each spiral cycle should add to your experience small, but integral chunk of core expertise. Often developing diverse skills together brings synergy &#8211; deeper perspective, holistic view and increased capabilities for wider range of tasks.</p>
<p><strong>4. Design practice to improve performance </strong><br />
Set specific goals and methods &#8211; how do you improve performance, gain skills and knowledge for each area.<br />
Consider famous <a href="http://en.wikipedia.org/wiki/SMART_%28project_management%29" id="mkny" title="SMART goals">SMART goals</a> for practice: specific, measurable, achievable, relevant, time-boxed. Coach, who can effectively guide you, is very helpful on this stage. However, you can go alone if you are motivated and disciplined enough.<br />
Don&#8217;t burn yourself too much &#8211; your mind and body should be ready and eager to practice. Give yourself time for recovery, life and other favorite activities, otherwise you&#8217;ll soon hate your practice.</p>
<p><strong>5. Everyday practice on the edge of capabilities &#8211; at least 30 minutes</strong><br />
Deliberate practice is highly demanding and requires intensive concentration and focus. The practice should be scheduled, clear and focused &#8211; don&#8217;t give yourself chances to procrastinate. Concentrate on the excellence of execution &#8211; sloppy practice is not acceptable for top players. You should practice challenging tasks on the edge of your capabilities. Compare playing basketball with professional players or beginner kids from the neighborhood. Who will push you more and show how good you are?<br />
Observe and understand how and what you do &#8211; this process will develop intuition and patterns in your brains for future fast automatic decision making. Train yourself to think and act on the higher level &#8211; what is difficult for other people, should be trivial for you.</p>
<p><strong>6. Feedback</strong><br />
Constant feedback loop is the must in deliberate practice. Correct assessment of performance and results with following adjustment of practice will move you much faster. And certainly, interested and qualified coach capable of giving constructive and painful feedback is very important. Each day of practice should move you forward against higher and higher standards.</p>
<p><strong>7. Correct your roadmap and practice.</strong><br />
Feedback, self-evaluation and practical use of your skills will tell if you are on the right track. Be fluid and open for change of direction, new knowledge and unexpected opportunities. Learn and adjust goals, plans and methods on the go. As Eisenhower said: plans are nothing, planning is everything. Your rise as an expert will open for you new horizons that definitely change your plans and original intentions.</p>
<p>Additional Requirements</p>
<ul>
<li> <strong>Discipline, motivation, unsatisfaction</strong> &#8211; top experts are extremely dedicated, disciplined and motivated to grow and improve performance. Without the goal of improving performance, the motivation to engage in practice vanishes, and practice becomes boring routine.</li>
<li> <strong>Support</strong> &#8211; you&#8217;ll have ups and downs, moments of despair and disbelief. You need somebody who can understand, compassionate and encourage &#8211; friends, family, colleagues or a coach.</li>
</ul>
<h3>Deliberate practice in context</h3>
<p><img src="http://softwarecreation.org/images/2009/karpov-kasparov1987.jpg" /></p>
<p><strong>Practice @Work</strong><br />
Deliberate practice methods and work objectives are different. However, it is possible to grow as an expert and work productively.</p>
<ul>
<li> First, your company could have work in target areas of your expertise growth. Position yourself to take advantage of any opportunity to move there.</li>
<li> Second, any company will benefit from motivated and competent player, who wants to grow his capabilities. A smart company will support and encourage your drive&#8230; and use for own benefits.</li>
</ul>
<p>Strategy:</p>
<ol>
<li>  <strong>Job intelligence</strong> &#8211; what are opportunities, potential projects and tasks to assist with your progress as an expert? How can your help your company while upgrading your skills? Invent new opportunities. You have to build case for your advance and show benefits for the company.</li>
<li>  <strong>Call for the job redesign</strong> &#8211; many companies will be flexible for people who wants to progress and contribute more (if no, maybe you are in the wrong place)</li>
<li>  <strong>Productive work and intensive practice</strong> &#8211; work in the best way to help with your goals, but don&#8217;t make a company victim of your practice. Separate prototyping and experiments from production work. Make them open, controllable with a clear statement of benefits. Seek for challenging assignments on the edge of your capabilities.</li>
<li>  <strong>Tap into company pool of talents, expertise and knowledge</strong> &#8211; this is free (actually paid) opportunity to use coaching and valuable resources for growth acceleration. Ask for advises, guidance and feedback.</li>
</ol>
<p>You will find, as your star is rising (expertise growing), that you have more freedom to work in areas that have the most interest for you.</p>
<p><strong>Practice @Home, @Train or @Cafe</strong><br />
This is time for</p>
<ul>
<li>  research, learning, thinking</li>
<li>  crazy experiments</li>
<li>  irrelevant to your work practice</li>
<li>  practice that need special focus, time and conditions, difficult to achieve at work</li>
</ul>
<p><strong>Formal training</strong><br />
Qualified and relevant training can move you much faster. If you decide to invest in education be very specific what you expect and make sure that you&#8217;ll not waste your time.</p>
<p><strong>Sample Road to become Web Development Expert<br />
</strong>You can identify few key areas<strong>:<br />
</strong></p>
<ul>
<li>HTML / CSS</li>
<li>Graphic Design / Art</li>
<li>Usability / Aesthetics</li>
<li>Information Architecture</li>
<li>Client &#8211; side programming / javascript / AJAX</li>
<li>RIA (e.g. Silverlight / Flash)</li>
<li>Server &#8211; side programming and databases</li>
</ul>
<p>And design practice for each of them, for example:</p>
<table border="1" cellpadding="3" cellspacing="0">
<tr>
<td><strong>Area</strong></td>
<td><strong>Strategic Importance<br />
(or why I need this)</strong></td>
<td><strong>Expertise Gaps</strong></td>
<td><strong>Practice / Learning Goals</strong></td>
<td><strong>Actions</strong></td>
</tr>
<tr>
<td>HTML/CSS</td>
<td>core for building web sites</td>
<td>lack of experience with advanced css and layouts</td>
<td>master css, be comfortable with building any complex layouts</td>
<td>phase 1:<br />
<strong>@work</strong>:</p>
<ul>
<li>build myself CSS for assignments at work</li>
<li>seek guidance of senior web designer</li>
<li>learn company&#8217;s best practices</li>
</ul>
<p><strong>@home</strong>:</p>
<ul>
<li>learn advanced online css guides</li>
<li>read CSS Mastery book</li>
<li>absorb leading composition styles</li>
<li>dissect <a href="http://www.csszengarden.com/" title="CSS Zen Garden" id="df5.">CSS Zen Garden</a> designs</li>
<li>find interesting designs and build complex CSS layouts for them, make them better</li>
</ul>
</td>
</tr>
</table>
<h3><strong>Experts: Executive Summary</strong></h3>
<p>Experts are essential for the company/team competitive advantage. They <a href="http://softwarecreation.org/2008/ideas-in-software-development-revolution-vs-evolution-part-1" title="enable revolutions and support evolution" id="fu6g">enable revolutions and support evolution</a>.</p>
<p>Experts are made, not born.<strong> Experts are made by themselves.</strong> It is a long, thorny and hard road. But this road makes their life interesting, positive, meaningful and brings <a href="http://softwarecreation.org/2008/the-happiness-programmers-edition/" title="happiness" id="r8q4">happiness</a> from achieving a rare gift &#8211; mastery in the field they love.</p>
<p>Albert Camus said: <strong id="wn530">But what is happiness except the simple harmony between a man and the life he leads?</strong></p>
<p>For few people the harmony is a journey to become The Master.</p>
<p><img src="http://softwarecreation.org/images/2009/kasparov-happy.jpg" /></p>
<p><strong>Resources:</strong><br />
<a href="http://www.sciam.com/article.cfm?id=the-expert-mind" title="The Expert Mind">The Expert Mind</a> , Scientific American<br />
<a href="http://headrush.typepad.com/creating_passionate_users/2006/03/how_to_be_an_ex.html" title="How to be an expert">How to be an expert</a> , Kathy Sierra<br />
<a href="http://projects.ict.usc.edu/itw/gel/EricssonDeliberatePracticePR93.pdf" title="The Role of Deliberate Practice in the Acquisition of Expert Performance">The Role of Deliberate Practice in the Acquisition of Expert Performance</a>, K. Anders Ericsson, Ralf Th. Krampe, and Clemens Tesch-Romer</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=81&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>The Elements of Pragmatic Programming Style. Composition.</title>
		<link>http://softwarecreation.org/2009/the-elements-of-pragmatic-programming-style-composition/</link>
		<comments>http://softwarecreation.org/2009/the-elements-of-pragmatic-programming-style-composition/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 02:25:56 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2009/the-elements-of-pragmatic-programming-style-composition/</guid>
		<description><![CDATA[ShareA really great talent finds its happiness in execution. &#8211; Johann Wolfgang von Goethe
 
source
Qualities of well composed code:

  Quick discovery and understanding of programming logic and components
  Clear organization (for human brains)
  Ease of reuse, modification and evolution
  Close connection between customer ideas and system implementation


Style Components:

Intention - understand your [...]]]></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/the-elements-of-pragmatic-programming-style-composition/&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/the-elements-of-pragmatic-programming-style-composition/' 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/the-elements-of-pragmatic-programming-style-composition/'></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/the-elements-of-pragmatic-programming-style-composition/'></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/the-elements-of-pragmatic-programming-style-composition/&amp;title=The+Elements+of+Pragmatic+Programming+Style.+Composition.&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p id="ua_7" style="padding: 1em 0pt; text-align: left"><em><span class="huge">A really great talent finds its happiness in execution.</span></em> &#8211; <span class="bodybold">Johann Wolfgang von Goethe</span></p>
<p id="ua_7" style="padding: 1em 0pt; text-align: left"> <img src="http://softwarecreation.org/images/2009/architect.png" /></p>
<p><a href="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Architect.png/485px-Architect.png" class="photocredit">source</a></p>
<p>Qualities of well composed code:</p>
<ol>
<li>  Quick discovery and understanding of programming logic and components</li>
<li>  Clear organization (for human brains)</li>
<li>  Ease of reuse, modification and evolution</li>
<li>  Close connection between customer ideas and system implementation</li>
</ol>
<p><span id="more-80"></span></p>
<p>Style Components:</p>
<ul>
<li><strong><a href="http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-intention/">Intention</a> </strong>- understand your task and how to get it done</li>
<li><strong><a href="http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-approach">Approach</a> </strong>- basic principles of writing code</li>
<li><strong>Composition </strong>- organization of code</li>
<li><strong>Expression </strong>- expressing ideas in code</li>
<li><strong>Object Oriented Pragmatic Style</strong></li>
</ul>
<p style="margin-top: 30px; margin-bottom: 0px">  <strong>1. Design for customer problems<br />
</strong>Make the customer problem space a core for the software system design. Make every line of code accountable for solving customer needs. It is true that any software system requires a lot of plumbing beyond pure implementation of customer needs. However, technology concerns shouldn&#8217;t prevail. High-level languages and modern programming platforms give us a power to concentrate on customer problems more than on solving technical problems.</p>
<p style="margin-top: 0px; margin-bottom: 0px"> Code could be divided into two categories:</p>
<ul>
<li>  <strong>customer oriented</strong> &#8211; solves customer problems directly, e.g. implementing domain logic, UI interactions and display of information;</li>
<li>  <strong>system oriented</strong> &#8211; solves technical and application specific problems &#8211; data access, event handling, interfaces between subsystem, utilities and other code required for using libraries, systems and platforms.</li>
</ul>
<p style="margin-top: 0px; margin-bottom: 0px">Customer-oriented code brings most value and should be primary design concern.  System-oriented code puts in place infrastructure and support for running customer oriented code.</p>
<p style="margin-top: 0px; margin-bottom: 0px"> <em>Therefore, start with design of customer-oriented code and support it with minimal system-oriented code.</em> This doesn&#8217;t mean that system-oriented code is not important. Complex system environments, sophisticated user interfaces and challenging non-functional requirements (performance, availability, reliability, etc.) could demand major system-oriented development effort. But still customers needs should pull and direct this effort and the whole implementation.<br />
There are many ways to make technical problems dominant over customer problems:</p>
<ol>
<li> Making predetermined technical decisions (databases, programming platforms, messaging systems, expensive middle tier etc.) without considering simpler alternatives.</li>
<li>  Coming up with complex up-front design instead of evolving a simple design into optimal design.</li>
<li>  Starting programming around interesting technical problems forgetting what is important for a customer.</li>
<li>  Building frameworks and system-oriented code before writing code for immediate customer problems.</li>
</ol>
<p>For a example, some teams could start with this picture in mind stretching customer requirements to fit it (even for relatively simple applications).</p>
<p id="faph" style="padding: 1em 0pt; text-align: left"><img src="http://softwarecreation.org/images/2009/microsoft-esb.png" width="60%" height="60%" /></p>
<p> <a href="http://msdn.microsoft.com/en-us/library/bb264584.aspx" class="photocredit">source</a><br />
<strong>2. </strong><strong>Organize and evolve code around domain concepts and customer ideas</strong><br />
Make system design reflecting customer domain and problem space. Keep customer ideas and system implementation connected and synchronized all the time. This is as important as refactoring practice for effective creation of the software system.<br />
<a href="http://domaindrivendesign.org/" title="Domain-driven design" id="myqk">Domain-driven design</a> is an excellent way to build software systems. It puts emphasis on ubiquitous language, distilled domain knowledge and shared domain models that drive software development.</p>
<p><strong>3. Think as a customer<br />
</strong><em>What we see depends mainly on what we look for</em> &#8211; John Lubbock<br />
A programmer often considers programming as an opportunity for solving interesting technical problems. Often a programmer even doesn&#8217;t understand what customers really want. There are 2 consequences. First, the programmer is not interested in simpler solutions focused on the customer problem. Second, the programmer is missing coherent view on the customer problems and purpose of the software system. Over-engineered, complex and misaligned code is one of the most serious problems in software development. An army of business analysts, stressed project managers and smart customer proxies will not force indifferent and ignorant programmers to write code in the best interest of customer.<br />
The programmer should constantly ask himself: &#8220;Will this solution work for my customer?&#8221;. To give correct answer on this simple question the programmer should understand a lot &#8211; customer language, needs, problems, a big picture and business purpose.</p>
<p>Certainly, it is difficult to think as a customer if you are at the bottom of software creation chain:</p>
<ul>
<li> separated from a customer by project and product managers, architects, designers, consultants, experts and panels of stakeholders</li>
<li>  pressed by the heavy process, rigid organization structure and inability to make decisions</li>
<li>  fed with over-processed, distorted and disjointed doses of information coming down through long chain</li>
</ul>
<p>Beautiful software ideas <a href="http://softwarecreation.org/2008/how-a-beautiful-software-system-becomes-frankenstein/" title="can turn into monster applications" id="b2hi">can turn into monster applications</a> &#8211; unusable and disconnected from real needs. Did you feel (as a user) frustrated by complex confusing and irrational program screens and logic? Yes, we, programmers, can easily produce bad stuff if we cannot think as people who need our systems.</p>
<p><strong>4. Sketch programming ideas with unit tests.</strong><br />
Write unit tests first. Any programmer should understand what he is trying to solve with the new code and how it will be used &#8211; possible input, expected output and public interface. A programmer should think about behavior in isolation, under border conditions or within context of existing code. An unit test is an excellent place to sketch nonexistent code, play with it without compilation and see if it is convenient and makes sense. Once the programmer likes sketched ideas in unit tests, he just need to build simple implementation to satisfy these unit tests. The process of writing unit tests focuses a programmer on solving customer problems, understanding code intent and making optimal design decisions. As an additional side effect, the programmer receives comprehensive suite of automated regression tests and executable specifications.</p>
<p>For a example,<br />
<code><br />
CustomerDB.Save(TEST_USER, TEST_PWD)<br />
Customer customer = CustomerDB.Login(TEST_USER, TEST_PWD);<br />
Assert.IsNotNull(customer, "customer should be logged in");<br />
customer.Purchase(TEST_PRODUCT);<br />
List&lt;Order&gt; orders = OrderDB.LoadFor(customer) or maybe... customer.Orders //what is better?<br />
Assert.AreEqual(1, orders.Count, "count");<br />
</code><br />
There are many design decision are made in this unit test without writing any production code. And now programmer can concentrate on implemention without throes of creation.</p>
<p><strong>5. Eliminate duplication</strong><br />
<em>Simplification is ultimate sophistication</em> &#8211; da Vinci<br />
Elimination of duplication is the moving force of evolutionary design. This is straightforward and powerful method to grow an optimal system. Duplication in the code tells that you need better design. Many interesting design ideas are born from the simple need to eliminate duplication in the growing system. These ideas are based on deeper understanding and gained experience as oppose to speculative up-front design ideas.<br />
The main goals of removing duplication are</p>
<ul>
<li>  reduce code</li>
<li>  simplify solution</li>
<li>  make the system more manageable for programmers&#8217; minds.</li>
</ul>
<p>Some sources of duplication:</p>
<ul>
<li>  copy and paste &#8211; <a href="http://softwarecreation.org/2008/a-few-words-in-defense-of-copy-and-paste-programming/" title="acceptable only temporary" id="ml24">acceptable only temporary</a></li>
<li>  similar logic different in details &#8211; generalization is required</li>
<li>  another implementation for the same problem &#8211; better team communication and reuse are required</li>
</ul>
<p><em>Master the core skill of good evolutionary designers &#8211; how to detect and eliminate duplication.</em><br />
The knowledge of design patterns is the most useful on this step. The <a href="http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-approach/" id="ucd5" title="initial simple solution">initial simple solution</a> rarely requires design patterns. But as a system grows, design patterns can effectively and elegantly solve new complex design problems.<br />
Example of elimination of high level duplication with Template method design pattern<br />
This code was used in many data access classes almost the same way, but with different inner steps</p>
<pre>
        using (SqlConnection conn = NewSqlConnection())

        {

            SqlCommand cmd = conn.CreateCommand();

            cmd.CommandType = CommandType.StoredProcedure;

            cmd.CommandText = "SearchCustomers";

            cmd.Parameters.Add(new SqlParameter("@city", city));

            ... //long list of parameters

            conn.Open();

            try

            {

                using (SqlDataReader reader = cmd.ExecuteReader())

                {

                    foreach (DbDataRecord record in reader)

                        customers.Add(new Customer(record["id"], record["name"]))

                }

            }

            catch (Exception e)

            {

                //error handling logic here

            }

        }</pre>
<p>The common logic could be moved into one template method with placeholders for different steps:</p>
<pre>
List&lt;Customer&gt; customers =  LoadRecordsFromSP&lt;Customer&gt;("SearchCustomers",

    (SqlCommand cmd) =&gt; {

         cmd.Parameters.Add(new SqlParameter("@city", city));

         ...     //long list of parameters

    },

    (DbDataRecord record) =&gt; { new Customer(record["id"], record["name"]); }

);</pre>
<p><strong>6. Reduce code smells</strong><br />
Write code that doesn&#8217;t smell. Train your sense of smell for code and design problems. They will provide hints where code is probably bad.<br />
These are common bad smells<span class="mw-headline"></span> from <a href="http://wiki.java.net/bin/view/People/SmellsToRefactorings" id="e9im" title="a long list">a long list</a></p>
<ul>
<li>  Duplicated code</li>
<li>  Large method</li>
<li>  Large class</li>
<li>  Long parameter list</li>
<li>  Dead Code</li>
<li>  Over-generalized code</li>
<li>  Lazy class</li>
</ul>
<p><strong>7. Use design patterns and abstractions to make code simpler</strong><br />
Learn <a href="http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29" title="design patterns" id="j72i">design patterns</a>. At some level of complexity they will provide excellent solutions and simplify design.<br />
However, wrong abstractions and over used design patterns will make code more complex and less manageable. So, apply them carefully.</p>
<p><strong>8. Decouple and isolate components</strong><br />
<em>Only talk to your immediate friends; Don&#8217;t talk to strangers</em> &#8211; <a href="http://www.ccs.neu.edu/research/demeter/demeter-method/LawOfDemeter/general-formulation.html" title="Law of Demeter" id="z1sj">Law of Demeter</a>.<br />
Reduce connections between programming units &#8211; subsystems, modules and objects &#8211; as much as possible. More relations between components make software system more complex and rigid. Decoupled and isolated system components have significant benefits:</p>
<ul>
<li><strong>better understanding</strong> &#8211; easier to keep in memory and make sense for less states and relations</li>
<li><strong>increased reuse</strong> &#8211; components with minimal well-defined public interface and relations less dependent on context and can be used in many scenarios</li>
<li><strong>decreased breakdowns</strong> &#8211; caused by unpredictable run-time combination of relations</li>
<li><strong>effective testing</strong> &#8211; highly connected system require much more testing beyond isolated testing of components</li>
</ul>
<p id="e0-1" style="padding: 1em 0pt; text-align: left"><img src="http://softwarecreation.org/images/2009/predictability.gif" /></p>
<p><strong>9. Keep related code together</strong><br />
Put related code to the same package. It will enhance</p>
<ul>
<li>  <strong>discovery </strong>- easier to find and reuse</li>
<li>  <strong>design </strong>- allows isolation, minimal interactions and consistent structure for related components</li>
<li>  <strong>maintenance and testing </strong>- reduce effect of new changes to fewer packages and system components.</li>
</ul>
<p>There are two package approaches: <strong><br />
</strong></p>
<ul>
<li>  <strong>Feature</strong> &#8211; code related to the same problem placed together</li>
<li>  <strong>Application layers</strong> &#8211; code for similar programming concepts</li>
</ul>
<p>Benefits of packaging:</p>
<ul>
<li>  Feature: related code in one place, changes together and form self-sufficient granule for reuse and release</li>
<li>  Application: separation of concerns, logical layering and reduced dependencies,  consistent global structure</li>
</ul>
<p id="f-z:" style="padding: 1em 0pt; text-align: left"><img src="http://softwarecreation.org/images/2009/packaging.jpg" width="500" height="500" /></p>
<h3>  Composing the program &#8211; Putting Things Together</h3>
<ol>
<li>Understand what customer wants and form <a href="http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-intention/" id="i2c6" title="intent">intent</a>.</li>
<li>Translate customer ideas into programming concepts (technology, platform and language, UI, libraries, components)</li>
<li>Make them simple, minimal and clear with pragmatic <a href="http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-approach/" id="v-gg" title="approach">approach</a>.</li>
<li>Organize code around domain concepts and customer needs; use domain-driven design.</li>
<li>Describe UI ideas with paper sketches</li>
<li>Specify program ideas with automated unit tests.</li>
<li>Merge UI and program ideas</li>
<li>Package related ideas together, isolate subsystems and components</li>
<li>Express ideas in code and UI screens</li>
<li>Remove duplication and bad code smells; improve design; consider using design patterns</li>
<li>Evolve and refactor common code into framework; emerge layers and abstractions for similar concepts</li>
</ol>
<!-- 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=80&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2009/the-elements-of-pragmatic-programming-style-composition/feed/</wfw:commentRss>
		<slash:comments>1</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>
	</channel>
</rss>
