<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Software Creation Mystery</title>
	
	<link>http://softwarecreation.org</link>
	<description>What are the forces behind Software Development?</description>
	<lastBuildDate>Thu, 17 May 2012 02:55:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SoftwareCreation" /><feedburner:info uri="softwarecreation" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>SoftwareCreation</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Know What Software Features to Build Next: User Stories, Business Canvas and Market</title>
		<link>http://feedproxy.google.com/~r/SoftwareCreation/~3/x2iqTjnV30c/</link>
		<comments>http://softwarecreation.org/2012/know-what-software-features-to-build-next-user-stories-business-canvas-and-market/#comments</comments>
		<pubDate>Thu, 17 May 2012 02:47:21 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Lean startup]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=322</guid>
		<description>&amp;#8220;Devoted to Facebook IPO&amp;#8221; Is there any development process that can really increase chances of the software system market success in this uncertain world? Traditionally Project Managers make decisions for the horde of software developers what features should be attacked in the long release. Yes, this approach frees busy developers brains from the mind boggling [...]
Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2009/the-elements-of-pragmatic-programming-style-composition/' rel='bookmark' title='The Elements of Pragmatic Programming Style. Composition.'&gt;The Elements of Pragmatic Programming Style. Composition.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2009/when-should-you-release-early-and-often/' rel='bookmark' title='When should you Release Early and Often?'&gt;When should you Release Early and Often?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/' rel='bookmark' title='The Secret of Building Effective Software Systems'&gt;The Secret of Building Effective Software Systems&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
			<content:encoded><![CDATA[<p align="right"><em>&#8220;Devoted to Facebook IPO&#8221;</em></p>
<div class="stress">Is there any development process that can really increase chances of the software system market success in this uncertain world?</div>
<div class="stress"><img class="alignnone size-full wp-image-356" title="any-process" src="http://softwarecreation.org/wp-content/uploads/2012/05/any-process.jpg" alt="" width="640" height="480" /></div>
<p>Traditionally Project Managers make decisions for the horde of software developers what features should be attacked in the long release. Yes, this approach frees busy developers brains from the mind boggling task of thinking about the business. But developers <em>no longer get business context</em> &#8211; why features should be done and what is important for the business. In addition, long releases detach developers from the product market results and <em>inhibit learning and adaptation</em> to the customer needs.</p>
<h3><strong>Agile Development</strong><strong></strong></h3>
<p>Agile fixes these problems with three important practices &#8211; <a href="http://xprogramming.com/xpmag/whatisxp#whole">The Whole Team</a>, <a href="http://xprogramming.com/xpmag/whatisxp#small">Small Releases</a> and <a href="http://www.mountaingoatsoftware.com/topics/user-stories">User Stories</a>. Customers and developers are one team that <em>frequently discuss features face-to-face</em> and create User Stories together. Important User Stories become part of the new release, others go to <a href="http://en.wikipedia.org/wiki/Scrum_(development)#Product_Backlog">Backlog</a>. The team releases features frequently and learn from customer feedback and implementation.</p>
<p><span id="more-322"></span></p>
<div class="inset"><strong>User Story</strong> captures the &#8216;who&#8217;, &#8216;what&#8217; and &#8216;why&#8217; of a requirement in a short simple way from the customer perspective. A user story is a unit of requirement, estimation and planning. It should be testable and fit into a single iteration. Often a user story is broken into programming tasks which describe specific implementation steps.</div>
<p>User Story is <a href="http://www.scrumalliance.org/articles/106-definition-of-done-a-reference">done </a>when it is:</p>
<ul>
<li>Code Complete and <strong>Working</strong></li>
<li>Tested</li>
<li>Accepted by customer</li>
</ul>
<p>Agile is wonderful process! Developers work closely with business providing <em>speed</em>, <em>accurate interpretation</em> of requirements and <em>intellectual contribution</em> (surprise!) in translating business vision and needs into the concrete software system.</p>
<p>The Customer accepts the User Stories at the end of frequent iterations, provides feedback and change future User Stories based on experience with this real working system. In short, the customer steers the direction of the project instead of being a hostage of the unruly slow development machine.</p>
<p>However, one big problem remains &#8211; everything depends on the customer’s ability to get brilliant ideas, correctly read the market and envision what set of features will succeed. Unfortunately, it is almost impossible to get right. Business geniuses (except Steve Jobs), smart analysts or even consumers themselves cannot reliably predict how people would react, what they really need and will like next. And developers can contribute more to the <strong>market discovery</strong> and <strong>quality of business decisions</strong>.</p>
<h3><strong>Market-oriented Development</strong><strong></strong></h3>
<p>Lean startup movement, Facebook and Toyota  have some interesting ideas that can be applied to the development process and improve chances of software market success.</p>
<div class="inset">
<div class="title"><strong>Facebook </strong><a href="http://www.wired.com/epicenter/2012/02/zuck-letter/"><strong>Hacker Way</strong></a></div>
<p>Hackers try to build the best services over the long term by quickly releasing and learning from smaller iterations rather than trying to get everything right all at once. To support this, we have built a testing framework that at any given time can try out thousands of versions of Facebook. We have the words <strong>“Done is better than perfect”</strong> painted on our walls to remind ourselves to always keep shipping.</p>
<p>Hacking is also an inherently hands-on and active discipline. Instead of debating for days whether a new idea is possible or what the best way to build something is, hackers would rather just prototype something and see what works. There’s a hacker mantra that you’ll hear a lot around Facebook offices: <strong>“Code wins arguments.”</strong></p>
<p align="right">- Mark Zuckerberg, Facebook CEO</p>
</div>
<div class="inset">
<div class="title"><strong>Toyota Production System </strong></div>
<p>All we are doing is looking at the time line from the moment the customer give us an order to the point when we collect the cash. And we are reducing that time line by removing the non-value-added wastes.</p>
<p align="right">- Taiichi Ohno, founder of TPS</p>
</div>
<div class="inset">
<div class="title"><strong>Lean startup</strong></div>
<p>The fundamental activity of a startup is to turn ideas into products, measure how customers respond, and then learn whether to pivot or persevere. All successful startup processes should be geared to accelerate that feedback loop.</p>
<p align="right">- Eric Ries, <a href="http://theleanstartup.com/">Lean Startup</a></p>
</div>
<p><strong>Market-oriented Development </strong>has three distinctive characteristics:</p>
<ol start="1">
<li>Requirements goal is to maximize learning, reduce risks and uncertainty</li>
<li>Build-Measure-Learn Feature Cycle</li>
<li>Delivery Mechanism &#8211; Continuous Deployment and Flow</li>
</ol>
<h3><strong>1. Requirements &#8211; Business Model Canvas and Customer Development</strong><strong></strong></h3>
<blockquote><p>Maximize learning (about what’s riskiest) per unit time. Systematically eliminate risks.</p>
<p align="right">- Ash Maurya, Running Lean</p>
</blockquote>
<p>Your software system carries more than just technical risks:</p>
<ul>
<li>product risk &#8211; do you solve right problem in right way?</li>
<li>customer risk &#8211; do you know who has the problem and how approach them?</li>
<li>market risk &#8211; can you build effective business and make money?</li>
</ul>
<p>Each software system feature (reflected in User Story) has similar risks on the smaller scale. Every new feature is an attempt to improve software system and business. The process should breed successful and eliminate failing features.</p>
<p><a class="noborder" href="http://www.businessmodelgeneration.com/"><img class="alignnone size-full wp-image-359" title="Business Model Canvas" src="http://softwarecreation.org/wp-content/uploads/2012/05/Business_Model_Canvas.png" alt="" width="640" height="427" /></a></p>
<p><strong>Business Model Canvas</strong> is an excellent source of requirements  - define areas of risks and opportunities to focus on what features should be built next.</p>
<div class="inset">
<div class="title"><a href="http://www.businessmodelgeneration.com/canvas">Business Model Canvas</a> (or <a href="http://leancanvas.com/">Lean Canvas</a>)</div>
<p>The Business Model Canvas is a strategic management template for developing new or documenting existing business models. It is a visual chart with elements describing a firm&#8217;s value proposition, infrastructure, customers, and finances. It assists firms in aligning their activities by illustrating potential trade-offs.</p>
</div>
<p>Another great source of requirements is Steve Blank’s <a href="http://steveblank.com/2012/03/29/nail-the-customer-development-manifesto/">Customer Development</a> process that helps to discover, validate and create customer’s needs.</p>
<p>The initial result is <strong>Minimum Viable Product</strong> (MVP) described with User Stories. Developers help to cross a bridge between business models and feasible technical implementation to form MVP.</p>
<div class="inset">
<div class="title"><a href="http://www.startuplessonslearned.com/2009/08/minimum-viable-product-guide.html">Minimal Viable Product</a></div>
<p>The minimum viable product is that version of a new product which allows a team to collect the maximum amount of <a href="http://www.startuplessonslearned.com/2009/04/validated-learning-about-customers.html">validated learning about customers</a> with the least effort.</p>
</div>
<div class="stress"><strong>Mental Shift:</strong> <em>Each Feature should improve a business model or increase learning about it.</em></div>
<h3><strong>2. Build &#8211; Measure &#8211; Learn Feature Cycle</strong><strong></strong></h3>
<p>Selected User Stories are transformed into <strong>Minimum Marketable Feature </strong>(MMF) for the release.</p>
<div class="inset">
<div class="title"><strong>Minimum Marketable Feature</strong> (from <a href="http://www.softwarebynumbers.org/">Software By Numbers</a> with their <a href="http://en.wikipedia.org/wiki/Incremental_funding_methodology">Incremental Funding Methodology</a>)</div>
<p>MMF must provide significant value to the customer. We use the term &#8220;marketable&#8221; to describe this concept. However, value can be measured in many ways, such as revenue generation, cost savings, competitive differentiation, brand-name projection, and enhanced customer loyalty. Even this list is by no means exclusive, as true value can only be defined within the context of the proposed project and measured by the organization developing the software.</p>
</div>
<p><strong>Use </strong><a href="http://en.wikipedia.org/wiki/Scientific_method"><strong>Scientific Method</strong></a><br />
Build features as experiments in proving <strong>hypothesis</strong>. An experiment is valid when you can definitely measure if hypothesis has <em>succeeded or failed</em>.</p>
<p><strong>Follow Build-Measure-Learn Cycle</strong><br />
<a class="noborder" href="http://theleanstartup.com"><img class="alignnone size-full wp-image-352" title="Build-Measure-Learn Cycle" src="http://softwarecreation.org/wp-content/uploads/2012/05/lean-cycle.jpg" alt="" width="600" height="388" /></a></p>
<p><a class="photocredit" href="http://theleanstartup.com/">theleanstartup.com</a></p>
<h4><em>MMF Extended Lifecycle:</em><strong></strong></h4>
<ol>
<li><strong>Generate ideas</strong> (Theory) with Business Model Canvas and Customer Development &#8211; feature should improve business or increase learning</li>
<li><strong>Survey</strong> (before development) &#8211; what are feature chances of acceptance and success (customer interview, surveys, marketing site traps for potential users)</li>
<li><strong>Build Feature as Hypothesis</strong> avoiding expensive and long effort. Technology is not so important at this stage &#8211; inefficient or even manual solutions are ok.</li>
<li><strong>Probe </strong>(run experiment) with
<ul>
<li>beta testing</li>
<li><a href="http://www.sensible.com/rsme.html">usability testing</a></li>
<li>flip feature for a limited group</li>
<li>A/B testing</li>
<li>internal / close preview</li>
</ul>
</li>
<li><strong>Measure market success</strong> (validate with users, use analytics, get feedback, do <a href="http://52weeksofux.com/post/646711369/cohort-analysis-measuring-engagement-over-time">cohort analysis</a>)
<ul>
<li>If no clear market success (traction, positive feedback) &#8211; hypothesis is not confirmed, refine it</li>
<li>Outcome: <a href="http://www.startuplessonslearned.com/2009/04/validated-learning-about-customers.html">validated learning</a> &#8211; the feature is marketable!</li>
</ul>
</li>
<li><strong>Release</strong> (marketable feature) to wide audience</li>
<li><strong>Adopt and Scale</strong> &#8211; make the feature reliable part of the core product</li>
<li><strong>Monitor and Optimize</strong> &#8211; improve quality and performance of the feature</li>
<li><strong>Improve feature </strong>and continue evaluating
<ul>
<li>Is it still good, marketable and usable?</li>
<li>Does it still confirm to <a href="http://en.wikipedia.org/wiki/Pareto_principle">80/20 rule</a>?</li>
<li>Does it escape over-complication and bloating after rounds of improvements?</li>
<li>Should it be replaced with something better and new?</li>
</ul>
</li>
</ol>
<p><img class="alignnone size-full wp-image-366" title="Software Feature Cycle" src="http://softwarecreation.org/wp-content/uploads/2012/05/Feature-Cycle.png" alt="" width="600" height="600" /></p>
<p>MMF is <strong>done</strong> when it is :</p>
<ul>
<li>Code complete and Working</li>
<li>Tested</li>
<li>Accepted by customer</li>
<li><strong>Proved to be Marketable</strong> &#8211; users want and like this feature, and it can bring money / increase value</li>
</ul>
<p>The Market-oriented Developers should target in parallel three completely different goals:</p>
<ol>
<li><strong>Traditional </strong>- design a solid system and lay stable foundation for the system expansion and usage</li>
<li><strong>Agile </strong>- build a simple optimal system that can be adapted for the future changes</li>
<li><strong>Market </strong>- create a minimum quick solution to prove viability of feature early and reduce product, customer and market risks. Be ready to radically change or scrap unsuccessful features.</li>
</ol>
<p>Developers work with two types of features: <strong>Hypothesis </strong>and <strong>Core </strong>(proved by market). As a result two kinds of development activity streams run in parallel</p>
<ul>
<li>Form <strong>stable core</strong> for proven features &#8211; high quality, refactored and optimized</li>
<li>Build<strong> isolated hypothetical features</strong> with options to flip or remove completely (without consequences). Lower quality and shortcuts are acceptable. The main goal is to prove the feature with minimal effort and system disturbance.</li>
</ul>
<div class="stress"><strong>Mental Shift:</strong> A n<em>ew feature is a <strong>Hypothesis </strong>about solution that should pass Ultimate Marketability Test to become Core.</em></div>
<h3>3. Delivery Mechanism &#8211; Continuous Deployment and Flow</h3>
<blockquote><p>Startups that succeed are those that manage to iterate enough times before running out of resources. Time between these iterations is fundamental.</p>
<p style="text-align: right;">- Ash Maurya, Running Lean</p>
</blockquote>
<div class="inset">
<div class="title"><strong><a href="http://www.informit.com/articles/article.aspx?p=1829417">Continuous Deployment</a> </strong>is a practice of releasing software continuously throughout the day — in minutes versus days, weeks, or months. Features are released as soon as they are done.</div>
<p>Continuous Deployment is built on continuous flow techniques that were developed at Toyota. Continuous flow has been shown to boost productivity by rearranging manufacturing processes so that products are built end to-end, one at a time, versus the more prevalent batch-and-queue approach. The goal is to eliminate waste. The biggest waste in manufacturing is created from having to transport products from one place to another. The biggest waste in software is created from waiting for software as it moves from one state to another: waiting to code, waiting to test, waiting to deploy. Reducing or eliminating these wait times leads to faster iterations, which is the key to success.</p>
<p style="text-align: right;">- Ash Maurya, Running Lean</p>
</div>
<p>The software team that practice Continuous Deployment should be disciplined, professional and focused. Developers work in <em>advanced mode</em> &#8211; frequently release a system woven from features on different life stages instead of rarely releasing big slumps of monolithic frozen codebase.</p>
<h4>The Flow</h4>
<p><strong>Input</strong></p>
<ul>
<li>Business Model Hypotheses</li>
<li>Core Feature Improvements</li>
</ul>
<p><strong>1. Develop</strong></p>
<ul>
<li>Build in <strong>small batches</strong> &#8211; less disruption, easier to swallow</li>
<li>Reduce <strong>work in progress</strong> &#8211; focus on features that can be completed and released in short time (otherwise reduce feature scope)</li>
<li>Eliminate <strong>waste </strong>- keep only value-added code and activities</li>
</ul>
<p><strong>2. Test </strong></p>
<ul>
<li>QA is the part of the development process, not a separate phase</li>
<li>Automated Testing and Continuous Integration are core mandatory practices</li>
<li><a href="http://www.toyota-global.com/company/vision_philosophy/toyota_production_system/jidoka.html">Jidoka</a> &#8211; no failing tests, zero defect totlerance &#8211; stop and fix if a problem arises</li>
</ul>
<p><strong>3. Deploy </strong></p>
<ul>
<li>One click deployment and rollback</li>
<li>Feature flipper system (e.g. <a href="http://code.flickr.com/blog/2009/12/02/flipping-out/">Flickr</a>, <a href="http://www.quora.com/Facebook-Engineering/How-does-Facebooks-Gatekeeper-service-work">Facebook Gatekeeper</a>)</li>
<li>Integrated Operations and Development &#8211; both teams are part of the whole process from requirements to launch</li>
</ul>
<p><strong>4. Monitor </strong></p>
<ul>
<li>Build a Signal System that detects, alerts and recovers software system from errors</li>
<li><a href="http://lssacademy.com/2009/02/13/genchi-genbutsu-do-you-really-understand-it/">Genchi Genbutsu</a> &#8211; Go and See -thoroughly and objectively understand problem before making decisions</li>
<li><a href="http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/">Remove root causes</a> &#8211; tolerate unexpected problems only once &#8211; use Toyota <a href="http://en.wikipedia.org/wiki/5_Whys">5 whys</a> and <a href="http://en.wikipedia.org/wiki/Kaizen">Kaizen</a>.</li>
</ul>
<p>This delivery mechanism enables <a href="http://www.ashmaurya.com/2009/12/achieving-flow-in-a-lean-startup/">fast product cycles</a> for market validation, refining product and eliminating risks.</p>
<div class="stress"><strong>Mental Shift:</strong> <em>Create lean continuous flow to achieve <a href="http://en.wikipedia.org/wiki/Just_in_time_(business)">just-in-time</a> delivery.</em></div>
<h3><strong>Outcome</strong><strong></strong></h3>
<p>Three mental shifts:</p>
<ol>
<li>Each Feature should improve a business model or increase learning about it.</li>
<li>A new feature is a <strong>Hypothesis </strong>about solution that should pass Ultimate Marketability Test to become Core.</li>
<li>Create lean continuous flow to achieve just-in-time delivery.</li>
</ol>
<p><img class="alignnone size-full wp-image-363" title="Process Found" src="http://softwarecreation.org/wp-content/uploads/2012/05/planet-found.jpg" alt="" width="640" height="480" /></p>
<p>A market-oriented team goes beyond regular development practices. Developers are not only building good software system focusing on technology, but they are <strong>improving product market chances</strong>, and become active contributors in the quest for <strong>repeatable and scalable business model</strong>.</p>
<p>Isn’t this kind of development the best process for any business?</p>
<h3>Books</h3>
<div class="left"><a class="noborder" href="http://www.amazon.com/gp/product/0307887898/ref=as_li_qf_sp_asin_il?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0307887898"><img src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0307887898&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=softwcreatmys-20&amp;ServiceVersion=20070822" alt="" border="0" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=softwcreatmys-20&amp;l=as2&amp;o=1&amp;a=0307887898" alt="" width="1" height="1" border="0" /></div>
<div class="left"><a class="noborder" href="http://www.amazon.com/gp/product/1449305172/ref=as_li_tf_il?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1449305172"><img src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=1449305172&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=softwcreatmys-20&amp;ServiceVersion=20070822" alt="" border="0" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=softwcreatmys-20&amp;l=as2&amp;o=1&amp;a=1449305172" alt="" width="1" height="1" border="0" /></div>
<div class="left"><a class="noborder" href="http://www.amazon.com/gp/product/0071392319/ref=as_li_tf_il?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0071392319"><img src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0071392319&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=softwcreatmys-20&amp;ServiceVersion=20070822" alt="" border="0" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=softwcreatmys-20&amp;l=as2&amp;o=1&amp;a=0071392319" alt="" width="1" height="1" border="0" /></div>
<div class="left"><a class="noborder" href="http://www.amazon.com/gp/product/0984999302/ref=as_li_tf_il?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0984999302"><img src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0984999302&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=softwcreatmys-20&amp;ServiceVersion=20070822" alt="" border="0" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=softwcreatmys-20&amp;l=as2&amp;o=1&amp;a=0984999302" alt="" width="1" height="1" border="0" /></div>
<div class="left"><a class="noborder" href="http://www.amazon.com/gp/product/0131407287/ref=as_li_tf_il?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0131407287"><img src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0131407287&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=softwcreatmys-20&amp;ServiceVersion=20070822" alt="" border="0" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=softwcreatmys-20&amp;l=as2&amp;o=1&amp;a=0131407287" alt="" width="1" height="1" border="0" /></div>
<div class="left"><a class="noborder" href="http://www.amazon.com/gp/product/0321601912/ref=as_li_tf_il?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321601912"><img src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0321601912&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=softwcreatmys-20&amp;ServiceVersion=20070822" alt="" border="0" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=softwcreatmys-20&amp;l=as2&amp;o=1&amp;a=0321601912" alt="" width="1" height="1" border="0" /></div>
<div class="left"><a class="noborder" href="http://www.amazon.com/gp/product/0470876417/ref=as_li_tf_il?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0470876417"><img src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0470876417&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=softwcreatmys-20&amp;ServiceVersion=20070822" alt="" border="0" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=softwcreatmys-20&amp;l=as2&amp;o=1&amp;a=0470876417" alt="" width="1" height="1" border="0" /></div>
<div class="clear"></div>
<p>Related posts:</p><ol>
<li><a href='http://softwarecreation.org/2009/the-elements-of-pragmatic-programming-style-composition/' rel='bookmark' title='The Elements of Pragmatic Programming Style. Composition.'>The Elements of Pragmatic Programming Style. Composition.</a></li>
<li><a href='http://softwarecreation.org/2009/when-should-you-release-early-and-often/' rel='bookmark' title='When should you Release Early and Often?'>When should you Release Early and Often?</a></li>
<li><a href='http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/' rel='bookmark' title='The Secret of Building Effective Software Systems'>The Secret of Building Effective Software Systems</a></li>
</ol><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=x2iqTjnV30c:h-mFtY_56DE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=x2iqTjnV30c:h-mFtY_56DE:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=x2iqTjnV30c:h-mFtY_56DE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=x2iqTjnV30c:h-mFtY_56DE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=x2iqTjnV30c:h-mFtY_56DE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=x2iqTjnV30c:h-mFtY_56DE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=x2iqTjnV30c:h-mFtY_56DE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=x2iqTjnV30c:h-mFtY_56DE:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareCreation/~4/x2iqTjnV30c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2012/know-what-software-features-to-build-next-user-stories-business-canvas-and-market/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://softwarecreation.org/2012/know-what-software-features-to-build-next-user-stories-business-canvas-and-market/</feedburner:origLink></item>
		<item>
		<title>Raising Software Architecture. 9 Troubles and 3 Answers</title>
		<link>http://feedproxy.google.com/~r/SoftwareCreation/~3/2qbsHdUoSIU/</link>
		<comments>http://softwarecreation.org/2012/raising-software-architecture-9-troubles-and-3-answers/#comments</comments>
		<pubDate>Sat, 21 Apr 2012 22:38:22 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Lean startup]]></category>
		<category><![CDATA[System]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=298</guid>
		<description>The main architecture goal is to strengthen and align system ideas, muscles and structures in areas most impacted by stress, changes and expansion. In short, architecture covers every important aspect of the software system. A good thoughtful software developer is torn apart by conflicting approaches  for architecting complex software system: Heavy upfront system design leads [...]
Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/' rel='bookmark' title='The Secret of Building Effective Software Systems'&gt;The Secret of Building Effective Software Systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2012/the-role-of-software-architecture-taming-a-monster/' rel='bookmark' title='The Role of Software Architecture: Taming a Monster.'&gt;The Role of Software Architecture: Taming a Monster.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2007/evolutionary-software-architecture-or-why-developers-are-not-janitors/' rel='bookmark' title='Evolutionary Software Architecture or Why Developers Are Not Janitors'&gt;Evolutionary Software Architecture or Why Developers Are Not Janitors&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-300" title="Raising Software Architecture" src="http://softwarecreation.org/wp-content/uploads/2012/04/RaisingArchitecture.jpg" alt="" width="640" height="420" /></p>
<blockquote><p>The main architecture goal is to strengthen and align system ideas, muscles and structures in areas most impacted by stress, changes and expansion.</p></blockquote>
<p>In short, architecture covers <a href="/2012/the-role-of-software-architecture-taming-a-monster/">every important aspect</a> of the software system.</p>
<p>A good thoughtful software developer is torn apart by conflicting approaches  for architecting complex software system:</p>
<ol>
<li>Heavy upfront system design leads to rigid, costly and over-engineered solutions</li>
<li>Ignored business and technical perspectives cause  business irrelevance or failure</li>
<li>Poor reliability, performance or flaws could kill promising beautiful software system</li>
</ol>
<p>What is the best approach to build a sound and successful system?<br />
<span id="more-298"></span></p>
<h3>Problems</h3>
<p>Let&#8217;s consider several architecture challenges that a software team faces during system development.</p>
<ol>
<li><strong>Idealism</strong> (assumed known knowns) &#8211; mostly theoretical views, lack of practical experience, illusions. We often exaggerate our intellectual abilities to find right solution theoretically.</li>
<li><strong>Open problems</strong> (known unknowns) &#8211; problems or needs without foreseeable solution. These evil inconvenient unknowns could seriously impact the course of the project</li>
<li><strong>Uncertainty</strong> (unknown unknowns) &#8211; low predictability of the future in technology, business and Universe. Many good decisions could turn to be wrong after some time.</li>
<li><strong>Over-complication</strong> &#8211; <a href="http://en.wikipedia.org/wiki/Overengineering">over-engineering</a> for domain problems because of over-thinking, misunderstanding, lack of information or technical enthusiasm. Over-complication steals development time and increase cost and complexity.</li>
<li><strong>Fragility</strong> &#8211; poor system quality (performance, reliability, uptime, security, etc.). Neglecting quality could cost reputation and harm system success.</li>
<li><strong>Complexity</strong> &#8211; complex structures, unpredictable behavior and states that turn a system into the Ball of Mud.</li>
<li><strong>Inconsistency</strong> &#8211; dissonance of the system approaches and parts; fragmented and incomplete knowledge in heads. Development teams produce incoherent system without coordination of ideas and implementation.</li>
<li>b- difficulties to introduce disruptive changes (for business, users, operations). People and established processes resist changes and have inertia that is difficult to overcome.</li>
<li><strong>Misalignment</strong> &#8211; with business goals, existing systems, infrastructure. Building a software system without considering business vision, existing IT landscape is the path to disaster.</li>
</ol>
<h3>Three Architecture Answers</h3>
<p>There are 3 useful approaches to Software Architecture that address these challenges:</p>
<ol>
<li>Strategic</li>
<li>Technical</li>
<li>Evolutionary</li>
</ol>
<h3>1. Strategic Architecture</h3>
<p><em>“Plans are nothing; planning is everything.”</em> &#8211; Dwight D. Eisenhower</p>
<p><strong>Question:</strong> What are direction, constraints and external factors?</p>
<p><strong>How:</strong> dedicated architecture group moves ahead of the main development activities to align ideas for business, development, infrastructure and partners.</p>
<p><strong>Attacks challenges</strong></p>
<ul>
<li>Misalignment</li>
<li>Inertia</li>
</ul>
<p><strong><strong> Outcome<br />
</strong></strong>Strategic Architecture defines a system playing field:</p>
<ul>
<li><strong>Vision</strong>: system goals, purpose and desired end-state</li>
<li><strong>Domain</strong>: business needs and problems to solve; describe models and processes</li>
<li><strong>Constraints</strong>: budget, time and resources; acceptable system qualities</li>
<li><strong>IT landscape</strong>: existing infrastructure, required integration with internal and partner systems; standards and API</li>
<li><strong>Coordination</strong>: release planning, deployment and all necessary steps to build and operate successful systems.</li>
</ul>
<p><strong><strong>Approach</strong></strong></p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Business_Model_Canvas">Business Canvas</a> &#8211; strategic tool for business models</li>
<li><a href="http://en.wikipedia.org/wiki/Domain-driven_design">Domain Driven Design</a> &#8211; implementation of core business concepts</li>
<li><a href="http://en.wikipedia.org/wiki/Enterprise_architecture">Enterprise Architecture</a> &#8211; organizing logic for complex business and IT fields.</li>
</ul>
<h3 dir="ltr">2. Technical Architecture</h3>
<p><em>“Vision without execution is hallucination.”</em> &#8211; Thomas A. Edison</p>
<p><strong>Question</strong>: How to build a solid well-engineered system?</p>
<p><strong>How</strong>: Developers predict (based on experience and preliminary information) possible challenges and future requests and implement architecture elements early (system layers, databases, security, caching) keeping system consistent and meeting required system qualities.</p>
<p><strong>Attacks challenges</strong></p>
<ul>
<li>Complexity</li>
<li>Fragility</li>
<li>Inconsistency</li>
</ul>
<p><strong><strong> Outcome<br />
</strong></strong>Technical architecture proactively cares about building an excellent engineering solution:</p>
<ul>
<li><strong>Technology</strong>: technical and development platforms</li>
<li><strong>Organization</strong>: well structured software system, where all elements fit together without excessive dependencies and side effects</li>
<li><strong>System Qualities</strong>: reliability, performance and other quality targets; protection against failures and security threats</li>
<li><strong>Integrity</strong>: consistency in developers heads, their approaches and system implementation</li>
</ul>
<p><strong><strong>Approach</strong></strong></p>
<ul>
<li>Architecture patterns and principles: open-closed, single responsibility, separation of concerns, dependency inversions, etc.</li>
<li>QA; failure  and performance testing</li>
<li>Pair Programming, code reviews and threat assessment</li>
</ul>
<h3 dir="ltr">3. Evolutionary Architecture</h3>
<p><em>&#8220;In theory there is no difference between theory and practice. In practice there is.&#8221;</em> &#8211; Yogi Berra</p>
<p><strong>Question</strong>: How to find the most optimal design and adapt the system to unknown?</p>
<p><strong>How</strong>: Architecture emerges as a result of iterative development and refining the system for the most important business needs and optimal design.</p>
<p><strong>Attacks challenges</strong></p>
<ul>
<li>Idealism</li>
<li>Uncertainty</li>
<li>Open problems</li>
<li>Over-complication</li>
</ul>
<p><strong><strong> Outcome<br />
</strong></strong>Evolutionary architecture grows a system by quickly adapting for new discoveries, changes and feedback</p>
<ul>
<li><strong>Quick validation</strong> and refinement of ideas</li>
<li><strong>Optimal design</strong> &#8211; well-refactored system based on the best development practices and design principles</li>
<li><strong>Fast learning</strong></li>
</ul>
<p><strong><strong>Approach</strong></strong></p>
<ul>
<li>Agile practices: iterations, refactoring, continuous integration</li>
<li>Start small with end-to-end simple, but working solution and grow based on learning what is needed and important</li>
<li><a href="http://en.wikipedia.org/wiki/Lean_Startup">Lean startup</a> with ideas adaptation and validation</li>
</ul>
<h3 dir="ltr">Selecting right Architecture Mix</h3>
<p>The choice is not what kind of architecture is needed, but what is the right mix</p>
<p><strong><strong><img class="alignnone size-full wp-image-309" title="Architecture Rose" src="http://softwarecreation.org/wp-content/uploads/2012/04/ArchitectureRose.png" alt="" width="613" height="416" /><br />
</strong></strong></p>
<div dir="ltr">
<table border="1">
<tbody>
<tr>
<td><strong>Context / Approach</strong></td>
<td><strong>Strategic</strong></td>
<td><strong>Technical</strong></td>
<td><strong>Evolutionary</strong></td>
</tr>
<tr valign="top">
<td><strong>Startup</strong> (new business, uncertainty)</td>
<td>Medium</p>
<ul>
<li>Fit for business and potential customers</li>
</ul>
</td>
<td>Low</p>
<ul>
<li>Cover most basic needs and demands</li>
<li>Avoid large effort that is expensive and premature &#8211; everything could change</li>
</ul>
</td>
<td>High</p>
<ul>
<li>Grow the system incrementally</li>
<li>Explore, experiment, validate and learn</li>
</ul>
</td>
</tr>
<tr valign="top">
<td><strong>Growing business</strong> (expansion, new projects, existing expertise and infrastructure)</td>
<td>Medium</p>
<ul>
<li>Integration with existing systems and projects</li>
<li>Adjust to business needs and customers</li>
</ul>
</td>
<td>Medium</p>
<ul>
<li>Support demands and system quality expectations</li>
<li>Provide integrity of a solution and adequate system design for increasing complexity</li>
</ul>
</td>
<td>Medium</p>
<ul>
<li>Reduce uncertainty, solve emerging problems</li>
<li>Refine and optimize growing system</li>
</ul>
</td>
</tr>
<tr valign="top">
<td><strong>Technological frontier</strong> (technical complexity, open non-trivial problems, innovative solutions, rapid growth)</td>
<td>Low</p>
<ul>
<li>Potential markets and possible business models are not clear</li>
<li>The team is focusing more on technical problems</li>
</ul>
</td>
<td>High</p>
<ul>
<li>Engineering excellence</li>
<li>Embracing complexity, technical challenges and constraints</li>
</ul>
</td>
<td>Medium</p>
<ul>
<li>Adapting to changing demands and discoveries</li>
<li>Learning and experimenting</li>
</ul>
</td>
</tr>
<tr valign="top">
<td><strong>Large business</strong> (many moving parts, maintenance, stability, bureaucracy)</td>
<td>High</p>
<ul>
<li>Alignment with complex existing landscapes: IT, organizational, political and business</li>
</ul>
</td>
<td>High</p>
<ul>
<li>Organize large teams to implement for known domains</li>
<li>Integrate to existing infrastructure and systems</li>
<li>Stabilize, support SLA and standards</li>
</ul>
</td>
<td>Low</p>
<ul>
<li>High predictability is more important</li>
<li>There are enough resources to tolerate inefficiency and inhibited adaptation</li>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p><em>One cannot embrace the unembraceable</em> and deeply focus on all architectural dimensions at the same time. However, you can tailor your approach to your current situation and most pressing challenges.</p>
<p>Right architecture mix will greatly increase chances of your system success!</p>
<p>&nbsp;</p>
<p>Related posts:</p><ol>
<li><a href='http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/' rel='bookmark' title='The Secret of Building Effective Software Systems'>The Secret of Building Effective Software Systems</a></li>
<li><a href='http://softwarecreation.org/2012/the-role-of-software-architecture-taming-a-monster/' rel='bookmark' title='The Role of Software Architecture: Taming a Monster.'>The Role of Software Architecture: Taming a Monster.</a></li>
<li><a href='http://softwarecreation.org/2007/evolutionary-software-architecture-or-why-developers-are-not-janitors/' rel='bookmark' title='Evolutionary Software Architecture or Why Developers Are Not Janitors'>Evolutionary Software Architecture or Why Developers Are Not Janitors</a></li>
</ol><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=2qbsHdUoSIU:PoT04iAjrgM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=2qbsHdUoSIU:PoT04iAjrgM:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=2qbsHdUoSIU:PoT04iAjrgM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=2qbsHdUoSIU:PoT04iAjrgM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=2qbsHdUoSIU:PoT04iAjrgM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=2qbsHdUoSIU:PoT04iAjrgM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=2qbsHdUoSIU:PoT04iAjrgM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=2qbsHdUoSIU:PoT04iAjrgM:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareCreation/~4/2qbsHdUoSIU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2012/raising-software-architecture-9-troubles-and-3-answers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://softwarecreation.org/2012/raising-software-architecture-9-troubles-and-3-answers/</feedburner:origLink></item>
		<item>
		<title>The Role of Software Architecture: Taming a Monster.</title>
		<link>http://feedproxy.google.com/~r/SoftwareCreation/~3/-FEWxHJ402A/</link>
		<comments>http://softwarecreation.org/2012/the-role-of-software-architecture-taming-a-monster/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 17:23:48 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[System]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=270</guid>
		<description>The software system in the period of active growth is a really wild beast. Excited developers with creative minds and feature obsessed marketers consistently add the fuel to this fire of software creation. Uncontrollable growth, race for features and engineering wonders sometimes give rise to a monster &amp;#8211; a software system bloated with useless features, [...]
Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/' rel='bookmark' title='The Secret of Building Effective Software Systems'&gt;The Secret of Building Effective Software Systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2007/evolutionary-software-architecture-or-why-developers-are-not-janitors/' rel='bookmark' title='Evolutionary Software Architecture or Why Developers Are Not Janitors'&gt;Evolutionary Software Architecture or Why Developers Are Not Janitors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2007/do-we-need-software-architects-10-reasons-why-not/' rel='bookmark' title='Do We Need Software Architects? 10 Reasons Why Not'&gt;Do We Need Software Architects? 10 Reasons Why Not&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-272" title="Wild Software Beast" src="http://softwarecreation.org/wp-content/uploads/2012/02/WildSoftwareBeast.png" alt="" width="576" height="310" /></p>
<p>The software system in the period of active growth is a really wild beast. Excited developers with creative minds and feature obsessed marketers consistently add the fuel to this fire of software creation.</p>
<p>Uncontrollable growth, race for features and engineering wonders sometimes give rise to a monster &#8211; a software system bloated with useless features, over-engineered internals and erratic behavior.</p>
<p><span id="more-270"></span></p>
<p><img class="alignnone size-full wp-image-285" title="Software Monster" src="http://softwarecreation.org/wp-content/uploads/2012/02/Software-Monster1.png" alt="" width="600" height="400" /></p>
<p>At some point, developers stop understanding the system and start fearing it while doing less and less productive attempts to fix and grow it under pressure from screaming users and management.</p>
<h4>What is happening during this transformation of the bright promising software idea into a scary monster system?</h4>
<p>Here is a complete state diagram of a wild young software system growth:</p>
<p><img class="alignnone size-full wp-image-284" title="Software Development Loops" src="http://softwarecreation.org/wp-content/uploads/2012/02/Software-Loops.png" alt="" width="600" height="500" /></p>
<p>&nbsp;</p>
<p>The root reason of this scary transformation is <strong>get-out-of-control complexity</strong>. Eventually, <strong>Success Loop</strong> dries up and <strong>Failure Loop </strong>takes over and lead the software system to disaster.</p>
<p>What could prevent this pitiful descent and ensure long-term health of the software system?</p>
<h3>Here comes Architecture!</h3>
<p>The primary goal of the software architecture is <strong>taming complexity </strong>of the <strong>functionally growing</strong> <strong>software system</strong> <strong>under</strong> physical <strong>load</strong> from demanding users, harsh environmental impact and psychological pressure from managers. Architecture attacks and reduces effects of the software development <strong>Failure Loop</strong>.</p>
<p>Good architecture strengthens and aligns <strong>system ideas, muscles and structures</strong> in areas most impacted by <strong>stress, changes and expansion</strong>.</p>
<p><strong>Three Architecture Responsibilities:</strong></p>
<ol>
<li>Explain and carry <strong>The Theory</strong> of the system. Align new ideas and needs with system realities.</li>
<li>Guide system <strong>Organization</strong>. Enable fast growth and modifications.</li>
<li>Support required system <strong>Qualities</strong> (stability, performance, security, etc). Make system behave well.</li>
</ol>
<h3>1. Architecture Carries The Theory of The System</h3>
<p><em>A theory is the more impressive the greater is the simplicity of its premises, the more different are the kinds of things it relates and the more extended the range of its applicability.</em> &#8211; Albert Einstein<em></em></p>
<p>Creating Software Architecture means building <strong>a common theory</strong> that explains the software system. It is an attempt to join many fragmented pieces into a package that is consistent and easy to digest for human brains Architecture creates bird’s-eye view on mundane torrent of code details, states and behaviors.</p>
<p>Architecture is the essence of <strong>what, why and how of the software system</strong>. It is <strong>a set of ideas and explanations</strong> that allow humans to make sense of the system. A small system require little help to understand. A large complex system requires a lot of explanation &#8211; volumes of information, pictures and tales from people who had firsthand account of the battle for the system.</p>
<p><strong> </strong><strong>Concerns</strong></p>
<ol>
<li><strong>Simplicity </strong>- fight complexity on every possible level. Simple systems are easy to grow and maintain. More complex system lead to stressed minds and broken hearts.<strong></strong></li>
<li><strong>Clarity </strong>- tune everything about the system (ideas, design, code, documentation, etc.) for better digestion by human brains. <strong></strong></li>
<li><strong>Interpretation </strong>- how close the system reflects the business concepts in implementation. Is it direct translation that guides system organization and logic or irrelevant pile of technical ideas?<strong></strong></li>
</ol>
<p><strong>Methods</strong></p>
<ol>
<li><strong><a href="http://en.wikipedia.org/wiki/Domain-driven_design">Domain Driven Development</a></strong> is an excellent approach for translating customer domain into relevant architecture</li>
<li><strong>Conceptual models</strong> translate vague business ideas into formal description of the problem space.</li>
<li><strong>Metaphors and abstractions</strong> bring disjointed ideas into coherent whole that is easier to digest.</li>
<li><strong>Shared language</strong> and domain-driven naming synchronize customer domain and technical ideas.</li>
<li><strong>Storytelling, user personas and usage scenarios</strong> help to convert overwhelming information massives into easy to remember chunks that are friendly for developer’s brains.</li>
</ol>
<h3>2. Architecture Guides System Organization</h3>
<p><em>Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. </em>-Antoine de Saint-Exupery<em></em></p>
<p>The software system is a system (not surprisingly) with elements, structures, connections. All this stuff is a projection of the theory into practice.</p>
<p><strong>Concerns</strong>:<strong></strong></p>
<ol>
<li><strong>Flexibility </strong>- ease of change without painful struggle, breaking the system and causing unexpected <a href="http://en.wikipedia.org/wiki/Butterfly_effect">butterfly effects</a> (side-effects).<strong></strong></li>
<li><strong>Integrity </strong>- alignment and good fit of parts with each other and overall theory of the system that create coherent tight assembly.<strong></strong></li>
<li><strong>Preservation </strong>- ease of keeping original system intent and healthy organization without hacks and workarounds.<strong></strong></li>
</ol>
<h4>Structure and Dependencies</h4>
<p>Complexity and problems are often coming from internal mess and tangled dependencies.</p>
<p><strong>Methods</strong></p>
<ol>
<li><a href="http://en.wikipedia.org/wiki/Separation_of_concerns"><strong>Separation of Concerns</strong></a> &#8211; breaking down and taming smaller groups of related elements reducing overall complexity of the system (modules, hierarchies, layers, etc.)<strong></strong></li>
<li><strong>Restrain dependencies</strong> &#8211; reduce elements connections (with <a href="http://en.wikipedia.org/wiki/Information_hiding">isolation</a>) and side-effects (with <a href="http://www.artima.com/intv/dry3.html">orthogonality</a>).<strong></strong></li>
<li><strong>Generalization </strong>- rely mostly on abstractions and interfaces, hide concrete implementation on lower level.<strong></strong></li>
<li><strong>Federation of specialized components</strong> &#8211; favor reusable smaller components with narrow responsibilities to big rigid elements or procedures suited only for one scenario.<strong></strong></li>
<li><strong>Design and Architecture patterns</strong> are an excellent source of design ideas and their trade-offs.<strong></strong></li>
</ol>
<h4>Minimization</h4>
<p><em>Every piece of knowledge must have a single, unambiguous, and authoritative representation within a system.</em> &#8211; The Pragmatic Programmer<em></em></p>
<p>Producing more code inevitably increase complexity and reduce mental control. Architecture helps to focus on keeping clean minimal codebase for needed functionality.</p>
<p><strong>Methods</strong></p>
<ol>
<li><strong>Use 3d party</strong> &#8211; integration with existing libraries, components and services could significantly reduce system codebase and required effort. Certainly, there are <a href="http://softwarecreation.org/2010/should-an-effective-developer-innovate-imitate-or-just-integrate/">some risks and shortcomings</a>.<strong></strong></li>
<li><strong>Maximize reuse &amp; follow </strong><a href="http://media.pragprog.com/articles/may_04_oo1.pdf"><strong>DRY</strong></a> &#8211; avoid duplication and cloning<strong></strong></li>
<li><strong>Refactoring</strong> &#8211; continuously improve system design to keep it in minimal, optimal and clean state<strong></strong></li>
<li><strong>Abstraction </strong>- synthesize system concepts and elements to avoid different solutions to similar problems.<strong></strong></li>
</ol>
<h4>Extensibility</h4>
<p><em>A system should be open for extension but closed for modification</em> &#8211; <a href="http://www.objectmentor.com/resources/articles/ocp.pdf">The Open Closed Principle</a><em></em></p>
<p>A software system should provide an easy way to extend and add new features without invasive surgery on already tested and working parts. Architecture helps to consciously establish this way.</p>
<p><strong>Methods</strong></p>
<ol>
<li><a href="http://martinfowler.com/bliki/PublishedInterface.html"><strong>Published API</strong></a> &#8211; stable and officially endorsed set of interfaces that open ways for safe and supported way to manipulate a system.<strong></strong></li>
<li><strong>Extension points</strong> &#8211; clear definition of intent to extend through interfaces, inheritance, etc.<strong></strong></li>
<li><strong>Pluggable architecture</strong> &#8211; allow to add elements in formalized way with open framework infrastructure and component specifications (WordPress, jQuery)<strong></strong></li>
</ol>
<h3>3. Architecture supports System Qualities</h3>
<p><em>Better to be rich and healthy than poor and sick.</em> &#8211; Russian proverb<em></em></p>
<p>Correct, secure and responsive system is much better than buggy, vulnerable and slow. However complex software systems under heavy unpredictable usage could easily degrade to a pitiful state of sick unruly monster.  Proper architecture could prevent this bad behavior and keep the system within borders of correct, well-performing and stable state in most situations.</p>
<p>There are three important characteristics: Stability, Performance and Protection.</p>
<h4>Stability</h4>
<ol>
<li><strong>Resilience and self-healing</strong> &#8211; ability to survive and recover from surges and failures<strong></strong></li>
<li>Elements <strong>packaging and release management</strong> &#8211; the way to package and release elements to avoid disruptive shocks to the system on updates.</li>
<li><strong>End-to-end testability, automated testing and sandbox environments</strong> &#8211; ability to completely simulate the system live behaviour in short time before release into wild<strong></strong></li>
<li>Freeze <strong>published interfaces</strong> and provide legacy support for dependant subsystems</li>
<li><strong>Monitoring,  signal system and self-assessment</strong> &#8211; promptly alert when something goes wrong<strong></strong></li>
<li><strong>Operational manageability and control </strong>- easy to manage and configure</li>
</ol>
<h4>Performance</h4>
<ol>
<li><strong>Optimize processing, data flows and storage </strong>- achieve right balance between fresh data and cache, throughput and latency, processor cycles and memory.<strong></strong></li>
<li><strong>Scalabiliy</strong> - ability to scale the system with increased load (replication, distribution, partitioning / sharding)<strong></strong></li>
<li><a href="http://en.wikipedia.org/wiki/Theory_of_constraints"><strong>Elimination of bottlenecks</strong></a> and easing of stress lines</li>
</ol>
<h4>Protection &#8211; from threats, disasters and surges</h4>
<ol>
<li><strong>Security, proactive defence, threat assessment and detection</strong> - resist hackers and vandals<strong></strong></li>
<li><strong>Backups, standby reserves / redundancy, multiple locations</strong> - avoid single points of failure and have ability to fully restore in case of bad crashes and losses.<strong></strong></li>
<li><strong>Prepare for worst</strong> - closely monitor points of failure; simulate and train people to recover from disasters.</li>
</ol>
<h3><img class="alignnone size-full wp-image-283" title="Architecture Targets" src="http://softwarecreation.org/wp-content/uploads/2012/02/ArchitectureTargets1.png" alt="" width="600" height="400" /></h3>
<h3>Raising Architecture</h3>
<p>As any theory, software architecture could be bad or great, helpful or misleading, clear or convoluted. Architecture directly impacts the fate of any non-trivial software system.</p>
<p>&nbsp;</p>
<p>The real architecture is not a static theory or prescription how to build the software system. This is a theory that emerges with the growth of the system, refined by discoveries and failures. Developers adapt this theory to fit harsh realities of the external world, confusing requirements, management pressure and user demands. And in return, good architecture helps to keep the system consistent, stable and controllable over the time.</p>
<p>&nbsp;</p>
<p>The main benefit of architecture is ability to effectively grow the system that embrace demands, bring market success and makes people happy. Tame your software monster and make it obedient machine! <img src='http://softwarecreation.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><img class="alignnone size-full wp-image-277" title="Obedient Software Machine" src="http://softwarecreation.org/wp-content/uploads/2012/02/ObedientSoftwareMachine.jpg" alt="" width="528" height="300" /></p>
<p>Related posts:</p><ol>
<li><a href='http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/' rel='bookmark' title='The Secret of Building Effective Software Systems'>The Secret of Building Effective Software Systems</a></li>
<li><a href='http://softwarecreation.org/2007/evolutionary-software-architecture-or-why-developers-are-not-janitors/' rel='bookmark' title='Evolutionary Software Architecture or Why Developers Are Not Janitors'>Evolutionary Software Architecture or Why Developers Are Not Janitors</a></li>
<li><a href='http://softwarecreation.org/2007/do-we-need-software-architects-10-reasons-why-not/' rel='bookmark' title='Do We Need Software Architects? 10 Reasons Why Not'>Do We Need Software Architects? 10 Reasons Why Not</a></li>
</ol><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=-FEWxHJ402A:XWlF3NiN1oc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=-FEWxHJ402A:XWlF3NiN1oc:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=-FEWxHJ402A:XWlF3NiN1oc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=-FEWxHJ402A:XWlF3NiN1oc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=-FEWxHJ402A:XWlF3NiN1oc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=-FEWxHJ402A:XWlF3NiN1oc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=-FEWxHJ402A:XWlF3NiN1oc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=-FEWxHJ402A:XWlF3NiN1oc:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareCreation/~4/-FEWxHJ402A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2012/the-role-of-software-architecture-taming-a-monster/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://softwarecreation.org/2012/the-role-of-software-architecture-taming-a-monster/</feedburner:origLink></item>
		<item>
		<title>Can Software Team deliver like McDonalds?</title>
		<link>http://feedproxy.google.com/~r/SoftwareCreation/~3/V6jsUUQqlB4/</link>
		<comments>http://softwarecreation.org/2011/can-software-team-deliver-like-mcdonalds/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 01:08:14 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Practices]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=243</guid>
		<description>What does a customer wants? Usually your customer wants to know a simple thing &amp;#8211; when your team will deliver working software based on agreed requirements. They naively want to safely bet on highly uncertain future outcome &amp;#8211; delivery of the complex never created before system that completely fulfil their dreams. The customer wants reliable [...]
Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/' rel='bookmark' title='How to rescue failing software projects: The Toyota Way'&gt;How to rescue failing software projects: The Toyota Way&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2009/the-elements-of-pragmatic-programming-style-composition/' rel='bookmark' title='The Elements of Pragmatic Programming Style. Composition.'&gt;The Elements of Pragmatic Programming Style. Composition.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/' rel='bookmark' title='The Secret of Building Effective Software Systems'&gt;The Secret of Building Effective Software Systems&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
			<content:encoded><![CDATA[<div>
<h3><img class="alignnone size-full wp-image-257" title="McDonald's" src="http://softwarecreation.canadianray.com/wp-content/uploads/2011/07/mcdonalds1.jpg" alt="McDonald's" width="600" height="462" /></h3>
<h3><span>What does a customer wants?</span></h3>
<p>Usually your customer wants to know a simple thing &#8211; when your team will deliver working software based on agreed requirements. They naively want to safely bet on highly uncertain future outcome &#8211; delivery of the complex never created before system that completely fulfil their dreams.</p>
<p>The customer wants reliable McDonalds experience, but with a little tweak &#8211; they want to hand in their own exclusive menu, often created by people who don’t have any idea how to cook.</p>
<p>In short, the customer requires creative flexibility of Cooking Master Chef fortified by ability to predictably deliver hamburgers as McDonalds.</p>
<p>But, is it possible in our development reality to chase two opposing goals &#8211; Predictability and Flexibility in the same time?</p>
<p><span id="more-243"></span></p>
<h3 dir="ltr">Predictability vs Flexibility</h3>
<p><img class="alignnone size-full wp-image-248" title="Predictability vs. Flexibility" src="http://softwarecreation.canadianray.com/wp-content/uploads/2011/07/predictability-flexibility.jpg" alt="Predictability vs. Flexibility" width="621" height="285" /></p>
<p>The best way to achieve predictability is standardization &#8211; formalize process, nail-down rules, follow and optimize them mercilessly. However, standards have negative effects &#8211; lower morale, inhibited creativity, reduced flexibility and slower response to changes.</p>
<p>Rapid adaptation is the best way to to be flexible &#8211; eagerness to quickly regroup and self-organize to address new challenges and creatively solve new problems. However, constant changes and creativity sparks lead to unpredictable and ad-hoc results without much opportunity to stabilize and optimize delivery.</p>
<p>Standardization is a crystallized answer to past events &#8211; how to repeat effectively something that was solved before and proved to work.</p>
<p>Adaptation is the response to current events &#8211; how to embrace unforeseen requests, challenges and events.</p>
<p>Standardization has own cost &#8211; processes and rules should be maintained, reviewed and optimized otherwise they will become source of overhead, rigidity and frustration. But if there is no standardization, lessons and best practices could be lost or not followed.</p>
<p>It is difficult, but possible to chase these two contrary goals in the same time. Build standards to solve repeating problems and optimize recurring activities. Adapt to meet new challenges.</p>
<p><img class="alignnone size-full wp-image-266" title="Predictability vs. Flexibility details" src="http://softwarecreation.canadianray.com/wp-content/uploads/2011/07/predictability-flexibility-22.jpg" alt="Predictability vs. Flexibility details" width="714" height="366" /></p>
<h3 dir="ltr">Team Maturity Matrix</h3>
<p>Development teams have different capabilities to strike both predictable and flexible delivery.</p>
<p><img class="alignnone size-full wp-image-250" title="Team matrix" src="http://softwarecreation.canadianray.com/wp-content/uploads/2011/07/team-matrix.jpg" alt="Team matrix" width="413" height="290" /></p>
<ul>
<li><strong>Amateurs</strong> &#8211; do even simple things&#8230; unpredictably</li>
<li><strong>Explorers</strong> &#8211; capable of solving complex non-standard problems, but cannot guarantee time and budget (Ph.D guys)</li>
<li><strong>Mechanics</strong> &#8211; very efficient with standard solutions, but struggle with new stuff (anal-retentive guys)</li>
<li><strong>Regulars</strong> &#8211; predictability of delivery lowers for more challenging problems</li>
<li><strong>Strike Force</strong> &#8211; deliver reliable results for any type of problem</li>
</ul>
<p>Any team should grow from Amateur status, but rare team could become Strike Force that mastered both &#8211; predictable and flexible delivery. Than what direction of growth to choose? It depends on nature of projects and problems the team tackle.</p>
<h3 dir="ltr">Finding sweet spot</h3>
<p><img class="alignnone size-full wp-image-251" title="Growth Focus" src="http://softwarecreation.canadianray.com/wp-content/uploads/2011/07/growth-focus.jpg" alt="Growth Focus" width="549" height="298" /></p>
<p>Predictable delivery requires reduced variations in development process: uniform, ordered and consistent approach with focus on high efficiency.</p>
<p>Flexible delivery requires increased variations in the process: enabling more options, wider range of responses to improve fitness in changing environment.</p>
<p>These 2 goals could compliment each other. Predictability (with standardization) could bring consistency and stability in volatile and evolving development ecosystem. Adaptation helps to improve and find better standards and ideas for established processes.</p>
<p><img class="alignnone size-full wp-image-252" title="Finding Sweet Spot - Predictability vs. Flexibility" src="http://softwarecreation.canadianray.com/wp-content/uploads/2011/07/process.jpg" alt="process" width="726" height="377" /></p>
<div dir="ltr">
<table border="0">
<colgroup>
<col width="*"></col>
<col width="*"></col>
</colgroup>
<tbody>
<tr valign="top">
<td><strong>Predictable delivery</strong> &#8211; reduce variations, increase efficiency and productivity<br />
Repeatable, well known steps and technology &#8211; candidates for standardization (concrete rules)</td>
<td><strong>Flexible delivery</strong> &#8211; increase variations and fitness<br />
New, uncertain events, requests and challenges &#8211; adaptation and transformation (principles, patterns)</td>
</tr>
<tr valign="top">
<td>Development</p>
<ul>
<li>Proven solutions</li>
<li>Standard development platforms and tools</li>
</ul>
<ul>
<li>Formalized architecture patterns and design conventions</li>
<li>Approved external libraries and vendors</li>
<li>Code standards</li>
</ul>
<p>Stabilization and control</p>
<ul>
<li>PM software</li>
</ul>
<ul>
<li>Production and Development Environments</li>
<li>Source Control</li>
<li>Iterations and process flows</li>
<li>QA</li>
<li>Development management</li>
</ul>
<p>Checklists</p>
<ul>
<li>Product launch</li>
<li>Security</li>
<li>SEO</li>
</ul>
<p>Templates</p>
<ul>
<li>User Stories</li>
<li>Architecture and Functional specifications</li>
<li>Test cases</li>
</ul>
<p>Procedures</p>
<ul>
<li>Interviews, hiring</li>
<li>New version release</li>
<li>Retrospectives</li>
</ul>
<p>Automation</p>
<ul>
<li>Unit and System Testing</li>
<li>Build and Deployment</li>
<li>System monitoring and validation</li>
</ul>
<p>Elimination and optimization</p>
<ul>
<li>Waste</li>
<li>Stress / overburden</li>
<li>Inconsistency</li>
</ul>
<p>Measurement</p>
<ul>
<li>Defects</li>
<li>Productivity</li>
<li>Time, resources, work-in progress</li>
<li>Deviation from standards</li>
</ul>
</td>
<td>Development</p>
<ul>
<li>Innovative and creative solutions</li>
<li>New platforms and emerging technologies</li>
<li>Experiments, prototypes, pilot projects</li>
<li>Design competitions</li>
<li>Stay on edge &#8211; use of modern libraries, tools and techniques</li>
</ul>
<p>Expansion</p>
<ul>
<li>New business opportunities</li>
<li>New products and features</li>
<li>Market niches and trends</li>
<li>Self-organization and initiative</li>
</ul>
<p>Idea formation</p>
<ul>
<li>Brainstorming</li>
<li>JAD sessions</li>
<li>Research</li>
<li>Analytics</li>
<li>Team suggestions</li>
<li>Customer feedback</li>
</ul>
<p>Challenges and response</p>
<ul>
<li>Competition</li>
<li>System problems</li>
<li>Emergencies</li>
<li>Conflicts</li>
<li>Team / organization changes</li>
<li>Unsatisfied users</li>
<li>Falling sales</li>
</ul>
<p>Measurements</p>
<ul>
<li>Growth</li>
<li>Rate of innovation</li>
<li>New ideas and creativity</li>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
<p>So, can team deliver as McDonalds, but using exclusive menu? Yes, if they not only excel in programming, but also excel in the way they work &#8211; persistently re-evaluating approaches and improving both predictability and flexibility.</p>
<p>There are three simple requirements for the team</p>
<ol>
<li>Follow standards (minimal, adhering to principles)</li>
<li>Challenge standards (not relevant, rigid, impeding, excessive)</li>
<li>Introduce and Improve standards (from lessons learned, best practices, enhancing flexibility and value stream)</li>
</ol>
<p>And you will build powerful development machine that continuously transforming to embrace fluid reality while keeping steadiness and predictability as McDonalds.</p>
<p><img class="alignnone size-full wp-image-254" title="mcdonalds-team" src="http://softwarecreation.canadianray.com/wp-content/uploads/2011/07/mcdonalds-team.jpg" alt="mcdonalds-team" width="304" height="420" /></div>
<p>Related posts:</p><ol>
<li><a href='http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/' rel='bookmark' title='How to rescue failing software projects: The Toyota Way'>How to rescue failing software projects: The Toyota Way</a></li>
<li><a href='http://softwarecreation.org/2009/the-elements-of-pragmatic-programming-style-composition/' rel='bookmark' title='The Elements of Pragmatic Programming Style. Composition.'>The Elements of Pragmatic Programming Style. Composition.</a></li>
<li><a href='http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/' rel='bookmark' title='The Secret of Building Effective Software Systems'>The Secret of Building Effective Software Systems</a></li>
</ol><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=V6jsUUQqlB4:hPBpHkNcJ8o:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=V6jsUUQqlB4:hPBpHkNcJ8o:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=V6jsUUQqlB4:hPBpHkNcJ8o:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=V6jsUUQqlB4:hPBpHkNcJ8o:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=V6jsUUQqlB4:hPBpHkNcJ8o:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=V6jsUUQqlB4:hPBpHkNcJ8o:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=V6jsUUQqlB4:hPBpHkNcJ8o:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=V6jsUUQqlB4:hPBpHkNcJ8o:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareCreation/~4/V6jsUUQqlB4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2011/can-software-team-deliver-like-mcdonalds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://softwarecreation.org/2011/can-software-team-deliver-like-mcdonalds/</feedburner:origLink></item>
		<item>
		<title>Stuck on a Big Hard Programming Task? Read this!</title>
		<link>http://feedproxy.google.com/~r/SoftwareCreation/~3/hi3sAi51Dpk/</link>
		<comments>http://softwarecreation.org/2011/stuck-on-a-big-hard-programming-task-read-this/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 00:18:45 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Practices]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=232</guid>
		<description>Sometimes I am stuck on a mind-boggling task. I know this because I found myself fiddling around, giving advises to other people, searching for food, drinking coffee or working on low priority stuff. Clock is ticking but little gets done. After I notice this unfortunate state, I talk with myself seriously &amp;#8211; calling to conscience, [...]
Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2008/pair-programming-to-do-or-not-to-do/' rel='bookmark' title='Pair Programming: To Do or Not To Do'&gt;Pair Programming: To Do or Not To Do&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-approach/' rel='bookmark' title='The Elements of Pragmatic Programming Style. Approach.'&gt;The Elements of Pragmatic Programming Style. Approach.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2009/the-elements-of-pragmatic-programming-style-composition/' rel='bookmark' title='The Elements of Pragmatic Programming Style. Composition.'&gt;The Elements of Pragmatic Programming Style. Composition.&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
			<content:encoded><![CDATA[<div><img class="alignnone" title="Wild Things" src="http://softwarecreation.org/images/2011/wild-things.jpg" alt="" width="640" height="283" /></div>
<div><span id="internal-source-marker_0.06952311238273978">Sometimes I am stuck on a mind-boggling task. I know this because I found myself fiddling around, giving advises to other people, searching for food, drinking coffee or working on low priority stuff. Clock is ticking but little gets done. After I notice this unfortunate state, I talk with myself seriously &#8211; calling to conscience, sense of duty and pride of a man who never fails his mission and the team.</span></div>
<div>
<p>Over the time I have learnt how to return to a productive state and even finish difficult tasks. I want to share my experience here.</p>
<p><strong>Precondition</strong><br />
I assume that you have a good idea what you should build. If not, you have to get back to your notes, client or a drawing board. You definitely will be unproductive if you don&#8217;t have clear understanding of your task. Most probably you will waste your time and client&#8217;s money.</p>
<p>Now, you know what to do but don&#8217;t know how and intellectually overwhelmed by this too big to bite piece!</p>
<p>I recommend 3 phase strategy to conquer your difficult task:</p>
<ol>
<li><strong>Hit the road</strong> &#8211; start moving and build the confidence</li>
<li><strong>Take control</strong> &#8211; conquer uncertainty and map the road</li>
<li><strong>Accelerate</strong> &#8211; drive on full speed while keeping control<span id="more-232"></span></li>
</ol>
</div>
<h3><strong>Hit the road</strong></h3>
<div>
<p><em>&#8220;Writing a novel is like driving a car at night. You can see only as far as your headlights, but you can make the whole trip that way&#8221;</em> &#8211; E. L. Doctorow</p>
<p><strong>25 Minutes Burst</strong><br />
First, you have to physically sit in front of your computer &#8211; ready to write code. If you are not in this well suited for programming position, you should apply your negotiation skills to put your resisting body there. It is not easy to argue with yourself, but you can always ask for firm 25 minutes attempt in exchange for some personal favor. Use these negotiated minutes to hit the road &#8211; start powerful programming burst. What about other 25 minute burst after a short break? And another? You can try <a href="http://www.pomodorotechnique.com/">The Pomodoro Technique</a>.</p>
<p><strong>Pick Low Hanging Fruit by Fruit</strong><br />
The Huge Difficult task will try to kick you out of a saddle (chair) and immobilize. You have to gain confidence and steady mindset to make a real progress. Dive into programming as soon as you can. Start with some necessary piece that you know how to implement. Not everything should be clear &#8211; just couple steps ahead. You will discover next steps while you work on the current. Pick fruit by fruit to gain momentum: move from one small task to another without stops. Hold the chain of these tasks to stubbornly step forward against severe winds and waves of procrastination.</p>
<p><strong>Copy and Paste</strong><br />
Copy and Paste is <a href="http://en.wikipedia.org/wiki/Copy_and_paste_programming">a bad practice</a>. However, it is an excellent starting point if you have huge demoralizing task. Find similar code in your previous projects, help examples or Google / Stackoverflow it. Refine and knead these examples into acceptable for your purpose shape. Certainly, remember to clean and <a href="http://softwarecreation.org/2008/a-few-words-in-defense-of-copy-and-paste-programming/">remove bad effects</a> before you finish.</p>
<p><strong>Offensive Reconnaissance</strong><br />
Survey the territory of your development task for potential paths and roadblocks. Do not engage in open fights until you mentally strong and prepared. Work on discovered tasks only if they are easy, otherwise estimate complexity and mark them for the next phases. In order to have better intelligence you can</p>
<ul>
<li>Search on Internet for implementation ideas</li>
<li>Talk with somebody who can spark a solution (at work, online) or at least with <a href="http://c2.com/cgi/wiki?RubberDucking">Rubber Duck</a></li>
<li>Load information in brain and forget about this problem &#8211; let your subconscious to prepare for the Eureka! moment while you are busy with other stuff.</li>
</ul>
<p><strong>Important question: Are you ready for engagement</strong>?<br />
Tell honestly if you feel you are not ready to tackle the task. Ask for help or take a break to learn. You will put yourself in a bad stressful position continuing struggle and failing at the end. It is not fair to your team, company and clients. Nobody will appreciate it.</p>
<p><strong>Phase Outcome:</strong> you are on the road and can get things done!</p>
<h3>Take control</h3>
<p><em>“Chance favors the prepared mind”</em> &#8211; Louis Pasteur</p>
<p>And your project manager and client stand behind and nervously ask &#8211; &#8220;When are you going to finish this f* task?&#8221;</p>
<p>Long drive in the dark is not fun and not safe &#8211; you can be late and end up in the wrong place. Once your mind stop resisting and become cooperative, you should grasp the control and get better view how to get your task done and what effort is required.</p>
<p>You would ask: “Why do not take a control at the beginning &#8211; plan all operation steps ahead and follow them with discipline?” My answer: You need offensive reconnaissance into task area and prepared mind for planning. Also you need some time to play with the task, align your mind with people, requirements, technology, tools, environment and other moving parts. That is why Hit The Road is an essential stage for programmer’s timid mind scared by The Big Monster Task.</p>
<p><strong>Break down</strong><br />
First, break down the big task on smaller steps to map your road to victory.</p>
<p><strong>Fire </strong><a href="http://c2.com/cgi/wiki?TracerBullets"><strong>Tracer Bullets</strong></a><br />
Build small quick simple end-to-end working prototype that touches all major components. Connecting them together and making them work is a big achievement to find your target solution. This will become your frame for next programming pieces that you discovered during reconnaissance.<br />
Plan deeper <a href="http://c2.com/cgi/wiki?SpikeSolution">spikes</a> for technically risky and unknown areas.</p>
<p><strong>Evade Premature Fights: Grand Re-Design, Refactoring or Optimization</strong><br />
You  will be tempted to apply your outstanding architecture skills and guru expertise to radically improve design of the system, completely refactor a cluster of ugly classes or optimize potentially slow layers. Be careful &#8211; these activities often lead  to a deep pit right before finish. Exercise self-restrain and pragmatism. Focus on a practical solution that solves the client problem, not idealism of the perfect system. If you need a lot of tension &#8211; go to gym or create a separate task from the current to accomplish these amazing feats with the system.</p>
<p>These are sign that you took the control:<br />
1. You know your major steps to finish the task<br />
2. You can estimate time, effort and risks for these steps<br />
3. You know what is unknown and how to deal with this stuff</p>
<p><strong>Phase Outcome:</strong> you have a plan, estimation and a frame for putting things together</p>
<h3>Accelerate</h3>
<p><em>&#8220;A good plan executed today is better than a perfect plan executed at some indefinite point in the future.&#8221; </em>- General George Patton Jr</p>
<p>Once you have clarity and mental control, you can move on a full speed. You just need to keep high motivation, control and quality. Rare developer’s mind will resist to program at this point <img src='http://softwarecreation.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Small Clear Wins </strong><br />
Keep moving from one small victory to another leaving behind things that you like, work good and well-refactored. Do not leave half-baked pieces that collapse after you step away.</p>
<p><strong>Immersion</strong><br />
Enter <a href="http://en.wikipedia.org/wiki/Flow_(psychology)">Flow</a> &#8211; “mental state of operation in which a person in an activity is fully immersed in a feeling of energized focus, full involvement, and success in the process of the activity”.<br />
Conditions for flow:</p>
<ol>
<li>Clear goals that add direction and structure to the task</li>
<li>Challenges match skills &#8211; you feel capable to wrestle a task, but not easily.</li>
<li>Immediate feedback &#8211; you can quickly adjust based on the results of work and changing demands</li>
</ol>
<p><strong>Anti-perfectionism<br />
</strong>Don’t overthink the problem and spend too much time on polishing of a <a href="http://www.artima.com/intv/goodenough.html">good enough solution</a>. Instead strive for simple design, open for future extensions and delay big decisions for later than you have more information and feedback. Just know when to stop and have confidence that the stuff you claim as done is really <a href="http://www.scrumalliance.org/articles/106-definition-of-done-a-reference">DONE</a>.</p>
<p><strong>Phase Outcome:</strong> your train is moving on the full speed to the final stop on a schedule and nothing could stop you <img src='http://softwarecreation.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><img style="border: 0px initial initial;" title="Conquer Big Hard Task" src="http://softwarecreation.org/images/2011/Big-Hard-Task.png" alt="" width="640" height="450" /></p>
<p>Can you share you own strategies to overcome and conquer difficult tasks?</p></div>
<p>Related posts:</p><ol>
<li><a href='http://softwarecreation.org/2008/pair-programming-to-do-or-not-to-do/' rel='bookmark' title='Pair Programming: To Do or Not To Do'>Pair Programming: To Do or Not To Do</a></li>
<li><a href='http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-approach/' rel='bookmark' title='The Elements of Pragmatic Programming Style. Approach.'>The Elements of Pragmatic Programming Style. Approach.</a></li>
<li><a href='http://softwarecreation.org/2009/the-elements-of-pragmatic-programming-style-composition/' rel='bookmark' title='The Elements of Pragmatic Programming Style. Composition.'>The Elements of Pragmatic Programming Style. Composition.</a></li>
</ol><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=hi3sAi51Dpk:Z3NlbBiTdlo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=hi3sAi51Dpk:Z3NlbBiTdlo:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=hi3sAi51Dpk:Z3NlbBiTdlo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=hi3sAi51Dpk:Z3NlbBiTdlo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=hi3sAi51Dpk:Z3NlbBiTdlo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=hi3sAi51Dpk:Z3NlbBiTdlo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=hi3sAi51Dpk:Z3NlbBiTdlo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=hi3sAi51Dpk:Z3NlbBiTdlo:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareCreation/~4/hi3sAi51Dpk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2011/stuck-on-a-big-hard-programming-task-read-this/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://softwarecreation.org/2011/stuck-on-a-big-hard-programming-task-read-this/</feedburner:origLink></item>
		<item>
		<title>Three Spirits in The Soul of a Software Developer</title>
		<link>http://feedproxy.google.com/~r/SoftwareCreation/~3/yH4M_gVwfgY/</link>
		<comments>http://softwarecreation.org/2011/three-spirits-in-the-soul-of-a-software-developer/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 00:11:24 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Job]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[People]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=225</guid>
		<description>I noticed that three spirits are fighting in the soul of a software developer &amp;#8211; Great Artist, Reliable Worker and Selfish Pragmatist. Great Artist If you hear a voice within you say, ‘You cannot paint,’ then by all means paint, and that voice will be silenced. &amp;#8211; Vincent van Gogh The first spirit is a [...]
Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2007/programmers-are-lazy-capricious-pseudo-intellectuals-really/' rel='bookmark' title='Programmers are lazy capricious pseudo-intellectuals. Really?'&gt;Programmers are lazy capricious pseudo-intellectuals. Really?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/' rel='bookmark' title='Three Dimensions of a Software Programmer: How to get things done'&gt;Three Dimensions of a Software Programmer: How to get things done&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2008/five-big-personality-traits-of-a-programmer-do-they-matter/' rel='bookmark' title='Five Big Personality Traits of a Programmer. Do They Matter?'&gt;Five Big Personality Traits of a Programmer. Do They Matter?&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
			<content:encoded><![CDATA[<div><img class="alignnone" title="Battle" src="http://softwarecreation.org/images/2011/battle.jpg" alt="" width="600" height="257" /></div>
<div><span id="internal-source-marker_0.4501636205241084">I noticed that three spirits are fighting in the soul of a software developer &#8211; Great Artist, Reliable Worker and Selfish Pragmatist.</span></div>
<div>
<h3>Great Artist</h3>
<p><em> If you hear a voice within you say, ‘You cannot paint,’ then by all means paint, and that voice will be silenced.</em> &#8211; Vincent van Gogh</p>
<p>The first spirit is a <em>Great Artist</em> who pushes our fellow programmer to work on challenging tasks, invent new approaches and seek for self realization. The spirit gives power and desire to create state of art solutions and move forward with learning and practice. The <em>Great Artist</em> spirit is behind the best software; it makes the developer to think out of box, strive for beautiful code and forget everything outside the problem. It is powerful spirit but dangerous for ordinary business &#8211; there is no predictability and assurance that developer will remember what client really needs. The developer driven by this spirit tend to reject mediocre, but good enough solutions, will do stuff his own way and go far beyond what is necessary. This developer has zero tolerance to poor code and will refactor most important pieces of code even night before important demo&#8230; after testers go home to sleep.</p>
<p><span id="more-225"></span></p>
<h3>Reliable Worker</h3>
<p><em> No man is an island, entire of itself; every man is a piece of the continent.</em> &#8211; John Donne</p>
<p>The second spirit is a <em>Reliable Worker</em> who puts interests of the team, company and client on the first place. The developer driven by this spirit completely dedicates himself to success of the project and Greater Good. The <em>Reliable Worker</em> spirit  suppresses creativity and code that is not sanctioned by management and could fail. The developer will stay late to meet deadlines and fix embarrassing bugs; he will test after testers and verify installation after administrators.This altruistic spirit makes a developer focused, accountable and disciplined citizen of the company, but sometimes cause stress, uneasiness and feeling of wasted talent.  The danger is that  Reliable Worker spirit can evaporate fast if a company don’t care about developer’s hard work and sacrifices.</p>
<h3>Selfish Pragmatist</h3>
<p><em> Life is what happens to you while you&#8217;re busy making other plans</em>. – John Lennon</p>
<p>The spirit of <em>Selfish Pragmatist</em> is concerned about personal interests, financial well being, job security and career growth. This spirit forces a developer to accept shit and concentrate mostly on paycheck and managers recognition. The <em>Selfish Pragmatist</em> spirit becomes stronger with age as family and personal matters take over dreams of building great software and day-to-day problems kick out illusions about dedication and loyalty at work. Sometimes the developer influenced by this spirit starts to focus on stuff that is more beneficial for personal growth, produce tangled code for better job security and increase complexity for longer contacts or even work on own side projects, business or simply waste time on Internet. This spirit is fed by natural desire to achieve personal goals, secure own future and have life outside work. The danger of this spirit is that the developer could become counter-productive and don’t care about quality and long-term success of  	the project and company.</p>
<p>Each of spirits have positive effects: <em>Great Artist</em> provides creative power, <em>Reliable Worker</em> encourage discipline and focus on results and <em>Selfish Pragmatist</em> ability to meet personal interests. But there are also side effects:  <em>Great Artist</em> overdoes and misses real needs, <em>Reliable Worker</em> causes burn down and fear of change and <em>Selfish Pragmatist</em> downplays company and client best interests.</p>
<p>These spirits tear on pieces many poor developer&#8217;s souls and prevent peace in their minds. What is usual result of this battle of spirits?  I saw many developers who end up with one spirit rule (unfortunately often with Selfish Pragmatist) and no longer have much struggle. Other developers will flip between spirits depending on circumstances: some companies spark creative Great Artist and some provoke defensive Selfish Pragmatist.</p>
<p>The existence of the spirits is my subjective observation and theory, but it helps to explain many interesting phenomena in life of software teams. So, I have few questions to you, my dear reader.</p>
<p>Do you agree that these spirits exist?  Can you handle and balance them well? Did I miss any other important spirit or force in the soul of the software developer?</p></div>
<p>Related posts:</p><ol>
<li><a href='http://softwarecreation.org/2007/programmers-are-lazy-capricious-pseudo-intellectuals-really/' rel='bookmark' title='Programmers are lazy capricious pseudo-intellectuals. Really?'>Programmers are lazy capricious pseudo-intellectuals. Really?</a></li>
<li><a href='http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/' rel='bookmark' title='Three Dimensions of a Software Programmer: How to get things done'>Three Dimensions of a Software Programmer: How to get things done</a></li>
<li><a href='http://softwarecreation.org/2008/five-big-personality-traits-of-a-programmer-do-they-matter/' rel='bookmark' title='Five Big Personality Traits of a Programmer. Do They Matter?'>Five Big Personality Traits of a Programmer. Do They Matter?</a></li>
</ol><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=yH4M_gVwfgY:rFll8BaNF7g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=yH4M_gVwfgY:rFll8BaNF7g:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=yH4M_gVwfgY:rFll8BaNF7g:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=yH4M_gVwfgY:rFll8BaNF7g:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=yH4M_gVwfgY:rFll8BaNF7g:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=yH4M_gVwfgY:rFll8BaNF7g:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=yH4M_gVwfgY:rFll8BaNF7g:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=yH4M_gVwfgY:rFll8BaNF7g:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareCreation/~4/yH4M_gVwfgY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2011/three-spirits-in-the-soul-of-a-software-developer/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://softwarecreation.org/2011/three-spirits-in-the-soul-of-a-software-developer/</feedburner:origLink></item>
		<item>
		<title>How to Meet Challenges with Systems Thinking</title>
		<link>http://feedproxy.google.com/~r/SoftwareCreation/~3/7mJxyxIgBZk/</link>
		<comments>http://softwarecreation.org/2010/how-to-meet-challenges-with-systems-thinking/#comments</comments>
		<pubDate>Sun, 05 Dec 2010 19:30:56 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Expertise]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=205</guid>
		<description>A. Life Challenges and Systems Your life continuously presents new challenges. And your success directly depends on your ability to meet these challenges. You can choose various approaches &amp;#8211; react on problems as they come, appeal to supernatural forces or seek for advise. But how many times you didn&amp;#8217;t understand why thing happen and what [...]
Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/' rel='bookmark' title='How to become an Expert. Embrace Reality.'&gt;How to become an Expert. Embrace Reality.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/' rel='bookmark' title='The Secret of Building Effective Software Systems'&gt;The Secret of Building Effective Software Systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/' rel='bookmark' title='How to Become an Expert. The Effective Way.'&gt;How to Become an Expert. The Effective Way.&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="Life Challenges and Systems" src="http://softwarecreation.org/images/2010/don-quixote.gif" alt="" width="557" height="473" /></p>
<h3>A. Life Challenges and Systems</h3>
<p>Your life continuously presents new challenges. And your success directly depends on your ability to meet these challenges. You can choose various approaches &#8211; react on problems as they come, appeal to supernatural forces or seek for advise.</p>
<p>But how many times</p>
<ul>
<li>you didn&#8217;t understand why thing happen and what to do</li>
<li>you found that reality and challenges are more complex than they seem</li>
<li>your solutions create new problems and make things worse</li>
</ul>
<p>Welcome to the messy world of complex systems that encompass your life and compose our Universe.</p>
<blockquote><p><strong>1. You can be the master of your life if you can understand and influence systems involved in your challenges. </strong>That means that you should become the Master of Systems Thinking.</p></blockquote>
<div>However, it is daunting task to understand and use the systems around you. That is why many people stuck without career growth, cannot achieve their top level or stop pursuing big goals. They gave up attempts to master systems that drive our projects and life.</div>
<div><span id="more-205"></span></div>
<div>
<h3>B. What is a system and systems thinking?</h3>
<p><strong>system</strong><span> </span>- a group of independent but interrelated elements comprising an integrated whole</p>
<p><strong>systems thinking</strong><span> </span>- the process of understanding how system elements interact to produce system behavior.</p>
<div>The <a id="o6v4" title="systems" href="http://en.wikipedia.org/wiki/System">systems</a> are characterized by</div>
<ul>
<li><strong>structure<span> </span></strong>- composition of elements</li>
<li><strong>behavior<span> </span></strong>- involved inputs, processes and outputs of material, energy and/or information</li>
<li><strong>interconnections<span> </span></strong>- structural and functional relations between elements</li>
<li><strong>emerging properties</strong><span> </span>-system properties that do not appear in individual elements (e.g. car individual parts cannot move by themselves)</li>
</ul>
<p>Systems are everywhere. They interact with each other and environment, belong to other systems and contain own sub systems. In addition, we, humans, constantly create new systems that usually cause more problems than solve.</p>
<p><img class="alignnone" title="systems nets" src="http://softwarecreation.org/images/2010/internetscape.jpg" alt="" width="334" height="250" /></p>
<div>The most valuable outcome of systems thinking is accurate explanation of the current state and right prediction of what will happen next.</div>
<blockquote><p><strong>2. Ability to predict and influence future is the most important skill of the Master of Systems Thinking</strong></p></blockquote>
<div>Examples of systems related to Software Development</div>
<ul>
<li>Technology, software systems and operation environments</li>
<li>People, team, company</li>
<li>Business, industry, customers and user communities</li>
<li>Economy, society, world</li>
<li>Universe</li>
</ul>
<h3>C. Elusive Systems</h3>
<p><img class="alignnone" title="elusive systems" src="http://softwarecreation.org/images/2010/don-quixote2.gif" alt="" width="248" height="315" /></p>
<p>Here is grim reality: &#8220;Large complex systems are beyond human capacity to evaluate&#8221; [Systemantics]</p>
<blockquote><p><strong>3. Inability to understand systems is the most serious obstacle for the Master of Systems Thinking. </strong>Unfortunately, most systems are complex and the master will not understand them.</p></blockquote>
<p>Even a system with few components can be considered as complex &#8211; elements can be in multiple states, relations and participate in many interactions inside and outside of the system. People spend billions dollars on <a id="r.q6" title="research" href="http://en.wikipedia.org/wiki/Large_Hadron_Collider">research</a> of relatively simple systems as interaction of elementary particles and best minds cannot still can get the right theory. I doubt that anybody will spend large effort on research of more complicated peculiarities of your software development ecosystem and projects. In most cases, you are on your own to deal with problems.</p>
<p>Three properties of non-trivial systems make us almost incapable to understand them: <strong>Complexity, Metamorphosis and Delusion</strong>.</p>
<div><strong>Complexity</strong></div>
<p>There are few sources of complexity:</p>
<ul>
<li><em>internal</em>- system structure and behavior under specific circumstances and inputs (software system testing in lab, company employment policies)</li>
<li><em>feedback loops</em> &#8211; the system output becomes new system input causing complex and unpredictable behavior (live software system crushes, changing requirements in process of development)</li>
<li><em>external </em>- other systems and environment alter system behavior all the time (client doesn&#8217;t like final software system, management shifts business strategy)</li>
</ul>
<p>In short, complex systems exhibit complex odd behavior.</p>
<div><strong>Metamorphosis</strong></div>
<div>Beside complex behavior, the system changes its essence over the time.</div>
<ul>
<li><em>new structures</em> introduce new functions and problems (e.g. software system after development and patching over time can completely departs from original design ideas &#8211; a convenient utility becomes bloated software suite)</li>
<li><em>lose of basic functionality</em> &#8211; as system grows in size and complexity, it tends to alter or lose basic functionality and initial purpose (e.g. small agile startup can grow into large sluggish company )</li>
<li><em>self-serving goals</em> &#8211; the system develops unintended goals (behave as it has will to live) and start to work for them (e.g. PM office is more concerned about adherence to the process than software delivery)</li>
<li><em>encroaching</em> &#8211; the system tends to slowly expand to fill known Universe (e.g. meetings and documents take more time than development)</li>
</ul>
<div><strong>Delusion</strong></div>
<div>The system (intentionally or not) disguise own behavior and influence people perception.</div>
<ul>
<li><em>operational fallacy</em> &#8211; the people in system do not do what system says they are doing and the system itself doesn&#8217;t do what it reports doing [Systemantics] (e.g. productivity improvement campaign consume people time and delay project).</li>
<li><em>distortion by system</em> &#8211; people and their wills are absorbed by the system; their judgment and perspective become impaired (e.g. developers don&#8217;t see that their software completely unusable)</li>
<li><em>misinterpretation</em> &#8211; obscure and difficult to get information (e.g. nobody has clue about software system logic and documentation is outdated)</li>
<li><em>ignoring reality</em> &#8211; the system sees the world from reports, and &#8220;a<em> system is not better than its sensory organs&#8221;</em> [Systemantics] (e.g. project manager commits to delivery date without talking with developers)</li>
</ul>
<h3>D. Systems Thinking in Action</h3>
<div>So, should we return to mystical or intuitive ways to solve the problems if systems thinking is extremely difficult?</div>
<blockquote><p><strong>4. You can still master complex systems if you realize that you cannot change complex systems as you wish and get predictable results.</strong></p></blockquote>
<p><img title="dance-system" src="http://softwarecreation.org/images/2010/dance-beast.jpg" alt="" width="400" height="300" /></p>
<p>You will be engaged into complex dance with the system until you can get positive results. I recommend five step dancing procedure:</p></div>
<div>1.<span> </span><strong>Scope</strong><span> </span>- define boundaries of systems, problems and solutions</div>
<ul>
<li>what problems should you solve?</li>
<li>should you reframe the problem?</li>
<li>what would be an ideal solution?</li>
<li>what systems should be considered?</li>
<li>what belongs to these systems?</li>
<li>what is out of scope?</li>
</ul>
<p>2. <strong>Model &#8211; </strong>come up with a model that describe the problem and a preferable solution</p>
<div>A model is a simplified system representation that helps to understand and predict future system behavior. Solution should be a part of the model as it is a dynamic interaction of Response (system A) and Problem (system B).</div>
<ul>
<li>what is the structure of the involved system?</li>
<li>what are goals and known system behavior?</li>
<li>what system parameters can be influenced?</li>
<li>what can be a solution &#8211; the system of responses and actions?</li>
<li>what outcomes can be predicted?</li>
</ul>
<div>3.<span> </span><strong>Intervene</strong><span> </span>- implement solution based on the model</div>
<div>Extent of solution should be based on level of certainty in the model. Focus on small local changes for the new untried model that is full of gaps. Go ahead with the new system (solution) if you are confident in the model.</div>
<div>Considerations:</div>
<ul>
<li><em>target feedback loops</em><span> </span>- amplify stale beneficial, minimize unstable harmful feedback (e.g. increase customer feedback, reduce team interruptions)</li>
<li><em>stability</em><span> </span>- to remain unchanged, system should change: the system should effectively respond to various situations &#8211; even unknown!</li>
<li><em>interconnections</em><span> </span>- you cannot change only one thing and you cannot change everything.</li>
<li><em>beware of opposing reaction</em><span> </span>- The System always Kicks Back (<a id="r2cs" title="Le Chatelier's principle" href="http://en.wikipedia.org/wiki/Le_Chatelier's_principle">Le Chatelier&#8217;s principle</a>)</li>
<li><em>avoid new systems<span> </span></em>- they always cause new problems</li>
<li><em>evolve existing working solutions</em><span> </span>- it is better strategy than introducing new complex solutions</li>
<li><em>the first solution is imperfect<span> </span></em>- be ready to scrap it after learning and building better models</li>
<li><em>probe / stress test</em><span> </span>- try to run trial to assess impact of the changes before committing to intervention</li>
<li><em>design signal / sensory systems</em><span> </span>for measuring result of intervention and<span> </span><em>establish clear information paths</em></li>
</ul>
<p>4. <strong>Review</strong> results of intervention</p>
<ul>
<li>how well did intervention work?</li>
<li>did you meet challenge or at least improved situation?</li>
<li>did you create new problems?</li>
<li>are you sure you&#8217;ve got objective and full information?</li>
<li>have you got feedback from all participants?</li>
</ul>
<p>5. <strong>Learn</strong> &#8211; analyze the gap between model and reality. Why did it work this way?</p>
<div>Learn by</div>
<ul>
<li>studying mistakes and bugs</li>
<li>evaluating prior predictions</li>
<li>assessing assumptions</li>
<li>dispelling delusions and biases</li>
<li>exposing flaws of the model</li>
<li>detaching yourself from the system for better perspective</li>
<li>realizing real system goals, functions and interests (for humans)</li>
</ul>
<p>Go to step 1 of the dance until you like results or run out of time and energy.</p>
<p><img class="alignnone" title="Systems Thinking In Action" src="http://softwarecreation.org/images/2010/system-thinking-in-action.png" alt="" width="640" height="480" /></p>
<p>Finally remember: &#8220;Today solutions are tomorrow problems&#8221; [Fifth Discipline]</p>
<h3>E. Circle of Influence</h3>
<div>Your today actions will define your future. Do you have an idea what challenge you should focus on?</div>
<blockquote><p><strong>5. Focus on important challenges that you can really meet.</strong></p></blockquote>
<div>Here is how you can target your Systems Thinking and Focus.</div>
<div><img class="alignnone" title="Target Systems Thinking" src="http://softwarecreation.org/images/2010/challenges-focus.png" alt="" width="640" height="480" /></div>
<blockquote><p>Proactive people focus time and energy on things they can control (Circle of Influence) instead of reacting to or worrying about conditions over which they have little or no control (Circle of Concern). &#8211; <em>Stephen Convey</em></p></blockquote>
<div>Here you can review post arguments again</div>
<ol>
<li><strong>You can be the master of your life if you can understand and influence systems involved in your challenges. </strong>That means that you should become the Master of Systems Thinking.</li>
<li><strong>Ability to predict and influence future is the most important skill of the Master of Systems Thinking</strong></li>
<li><strong>Inability to understand systems is the most serious obstacle for the Master of Systems Thinking. </strong>Unfortunately, most systems are complex and the master will not understand them.</li>
<li><strong>You can still master complex systems if you realize that you cannot change complex systems as you wish and get predictable results.</strong></li>
<li><strong>Focus on important challenges that you can really meet.</strong></li>
</ol>
<p>You cannot change Universe laws and can barely affect economical situation, but you can make a difference for your projects and life by becoming the Master of Systems Thinking and mastering systems under your control.</p>
<div>One of the next posts will explore concrete approaches of Systems Thinking.</div>
<div><strong>Reference:</strong></div>
<div><span><a href="http://www.amazon.com/gp/product/0961825170?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0961825170" target="_blank">The Systems Bible: The Beginner&#8217;s Guide to Systems Large and Small</a></span> [Systemantics], John Gall</div>
<div><span><a href="http://www.amazon.com/gp/product/0743269519?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0743269519" target="_blank">The 7 Habits of Highly Effective People</a></span> , Stephen R. Covey</div>
<div><span><a href="http://www.amazon.com/gp/product/0385517254?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0385517254" target="_blank">The Fifth Discipline: The Art &amp; Practice of The Learning Organization</a> </span>, Peter M. Senge</div>
<p>Related posts:</p><ol>
<li><a href='http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/' rel='bookmark' title='How to become an Expert. Embrace Reality.'>How to become an Expert. Embrace Reality.</a></li>
<li><a href='http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/' rel='bookmark' title='The Secret of Building Effective Software Systems'>The Secret of Building Effective Software Systems</a></li>
<li><a href='http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/' rel='bookmark' title='How to Become an Expert. The Effective Way.'>How to Become an Expert. The Effective Way.</a></li>
</ol><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=7mJxyxIgBZk:CMLP5qb3CCk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=7mJxyxIgBZk:CMLP5qb3CCk:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=7mJxyxIgBZk:CMLP5qb3CCk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=7mJxyxIgBZk:CMLP5qb3CCk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=7mJxyxIgBZk:CMLP5qb3CCk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=7mJxyxIgBZk:CMLP5qb3CCk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=7mJxyxIgBZk:CMLP5qb3CCk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=7mJxyxIgBZk:CMLP5qb3CCk:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareCreation/~4/7mJxyxIgBZk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2010/how-to-meet-challenges-with-systems-thinking/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://softwarecreation.org/2010/how-to-meet-challenges-with-systems-thinking/</feedburner:origLink></item>
		<item>
		<title>The Toolkit for Increasing Productivity of Software Teams</title>
		<link>http://feedproxy.google.com/~r/SoftwareCreation/~3/nS6ULcZea5w/</link>
		<comments>http://softwarecreation.org/2010/the-toolkit-for-increasing-productivity-of-software-teams/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 03:43:55 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=182</guid>
		<description>Seasoned project managers will tell that delivery of software is result of many trade offs. The main trade off is between Time (when project will finish) and Scope (how much will be done). This post will show that using right tools you could gain improvement for both variables. While it is possible to create orderly step-by-step process [...]
Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/' rel='bookmark' title='The Secret of Building Effective Software Systems'&gt;The Secret of Building Effective Software Systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/' rel='bookmark' title='How to rescue failing software projects: The Toyota Way'&gt;How to rescue failing software projects: The Toyota Way&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2008/comparing-intelligent-software-evolution-to-chaotic-biological-evolution/' rel='bookmark' title='Comparing Intelligent Software Evolution to Chaotic Biological Evolution'&gt;Comparing Intelligent Software Evolution to Chaotic Biological Evolution&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
			<content:encoded><![CDATA[<p><img class="aligncenter" style="height: 310px; width: 450px;" src="http://softwarecreation.org/images/2010/5letka.jpg" alt="" width="450" height="310" /></p>
<p>Seasoned project managers will tell that delivery of software is result of many trade offs. The main trade off is between <strong>Time </strong>(when project will finish) and <strong>Scope </strong>(how much will be done). This post will show that using right tools you could gain improvement for both variables.</p>
<p>While it is possible to create orderly step-by-step process for increasing productivity of software teams, it will never be ideal &#8211; too many variations and situations will hinder it usefulness. I believe in set of useful tool that could be combined to craft custom optimal solution.</p>
<h3>Strategies</h3>
<p style="margin: 0px;">There are several strategies that lead to increase in productivity &#8211; how many units of scope software team can produce within fixed time.</p>
<ol>
<li><strong>Increase Capacity (Capacity) </strong>- increase capacity by hiring more people or increasing work hours
<ul>
<li>productivity is increased as result of more resources and hours available</li>
</ul>
</li>
<li><strong>Improve Value Stream (Value) </strong>- increase added business value on each step and reduce waste and overhead
<ul>
<li>productivity is increased as result of optimized delivery of value</li>
</ul>
</li>
<li><strong>Adaptat to Reality  (Adaptation)</strong>- learn from practice and mistakes, validation of ideas by reality, adapt to changing situation
<ul>
<li>productivity increased as result of early corrections and improving how things are done</li>
</ul>
</li>
<li><strong>Empower Individuals (Individuals) </strong>- boost people knowledge, skills, morale and focus
<ul>
<li>productivity is increased as result of higher individual performance and motivation</li>
</ul>
</li>
<li><strong>Enhance Communication (Communication) </strong>- improve communication and mutual understanding inside and outside of the team
<ul>
<li>productivity is increased as result of availability of necessary information, clarity of what should be done and exchange of ideas for implementation</li>
</ul>
</li>
<li><strong>Organize Better (Organization)</strong>-  structure team and assign roles for better coordination and decision making
<ul>
<li>productivity is increased as result of better decisions and focus on important areas</li>
</ul>
</li>
<li><strong>Expand Expertise (Expertise) </strong>- increase range of skills and services offered by team
<ul>
<li>productivity is increased as result of better execution of necessary project activities</li>
</ul>
</li>
<li><strong>Scale Externally (Externality)</strong>- outsourcing and involvement of external communities
<ul>
<li>productivity is increased as result of involvement of more people outside of team</li>
</ul>
</li>
<li><strong>Tame Complexity (Design)</strong>- manage complexity and provide simple and well designed solutions
<ul>
<li>productivity is increased as result of reducing complexity burden on software development</li>
</ul>
</li>
<li><strong>Preserve Quality (Quality)</strong>- use defensive tactics to ensure high quality
<ul>
<li>productivity is increased as result of preventing system flaws and reduced effort to fix bugs</li>
</ul>
</li>
</ol>
<div>I separated tools into three categories:</div>
<ul>
<li><strong>People-oriented</strong> &#8211; people are the creators of software and have major effect on output</li>
<li><strong>Process-oriented</strong> &#8211; the way how people work has significant impact on outcome</li>
<li><strong>Development-oriented</strong> &#8211; development practices and approach to the system implementation matters a lot</li>
</ul>
<p><img class="alignnone" title="Productivity Strategic Areas" src="http://softwarecreation.org/images/2010/Productivity Toolkit.png" alt="" width="798" height="870" /></p>
<p><span id="more-182"></span></p>
<h3 style="font-size: 12pt;">People-oriented tools</h3>
<p><span style="font-weight: normal; line-height: 26px; font-size: 13px;"><img class="alignnone" title="union" src="http://softwarecreation.org/images/2010/union.jpg" alt="" width="450" height="334" /></span></p>
<div id="nuwr" style="margin-top: 0px; margin-bottom: 0px; text-align: left;"><strong>1. Hire New People</strong></div>
<p><em>Strategies: </em>Capacity <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Expertise <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Communication <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" />,  Organization <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" /></p>
<p>New people increase volume of possible work within the same time and new expertise increases range and quality of tasks. However, the increase in output is not linear and quickly diminishes, because more people cause communication and coordination overhead. In addition, compensation increase make this tool expensive and less attractive.</p>
<div><em>Tips: </em>Form few small teams to avoid large group overhead and scale by parallel development of system components and sync within team of teams. Also remember what Fred Brook said: <em>Adding manpower to a late software project makes it later</em>.</div>
<p><em>Resources:</em></p>
<ul>
<li><a id="qhcz" title="Methodology and Team Size" href="http://alistair.cockburn.us/Methodology+per+project">Methodology and Team Size</a>, Alistair Cockburn</li>
<li><a id="l6bz" title="Team Size Matters" href="http://www.shmula.com/181/team-dynamics-size-matters">Team Size Matters</a>, schmula</li>
</ul>
<p><strong>2. Motivate</strong></p>
<div><em>Strategies: </em>Individuals <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></div>
<p>Happy motivated people are more productive, focused and concerned about quality and end result. While there is no common receipt for each individual, I believe there are some strong motivators: interesting and meaningful work, fair compensation, control over own tasks and outcomes, ability to learn and professionally grow, comfortable workplace and adequate tools, empathetical and caring management and so on.<br />
Daniel H. Pink in <a id="pp90" title="Drive" href="http://www.amazon.com/gp/product/1594488843?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1594488843">Drive</a> thinks that people are motivated by three elements:</p>
<ul>
<li>Autonomy: People want to have control over their work.</li>
<li>Mastery: People want to get better at what they do.</li>
<li>Purpose: People want to be part of something that is bigger than they are.</li>
</ul>
<div><em>See Also: </em></div>
<ul>
<li>Professional Growth</li>
</ul>
<p><em>Tips:</em> Motivate individually, but set also group targets to encourage cooperation</p>
<div><em>Resources:</em></div>
<ul>
<li><a id="pkhw" title="Drive" href="http://www.amazon.com/gp/product/1594488843?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1594488843">Drive</a>, Daniel H. Pink</li>
<li><a title="The Ideal Software Company. Utopia?" href="http://softwarecreation.org/2007/the-ideal-software-company-utopia/">The Ideal Software Company. Utopia?</a></li>
</ul>
<p><strong>3. Professional Growth</strong></p>
<p><em>Strategies: </em>Individuals <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Expertise <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Adaptation <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<p>Software professionals should learn a lot to become productive and proficient. People learn in several ways and learning from mistakes is the most memorable, but expensive way. Learning by self-study, formal training and coaching by experienced colleagues are more effective ways. Encourage and direct learning to grow high performance experts and team. And certainly, continue learning as much as possible from mistakes and practice. <img src='http://softwarecreation.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div><em>Tips:</em> Give opportunity for people to learn things that are beyond immediate needs of the project. Ability to learn and perspectives of growth are the strongest motivation factors for majority of software professionals.</div>
<div><em>Resources:</em></div>
<ul>
<li><a href="http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/">How to Become an Expert. Top 7 Qualities</a></li>
<li><a href="http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/">How to Become an Expert. The Effective Way</a></li>
</ul>
<p><strong>4. Overtime</strong></p>
<div><em>Strategies: </em>Capacity <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Individuals <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" /></div>
<p>Nobody recommends involuntary overtime for a long time as benefits will disappear quickly when a stressed team lowers quality and starts breaking apart.</p>
<div><em>Tips: </em>Use overtime as a last resort for very short period.</div>
<div>Resources:</div>
<div>
<ul>
<li><a id="i82t" title="Overtime Considered Harmful" href="http://www.basilv.com/psd/blog/2006/overtime-considered-harmful">Overtime Considered Harmful</a></li>
</ul>
</div>
<p><strong>5. Right leaders</strong></p>
<div><em>Strategies: </em>Communication <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Organization <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></div>
<p>Good leaders jell teams, align people with goals, boost energy and remove barriers. Leaders vary from commanders to visionaries and each style has merits under specific circumstances. Right leaders are essential for the project success.</p>
<p><em>Tips:</em> Adjust leadership style to situation</p>
<div><em>Resources:</em></div>
<ul>
<li><a id="j-h0" title="What is The Best Leadership Style for The Software Team?" href="http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/">What is The Best Leadership Style for The Software Team?</a></li>
</ul>
<div><strong>6. Specialize</strong></div>
<p><em>Strategies:</em> Expertise <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Organization <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<p>A software team requires range of skills and involved in different activities to achieve end goal &#8211; implemented software system for customer needs. Beyond software implementation the team deals with a customer domain, company vision, market demands, technologies, operation environments and other project aspects. The team is involved in research, analysis, coordination, design, architecture, usability, testing, deployment, hosting and other activities. Therefore team players should be able to play different roles and have expertise to cover various aspects to ensure good end results.</p>
<div><em>Tips:</em> A high degree of specialization and separation of roles is inevitable for large teams and projects. However specialization can hurt the project as people forget about big picture, holistic solutions and instead focus on what is important for their local area. The team leaders should pay a lot of attention to <em>Alignment </em>to counter-attack sub-optimization and locally focused decisions.</div>
<p><em>Resources:</em></p>
<ul>
<li><a title="Why specialization in Software development is bad for business" href="http://softwaredevelopmenttoday.blogspot.com/2009/06/why-specialization-in-software.html">Why specialization in Software development is bad for business</a></li>
</ul>
<div><strong>7. Outsource</strong></div>
<p><em>Strategies: </em>Capacity <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Expertise <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Externality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Organization <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" />, Communication <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" /></p>
<p>Tasks and challenges should match skills and experience of team players. It doesn&#8217;t make sense for backend developers to convert Photoshop files into html or conduct marketing research and focus groups. If team cannot afford to hire a permanent specialist, they should try to find professional mercenaries who will do work faster on higher quality level.</p>
<div><em>Tips:</em> It is more difficult to align outsiders, who don&#8217;t have long-term commitment and interest in the end result. Communication and clear understanding are hard to achieve. Preferably, outsiders should be assigned well-defined tasks and sub-projects with clear outcome and frequent validation points.</div>
<div><em>Resources:</em></div>
<div>
<ul>
<li><a title="Using an Agile Software Process with Offshore Development" href="http://martinfowler.com/articles/agileOffshore.html">Using an Agile Software Process with Offshore Development</a></li>
</ul>
</div>
<div><strong>8. Induce Individual Flow</strong></div>
<div><em>Strategies: </em>Individuals <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></div>
<p>Flow (or Immersion) is a state of mental focus so intense that awareness of the real world is lost, generally resulting in a feeling of joy and satisfaction. When learning and tasks are too easy, people become bored. If they are too complex they become stressed and frustrated. Flow happens when perception and understanding are challenged near capacity without being exceeded.</p>
<div><em>Tips:</em> Flow conditions:</div>
<ul>
<li>ability to focus</li>
<li>clear goals</li>
<li>immediate feedback</li>
<li>control over actions, activities and the environment</li>
</ul>
<div><em>Resources:</em></div>
<ul>
<li>
<p style="margin: 0px;"><a id="fbb6" title="Flow: The Psychology of Optimal Experience" href="http://www.amazon.com/gp/product/0061339202?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0061339202">Flow: The Psychology of Optimal Experience</a>, Mihaly Csikszentmihalyi</p>
</li>
</ul>
<div><strong>9. Discipline</strong></div>
<div><em>Strategies: </em>Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Organization <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Individuals <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" /></div>
<p>Few people will be always disciplined no matter what and few will always violate rules. Majority are context sensitive &#8211; relax than discipline is low and work hard when discipline is enforced. Build a minimal set of rules approved by majority and stick to these rules.</p>
<div><em>Tips:</em> Too much discipline could significantly deprive productivity, motivation and promote compliance instead of dedication.</div>
<p><em>Resources:</em></p>
<ul>
<li><a href="http://softwarecreation.org/2007/lost-personalities-how-our-company-alters-us/">Lost Personalities: How our company alters us</a></li>
</ul>
<h3 style="font-size: 12pt;">Process-oriented tools</h3>
<div><img style="height: 500px; width: 364px;" src="http://softwarecreation.org/images/2010/industry.jpg" alt="" width="364" height="500" /></div>
<p><strong>10. Increase feedback and early practical use of ideas</strong></p>
<div><em>Strategies: </em>Adaptation <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></div>
<p>Reality is complex, fluid and unclear. Many assumptions and plans quickly go bust. The process that has built-in mechanism for signaling problems and self-correction is the most effective. Rapid feedback is the core part of such process.</p>
<p><em>Tips:</em> Iterative development is one of the best examples of the process that relies heavily on feedback.</p>
<div><em>Resources:</em></p>
<ul>
<li><a title="How to become an Expert. Embrace Reality." href="http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/">How to become an Expert. Embrace Reality.</a></li>
</ul>
</div>
<p><strong>11. Build alignment</strong></p>
<div><em>Strategies:<span style="font-style: normal;"> Communication <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Organization <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></span><br />
</em></div>
<p>People jump significant gaps to understand each other &#8211; sometimes without much success. Clear vision, smart priorities and honest evaluation allow team players moving in unison and enforce each other. Good understanding focus people on right goals and reduce wasteful activities. Communication and trust are important for alignment.</p>
<div><em>Tips:</em> Take care about important alignment elements:</div>
<ul>
<li>vision &#8211; project direction and top-level goals</li>
<li>interests &#8211; mix of personal, customer and companies interests (sometimes conflicting)</li>
<li>understanding &#8211; clarity about what others mean</li>
<li>trust &#8211; confidence in other people intentions and promises</li>
</ul>
<div><em>Resources:</em></p>
<ul>
<li><a href="http://softwarecreation.org/2007/software-development-is-the-flow-of-ideas-the-rest-is-secondary/">Software Development is The Flow of Ideas. The Rest is Secondary</a></li>
</ul>
</div>
<p><strong>12. Integrated decision making</strong><br />
<em> </em></p>
<p><em>Strategies:</em> Communication <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Adaptation <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<div>Quality of decisions cause projects failure or success. Good decisions are based on correct information, experience, goals, feedback, expert opinions and so on. Decisions could be centralized, consensus based or delegated to lower level. The project should have right mix of these styles, but most effective decisions are made by people who will implement them.<br />
In addition, involvement in decision making empower people and give them sense of control.</div>
<p><em>See Also:</em></p>
<ul>
<li>Self-organization</li>
</ul>
<div>
<div><em>Tips:</em> Decisions often won&#8217;t be perfect, but they more chances on success if</div>
<ul>
<li>underlying causes are understood</li>
<li>decisions are early validated on practice</li>
<li>diverse group of people is involved</li>
<li>goals and background for decision are clearly communicated (preferably on one sheet of paper)</li>
</ul>
<p><em>Resources:</em></p>
<ul>
<li><a title="How to become an Expert. Embrace Reality." href="http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/">How to become an Expert. Embrace Reality.</a></li>
<li><a href="http://softwarecreation.org/2007/review-the-wisdom-of-crowds-making-the-best-decisions/">Review: The Wisdom of Crowds. Making the Best Decisions</a></li>
</ul>
<div><strong>13. Verification (QA) and Stopping to Fix Problems</strong></div>
<p><em>Strategies:</em> Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Capacity <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" /></p>
</div>
<div>
<div>Good Quality Assurance makes projects solid and expose not only bugs, but serious system flaws &#8211; requirements discrepancies, problems with user experience and system inconsistencies. Low tolerance to quality problems should be a working principle. The team should have mandate to stop and fix root problems immediately and avoid patching that causes painful chronic problems.</div>
<p><em>Tips: </em>Productivity could decrease if QA becoming ceremony and impede efficiency and speed of software team. Automation of routine testing could help.</p>
<div><em>Resources:</em></div>
<ul>
<li><a href="http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/">How to rescue failing software projects: The Toyota Way</a></li>
</ul>
<div><strong>14. Continuous improvements (Kaizen)</strong></div>
<p><em>Strategies:</em> Adaptation <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
</div>
<p>As project progresses you will find problems, wrong assumptions and challenges. You will have better experience and understanding. Even brightest ideas, best practices and excellent analysis and design could become outdated and ineffective. Continuously look for improvements, eliminate waste and bottlenecks.</p>
<div><em>See Also: </em></div>
<div>
<ul>
<li>Feedback</li>
</ul>
</div>
<p><em>Resources:</em></p>
<ul>
<li><a href="http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/">How to rescue failing software projects: The Toyota Way</a></li>
<li><a id="n59s" title="Theory of Constraints" href="http://en.wikipedia.org/wiki/Theory_of_Constraints">Theory of Constraints</a></li>
<li><a title="Kaizen" href="http://en.wikipedia.org/wiki/Kaizen">Kaizen</a></li>
</ul>
<div><strong>15. Focus on distinctive core</strong></div>
<p><em>Strategies:</em> Individuals <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<p>Highly productive team shouldn&#8217;t waste time on routine or non-core activities. Routine work should be automated and non-core work outsourced or covered by external components. The team should focus on high value-added distinctive work for business and application domain &#8211; this will bring maximum business results with minimal development effort.</p>
<div><em>See also :</em></div>
<div>
<ul>
<li>Outsource</li>
<li>More integration &#8211; less innovation</li>
</ul>
</div>
<div><em>Tips: </em>Qualities that support focus on Core (high value-added distinctive work for business):</div>
<ul>
<li>system thinking</li>
<li>understanding what really matters and what are limitations</li>
<li>broad vision and out-of-the box thinking</li>
<li>knowledge of environment, context and system outside relations</li>
<li>synthesis of concepts, information and experience</li>
</ul>
<div><em>Resources:</em></p>
<ul>
<li><a href="http://softwarecreation.org/2008/top-5-non-traditional-traits-for-survival-of-in-house-programmers/">Top 5 non-traditional traits for survival of in-house programmers</a></li>
</ul>
</div>
<div><strong>16. Engage developer and user communities</strong></div>
<p><em>Strategies:</em> Capacity <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Expertise <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Externality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Organization <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" /></p>
<div>Experienced users can support beginners, and provide valuable advices on forums and social applications. They can be co-creators of content and even functionality. Passionate users can promote and market your software better than advertisers. They can generate great ideas and provide valuable feedback about your applications.</div>
<div>Go open-source if your problem is complex, large and interesting for other developers (and is not important part of your market advantage). Contribute to other projects and get value by using it for own needs (examples are Linux, Firefox)</div>
<div>
<p><em>Tips:</em> Community groups could pursue own goals and sometimes are difficult to align.</p>
<div><em>Resources:</em></p>
<ul>
<li><a id="cmxv" title="The next step in open innovation" href="https://www.mckinseyquarterly.com/next_step_in_open_innovation_2155">The next step in open innovation</a></li>
</ul>
</div>
<p><strong>17. Actively work with customer ideas</strong></p>
</div>
<p><em>Strategies:</em> Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Communication <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<p>You can better understand and change scope of application if you actively work with customers and become partners</p>
<ul>
<li>establish ubiquitous language &#8211; for better understanding of ideas and translation them into code</li>
<li>tap into experience and get better insight for business domain and processes</li>
<li>transform ideas &#8211; simplify and find better alternatives</li>
</ul>
<div><em>Tips:</em> Productivity could be improved by</div>
<ul>
<li>reducing scope</li>
<li>simplifying solutions</li>
<li>finding good enough alternatives</li>
</ul>
<div><em>Resources:</em></div>
<ul>
<li><a id="yeq-" title="Pareto Principle" href="http://en.wikipedia.org/wiki/Pareto_principle">Pareto Principle</a></li>
<li><a id="qvq4" title="Ubiquitous Language" href="http://domaindrivendesign.org/node/132">Ubiquitous Language</a></li>
<li><a href="http://softwarecreation.org/2007/software-development-is-the-flow-of-ideas-the-rest-is-secondary/">Software Development is The Flow of Ideas. The Rest is Secondary</a></li>
</ul>
<p><strong>18. Select Right Process Flow</strong><br />
<em> </em></p>
<p><em>Strategies:</em> Organization <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<p>Select most optimal process for creating value.</p>
<ul>
<li>real-time flow &#8211;  immediately push tasks for implementation (continuous development flow for highly organized co-located teams)</li>
<li>pull systems (Kanban) &#8211; pull tasks when previous batch is finished and the team is ready to continue (iterations and backlog)</li>
<li>schedule the workload (Heijunka) &#8211; create schedule for contributors with limited availability (outside consultants or shared specialists as designers)</li>
</ul>
<p><em>Tips:</em> Use different flows for distinct stages of software creation. For example, a team process can internally use real-time flow, with external teams &#8211; Kanban and with consultants Heijunka.</p>
<p><em>Resources:</em></p>
<ul>
<li><a id="tkf1" title="The Toyota Way and Development Process" href="http://softwarecreation.org/2009/reliable-software-development-process-the-toyota-way/">The Toyota Way and Development Process</a></li>
</ul>
<p><strong>19. Self-Organization</strong><br />
<em>Strategies:</em> Communication <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Individuals <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Adaptation <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<div>Connect a software team to a customer and allow them to make most project decisions based on brainstorming, learning and changing situations.</div>
<p><em>Tips:</em> Not every team can self-organize &#8211; it requires maturity. And loss of direct control could be a problem for management if a project departs from company strategy and desired parameters (as budget, standards, resources).</p>
<div><em>Resources:</em></div>
<div>
<ul>
<li><a id="qowd" title="What is The Best Leadership Style for The Software  Team?" href="http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/">What is The Best Leadership Style for The Software Team?</a></li>
<li><a href="http://www.infoq.com/news/2010/04/organizing-selforganizing-teams;jsessionid=7C54FC7F74FDFFC93F8993175A42FF05">Organizing Self-organizing Teams</a></li>
<li><a title="Agile Self-Organizing Teams" href="http://bradapp.blogspot.com/2009/06/agile-self-organizing-teams.html">Agile Self-Organizing Teams</a></li>
</ul>
<div>
<h3 style="font-size: 12pt;">Development-oriented tools</h3>
<div id="n:xe" style="margin-top: 0px; margin-bottom: 0px; text-align: left;">
<div id="v7:x" style="margin-top: 0px; margin-bottom: 0px; text-align: left;"><img style="height: 356px; width: 500px;" src="http://softwarecreation.org/images/2010/traktor.jpg" alt="" width="500" height="356" /></div>
</div>
<p><strong>20. Increase reuse</strong></p>
</div>
<p><em>Strategies:</em> Design <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Adaptation <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" /></p>
</div>
<p>Reuse code  (components, libraries, solutions) as much as possible to speed up development and minimize code base. Reuse will bring familiar tested solutions and prevent frequent re-inventions of the wheel.</p>
<p><em>See Also:</em></p>
<div>
<ul>
<li>Evolution</li>
</ul>
</div>
<p><em>Tips:</em> Design for reuse requires skills and time. It is easy to overly complicate the system by pursuing reusable code. Evolve and refactor code to achieve practically good reusability. Sometimes custome solutions are lighter and better suited for specific purposes than generic and reusable.</p>
<div><em>Resources:</em></p>
<ul>
<li><a id="mhq0" title="Lifecycle and Refactoring Patterns that Support Evolution and Reuse" href="http://www.laputan.org/lifecycle/lifecycle.html">Lifecycle and Refactoring Patterns that Support Evolution and Reuse</a>, Brian Foote</li>
<li><a href="http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-approach/">The Elements of Pragmatic Programming Style. Approach.</a></li>
<li><a id="wnue" title="Should An Effective Developer Innovate, Imitate or  just Integrate?" href="http://softwarecreation.org/2010/should-an-effective-developer-innovate-imitate-or-just-integrate/">Should An Effective Developer Innovate, Imitate or just Integrate?</a></li>
</ul>
</div>
<p><strong>21. Generalize and Simplify</strong><br />
<em>Strategies:</em> Design <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Communication <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<p>Complexity and poor understanding of the system is one of the worst problems in development. Design, code and concepts should be as simple as possible and clearly understood by the team. Simplicity and clarity are difficult to achieve and require special effort. It is much easier to produce convoluted over-engineered solution for complex problem (Ball of Mud) than simple and elegant solution.</p>
<div><em>See Also:</em></div>
<div>
<ul>
<li>Follow Design Principles</li>
<li>Evolution</li>
<li>Domain Specific Design</li>
</ul>
</div>
<p><em>Tips:</em> Great design achieve simplicity by abstracting numerous details into simple concepts in process of solution evolution and learning from implementation.</p>
<div><em>Resources:</em></div>
<ul>
<li><a title="Big Ball of Mud" href="http://www.laputan.org/mud/">Big Ball of Mud</a>, Brian Foote</li>
<li><a id="g8.g" title="11 Laws of The System Thinking in Software Development" href="http://softwarecreation.org/2007/11-laws-of-the-system-thinking-in-software-development/">11 Laws of The System Thinking in Software Development</a></li>
<li><a href="http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-approach/">The Elements of Pragmatic Programming Style. Approach.</a></li>
</ul>
<div>
<div><strong>22. More integration, less innovation </strong></div>
<p><em>Strategies:</em> Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Design <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />,  Adaptation <img class="icon" src="http://softwarecreation.org/images/2010/poor.png" alt="poor" /></p>
</div>
<div>Innovation is expensive, uncertain and leave you with custom solutions on your own for support and future development. Piggyback on actively involving products, especially for non-core problems where good and proven solutions are available.<em>Tips: </em>Innovate to gain business advantage or solve serious technical challenges if you have an outstanding team and well-defined problems.</p>
<div><em>Resources:</em></div>
<ul>
<li><a id="x39n" title="Should An Effective Developer Innovate, Imitate or just Integrate?" href="http://softwarecreation.org/2010/should-an-effective-developer-innovate-imitate-or-just-integrate/">Should An Effective Developer Innovate, Imitate or just Integrate?</a></li>
<li><a id="racl" title="Selecting The Best Strategy for Software Teams: Retreat, Evolution or Revolution" href="http://softwarecreation.org/2008/selecting-the-best-strategy-for-software-teams-retreat-evolution-or-revolution/">Selecting The Best Strategy for Software Teams: Retreat, Evolution or Revolution</a></li>
</ul>
<div>
<div><strong>23. Domain Specific Design</strong></div>
<p><em>Strategies:</em> Design <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Communication <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
</div>
<div>Keep technical ideas and code concepts close to the customer domain. You will achieve consistency, better sync between system and business concepts. You can easier translate customer ideas into the system and customers will understand your implementation better.<em>Tips:</em> <a id="q4.q" title="Domain Driven Design" href="http://domaindrivendesign.org/resources/what_is_ddd">Domain Driven Design</a>is one the best approaches to achieve synthesis of technical and business ideas for complex domains.</p>
<div><em>Resources:</em></div>
<ul>
<li><a id="mzc9" title="Domain Driven Design" href="http://www.amazon.com/gp/product/0321125215/102-4895263-8374529?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0321125215">Domain Driven Design</a>, Eric Evans</li>
<li><a id="ldpv" title="The Secret of Building Effective Software Systems" href="http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/">The Secret of Building Effective Software Systems</a></li>
<li><a href="http://softwarecreation.org/2009/the-elements-of-pragmatic-programming-style-composition/">The Elements of Pragmatic Programming Style. Composition.</a></li>
</ul>
<p><strong>24. Evolution</strong></p>
<div><em>Strategies:</em> Adaptation <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Design <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></div>
<div>Start with the simplest primitive solutions, enforce early use and seek for feedback. Adjust and improve design before continuing adding new features. Look for better ideas and abstractions. Delay fundamental design decisions until you are confident about system development direction and validated ideas on practice. Do not over-engineer and add unnecessary features.</div>
<p><em>Tips: </em>Evolution main deficiency is slowness. Modern businesses often don’t have time for many improvement cycles – they want results now.<span style="font-family: verdana, tahoma, arial, sans-serif;"><span style="color: #333333;"><span style="font-size: x-small;"><br />
</span></span></span></p>
<div><em>Resources:</em></div>
<ul>
<li><a href="http://softwarecreation.org/2008/what-software-development-can-learn-from-biological-evolution/">What can Software Development learn from Biological Evolution?</a></li>
<li><a href="http://softwarecreation.org/2008/ideas-in-software-development-revolution-vs-evolution-part-1/">Ideas in Software Development: Revolution vs. Evolution. Part 1.</a></li>
</ul>
<ul>
<li><a id="cl2i" title="How a beautiful software system becomes Frankenstein" href="http://softwarecreation.org/2008/how-a-beautiful-software-system-becomes-frankenstein/">How a beautiful software system becomes Frankenstein</a></li>
</ul>
<div><strong>25. Open architecture and API</strong></div>
<p><em>Strategies:</em> Externality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Design<img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
</div>
<div>
<div>Open your solution for external developers who can extend and add more useful features. If you are lucky, you will get much more functionality than you can build internally while still controlling a core solution (iPhone is a perfect example).</div>
<div>Also Open API (convenient and supported by good documentation) give developers eligible ways to interact with you system without hacking or completely ignoring it.</div>
<p><em>Tips:</em> Once Open API is used it becomes liability &#8211; next design decisions will be affected by compatibility and legacy concerns.<br />
<em>Resources:</em></p>
<ul>
<li><a title="API" href="http://en.wikipedia.org/wiki/Application_programming_interface">API</a></li>
</ul>
<div><strong>26. Follow Design Principles</strong></div>
<p><em>Strategies:</em> Design <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
</div>
<p>Some of design principles</p>
<ul>
<li>You should be able to extend system without modifying it</li>
<li>A class should have one, and only one, reason to change</li>
<li>Depend on abstractions, not on concretions.</li>
<li>Make fine grained interfaces that are client specific.</li>
</ul>
<div>Famous design patterns are built around these principles. Follow sound design principles to build flexible, easy to expand system.</div>
<p><em>Resources:</em></p>
<ul>
<li><a id="x_:o" title="Principles of OOD" href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">Principles of OOD</a>, Rob Martin</li>
<li><a href="http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-approach/">The Elements of Pragmatic Programming Style. Approach.</a></li>
<li><a href="http://softwarecreation.org/2009/the-elements-of-pragmatic-programming-style-composition/">The Elements of Pragmatic Programming Style. Composition.</a></li>
</ul>
<div><strong>27. Shared Code, Ideas and Standards</strong></div>
<p><em>Strategies:</em> Design <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Expertise <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Communication <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Quality <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
<div>The team should collectively own code and pursue consistency and use of best practices. Otherwise the system will become clash of isolated impassible code islands &#8211; scary for people who didn&#8217;t build them. Share code and learn from each other to build outstanding system with high quality and integrity of every component.</div>
<p><em>Tips:</em> Pair Programming is one the best ways to share code, ideas and best practices<br />
<em>Resources:</em></p>
<ul>
<li><a href="http://c2.com/cgi/wiki?CollectiveCodeOwnership">Collective Code Ownership</a></li>
<li><a title="Pair Programming" href="http://c2.com/cgi/wiki?PairProgramming">Pair Programming</a></li>
</ul>
<p>&nbsp;</p>
<div><strong>28. Use Better technology and tools</strong></div>
<p><em>Strategies:</em> Individuals <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Design <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" />, Value <img class="icon" src="http://softwarecreation.org/images/2010/good.png" alt="good" /></p>
</div>
<div>Technologies and outside world expectations are changing. Shift to better technology and tools allows effective solution of new challenges and meeting new needs without pushing people and old technologies to grinding.</div>
<p><em>Tips: </em>Obsession with new technologies and race to use them is dangerous for project. Keep sanity until new technology is proven to be beneficial <img src='http://softwarecreation.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div><em>Resources:</em></div>
<ul>
<li><a href="http://www.sdtimes.com/">http://www.sdtimes.com</a></li>
<li><a href="http://www.computerworld.com/">http://www.computerworld.com</a></li>
</ul>
<h3><strong>Guide for increasing team productivity</strong></h3>
<div>Consider strategies for implementation if you cannot give positive answer on the following questions</div>
<table id="qt.5" style="font-size: 1em; line-height: inherit; border-collapse: collapse;" width="100%" border="1" cellspacing="0" cellpadding="3">
<tbody>
<tr style="text-align: left;">
<td style="text-align: center;" width="25%"><strong>Questions</strong></td>
<td align="center" width="25%"><strong>Strategy</strong></td>
<td style="text-align: center;" width="25%"><strong>Tools</strong></td>
<td style="text-align: center;" width="25%"><strong>Side-effects</strong></td>
</tr>
<tr style="text-align: left;">
<td width="25%">Is team clear about what should be done and have necessary information? Do people exchange ideas and help each other?</td>
<td align="center" width="25%"><strong>Enhance Communication</strong></td>
<td width="25%">
<ul>
<li>Leaders</li>
<li>Alignment</li>
<li>Integrated Decisions</li>
<li>Customer Ideas</li>
<li>Self-Organization</li>
<li>Generalize and Simplify</li>
<li>Domain Specific Design</li>
<li>Shared Code and Standards</li>
</ul>
</td>
<td width="25%">
<ul>
<li>Hiring</li>
<li>Outsource</li>
</ul>
</td>
</tr>
<tr style="text-align: left;">
<td width="25%">Does team know how they build value for customer and what is important for the project success? Do you have wasteful activities and overhead?</td>
<td align="center" width="25%"><strong>Improve Value Stream</strong></td>
<td width="25%">
<ul>
<li>Feedback</li>
<li>Continuous Improvement</li>
<li>Focus on Core</li>
<li>Customer Ideas</li>
<li>Process Flow</li>
<li>Self-Organization</li>
<li>More Integration</li>
</ul>
</td>
<td width="25%"></td>
</tr>
<tr style="text-align: left;">
<td width="25%">Is team capable and experienced to implement the project?</td>
<td align="center" width="25%"><strong>Expand Expertise</strong></td>
<td width="25%">
<ul>
<li>Hiring</li>
<li>Professional Growth</li>
<li>Specialize</li>
<li>Outsource</li>
<li>Engage communities</li>
<li>Shared Code and Standards</li>
</ul>
</td>
<td width="25%"></td>
</tr>
<tr style="text-align: left;">
<td width="25%">Do team members effectively make decisions, assign and execute tasks and know their responsibilities?</td>
<td align="center" width="25%"><strong>Organize Better</strong></td>
<td width="25%">
<ul>
<li>Leaders</li>
<li>Alignment</li>
<li>Specialize</li>
<li>Process Flow</li>
<li>Discipline</li>
</ul>
</td>
<td width="25%">
<ul>
<li>Hiring</li>
<li>Outsource</li>
<li>Engage communities</li>
</ul>
</td>
</tr>
<tr style="text-align: left;">
<td width="25%">Does team learn from practical results and mistakes? Do they consistently improve and correct how things are done?</td>
<td align="center" width="25%"><strong>Adapt to Reality</strong></td>
<td width="25%">
<ul>
<li>Feedback</li>
<li>Continuous Improvement</li>
<li>Evolution</li>
<li>Integrated Decisions</li>
<li>Self-Organization</li>
<li>Professional Growth</li>
</ul>
</td>
<td width="25%">
<ul>
<li>Reuse</li>
<li>More Integration</li>
</ul>
</td>
</tr>
<tr style="text-align: left;">
<td width="25%">Are people motivated, productive and focused on outcomes?</td>
<td align="center" width="25%"><strong>Empower Individuals</strong></td>
<td width="25%">
<ul>
<li>Motivate</li>
<li>Professional Growth</li>
<li>Individual Flow</li>
<li>Focus on Core</li>
<li>Self-Organization</li>
</ul>
</td>
<td width="25%">
<ul>
<li>Overtime</li>
<li>Discipline</li>
</ul>
</td>
</tr>
<tr style="text-align: left;">
<td width="25%">Is system design sound and code easy to understand and maintain?</td>
<td align="center" width="25%"><strong>Design: Taming Complexity</strong></td>
<td width="25%">
<ul>
<li>Evolution</li>
<li>Reuse</li>
<li>Generalize and Simplify</li>
<li>Design Principles</li>
<li>Domain Specific Design</li>
<li>More Integration</li>
<li>Open API</li>
<li>Shared Code and Standards</li>
</ul>
</td>
<td width="25%"></td>
</tr>
<tr style="text-align: left;">
<td width="25%">Does system have high quality? Does team solves problem quickly and eliminate root causes?</td>
<td align="center" width="25%"><strong>Preserve Quality</strong></td>
<td width="25%">
<ul>
<li>Quality Assurance</li>
<li>Feedback</li>
<li>Continuous Improvement</li>
<li>Professional Growth</li>
<li>Integrated Decisions</li>
<li>Focus on Core</li>
<li>Motivate</li>
<li>Discipline</li>
<li>Reuse</li>
<li>Generalize and Simplify</li>
<li>Shared Code and Standards</li>
</ul>
</td>
<td width="25%">
<ul>
<li>Overtime</li>
</ul>
</td>
</tr>
<tr style="text-align: left;">
<td width="25%">Do you outsource non-core activities or involve external communities for improving or extending system?</td>
<td align="center" width="25%"><strong>Scale Externally</strong></td>
<td width="25%">
<ul>
<li>Outsource</li>
<li>Engage communities</li>
<li>Open API</li>
</ul>
</td>
<td width="25%"></td>
</tr>
<tr style="text-align: left;">
<td width="25%">Did you try other strategies and still require more people?</td>
<td align="center" width="25%"><strong>Increase Capacity </strong></td>
<td width="25%">
<ul>
<li>Hiring</li>
<li>Overtime</li>
<li>Outsource</li>
<li>Engage communities</li>
</ul>
</td>
<td width="25%">
<ul>
<li>Quality Assurance</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><img class="alignnone" title="Thanks" src="http://softwarecreation.org/images/2010/cook.jpg" alt="" width="500" height="357" /></p>
<h3><span style="font-size: small;"><strong>Questions</strong></span></h3>
<div>Did I miss any tools? What tools do you know and successfully use?</div>
<p>Related posts:</p><ol>
<li><a href='http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/' rel='bookmark' title='The Secret of Building Effective Software Systems'>The Secret of Building Effective Software Systems</a></li>
<li><a href='http://softwarecreation.org/2009/how-to-rescue-failing-software-projects-toyota-way/' rel='bookmark' title='How to rescue failing software projects: The Toyota Way'>How to rescue failing software projects: The Toyota Way</a></li>
<li><a href='http://softwarecreation.org/2008/comparing-intelligent-software-evolution-to-chaotic-biological-evolution/' rel='bookmark' title='Comparing Intelligent Software Evolution to Chaotic Biological Evolution'>Comparing Intelligent Software Evolution to Chaotic Biological Evolution</a></li>
</ol><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=nS6ULcZea5w:2aAI8lNIY2w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=nS6ULcZea5w:2aAI8lNIY2w:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=nS6ULcZea5w:2aAI8lNIY2w:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=nS6ULcZea5w:2aAI8lNIY2w:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=nS6ULcZea5w:2aAI8lNIY2w:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=nS6ULcZea5w:2aAI8lNIY2w:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=nS6ULcZea5w:2aAI8lNIY2w:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=nS6ULcZea5w:2aAI8lNIY2w:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareCreation/~4/nS6ULcZea5w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2010/the-toolkit-for-increasing-productivity-of-software-teams/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://softwarecreation.org/2010/the-toolkit-for-increasing-productivity-of-software-teams/</feedburner:origLink></item>
		<item>
		<title>Should An Effective Developer Innovate, Imitate or just Integrate?</title>
		<link>http://feedproxy.google.com/~r/SoftwareCreation/~3/xtWJs3YUSEQ/</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[Architecture]]></category>
		<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Expertise]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=162</guid>
		<description>in·no·va·tion &amp;#8211; introduction of new things or methods im·i·ta·tion &amp;#8211; the copying of patterns of activity and thought of other groups or individuals in·te·gra·tion &amp;#8211; an act of combining into an integral whole. What is the best strategy for an effective developer &amp;#8211; innovation, imitation or integration? Should you introduce new creative solutions, adapt other [...]
Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/' rel='bookmark' title='The Secret of Building Effective Software Systems'&gt;The Secret of Building Effective Software Systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/' rel='bookmark' title='How to Become an Expert. The Effective Way.'&gt;How to Become an Expert. The Effective Way.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/' rel='bookmark' title='How to become an Expert. Embrace Reality.'&gt;How to become an Expert. Embrace Reality.&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
			<content:encoded><![CDATA[<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" width="100%" border="1" cellspacing="0" cellpadding="3">
<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 <img src='http://softwarecreation.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </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.</p>
</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>
<p>Related posts:</p><ol>
<li><a href='http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/' rel='bookmark' title='The Secret of Building Effective Software Systems'>The Secret of Building Effective Software Systems</a></li>
<li><a href='http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/' rel='bookmark' title='How to Become an Expert. The Effective Way.'>How to Become an Expert. The Effective Way.</a></li>
<li><a href='http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/' rel='bookmark' title='How to become an Expert. Embrace Reality.'>How to become an Expert. Embrace Reality.</a></li>
</ol><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=xtWJs3YUSEQ:XPCIHbaMVds:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=xtWJs3YUSEQ:XPCIHbaMVds:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=xtWJs3YUSEQ:XPCIHbaMVds:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=xtWJs3YUSEQ:XPCIHbaMVds:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=xtWJs3YUSEQ:XPCIHbaMVds:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=xtWJs3YUSEQ:XPCIHbaMVds:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=xtWJs3YUSEQ:XPCIHbaMVds:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=xtWJs3YUSEQ:XPCIHbaMVds:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareCreation/~4/xtWJs3YUSEQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2010/should-an-effective-developer-innovate-imitate-or-just-integrate/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://softwarecreation.org/2010/should-an-effective-developer-innovate-imitate-or-just-integrate/</feedburner:origLink></item>
		<item>
		<title>How to Become an Expert: Creative Problem Solving</title>
		<link>http://feedproxy.google.com/~r/SoftwareCreation/~3/ziNqHRivrDA/</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>&amp;#8220;Ideas are like rabbits. You get a couple and learn how to handle them, and pretty soon you have a dozen&amp;#8221; &amp;#8211; John Steinbeck Your success in life mostly depends on two things &amp;#8211; luck and ability to solve problems. I would leave luck topic for Irish tales and concentrate on the topic of creative [...]
Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/' rel='bookmark' title='How to Become an Expert. The Effective Way.'&gt;How to Become an Expert. The Effective Way.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/' rel='bookmark' title='How to become an Expert. Embrace Reality.'&gt;How to become an Expert. Embrace Reality.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/' rel='bookmark' title='How to Become an Expert. Top 7 Qualities'&gt;How to Become an Expert. Top 7 Qualities&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
			<content:encoded><![CDATA[<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 <img src='http://softwarecreation.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
<ul>
<li><em>drink and start thinking about website, don&#8217;t foget to record your thoughts early enough <img src='http://softwarecreation.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </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>
<p>Related posts:</p><ol>
<li><a href='http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/' rel='bookmark' title='How to Become an Expert. The Effective Way.'>How to Become an Expert. The Effective Way.</a></li>
<li><a href='http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/' rel='bookmark' title='How to become an Expert. Embrace Reality.'>How to become an Expert. Embrace Reality.</a></li>
<li><a href='http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/' rel='bookmark' title='How to Become an Expert. Top 7 Qualities'>How to Become an Expert. Top 7 Qualities</a></li>
</ol><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=ziNqHRivrDA:giXUhzYrfcY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=ziNqHRivrDA:giXUhzYrfcY:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=ziNqHRivrDA:giXUhzYrfcY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=ziNqHRivrDA:giXUhzYrfcY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=ziNqHRivrDA:giXUhzYrfcY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=ziNqHRivrDA:giXUhzYrfcY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SoftwareCreation?a=ziNqHRivrDA:giXUhzYrfcY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/SoftwareCreation?i=ziNqHRivrDA:giXUhzYrfcY:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareCreation/~4/ziNqHRivrDA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2010/how-to-become-an-expert-creative-problem-solving/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://softwarecreation.org/2010/how-to-become-an-expert-creative-problem-solving/</feedburner:origLink></item>
	</channel>
</rss>

