<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>CTO Insights</title>
	<atom:link href="http://ctoinsights.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ctoinsights.wordpress.com</link>
	<description>Agile software development</description>
	<lastBuildDate>Fri, 14 Jun 2013 14:39:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='ctoinsights.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/3de35116b4168cc7a1ca7624444329c4?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>CTO Insights</title>
		<link>http://ctoinsights.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ctoinsights.wordpress.com/osd.xml" title="CTO Insights" />
	<atom:link rel='hub' href='http://ctoinsights.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Agile Product Management Process</title>
		<link>http://ctoinsights.wordpress.com/2013/01/16/agile-product-management-process/</link>
		<comments>http://ctoinsights.wordpress.com/2013/01/16/agile-product-management-process/#comments</comments>
		<pubDate>Wed, 16 Jan 2013 14:29:59 +0000</pubDate>
		<dc:creator>Robert Tekiela</dc:creator>
				<category><![CDATA[software development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[product development]]></category>
		<category><![CDATA[startup]]></category>

		<guid isPermaLink="false">http://ctoinsights.wordpress.com/?p=789</guid>
		<description><![CDATA[An overview of a fast-pace product development process. 1. Product requests and ideas are collected using a variety of sources and techniques. They come from customers and internal stakeholders, and are gathered using brainstorming sessions, interviews, online feedback capture, focus groups, analysis of sales win/loss reports and support cases, competitive analysis etc. Product requests and [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=789&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>An overview of a fast-pace product development process.</p>
<p>1. Product requests and ideas are collected using a variety of sources and techniques. They come from customers and internal stakeholders, and are gathered using brainstorming sessions, interviews, online feedback capture, focus groups, analysis of sales win/loss reports and support cases, competitive analysis etc.</p>
<p><a href="http://ctoinsights.files.wordpress.com/2013/01/productmanagementprocess3.png"><img class="alignleft size-full wp-image-798" alt="ProductManagementProcess" src="http://ctoinsights.files.wordpress.com/2013/01/productmanagementprocess3.png?w=575&#038;h=431" width="575" height="431" /></a>Product requests and ideas are captured as Wishlist items.</p>
<p>Note: there is a separate escalation process to handle requests of urgent nature, e.g. issues impacting customers.</p>
<p>2. Wishlist is prioritized every six to seven weeks (twice a quarter). For an overview of the prioritization process please see  <a title="The Art and Science of Product Prioritization" href="http://ctoinsights.wordpress.com/2012/09/27/the-art-and-science-of-product-prioritization/">The Art and Science of Product Prioritization</a>.</p>
<p>3. Items selected during a prioritization session are moved to the Design Queue for analysis, requirements definition and design. Output of the design process consists of lightweight documentation, wireframes and visual comps (where needed).</p>
<p>4. Once an item design is done, it is moved to the Product Backlog.</p>
<p>5. Every two weeks, Engineering Team selects items from the Product Backlog for implementation in a bi-weekly sprint. <a title="Our Development Process" href="http://ctoinsights.wordpress.com/2012/12/28/our-development-process/">Our Development Process</a> post provides more details.</p>
<p>6. Product enhancement and fixes are deployed to production every 2nd Wednesday. Release notes and updated documentation are published on the Help Center shortly after a release.</p>
<br /> Tagged: <a href='http://ctoinsights.wordpress.com/tag/agile/'>agile</a>, <a href='http://ctoinsights.wordpress.com/tag/product-development/'>product development</a>, <a href='http://ctoinsights.wordpress.com/tag/startup/'>startup</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ctoinsights.wordpress.com/789/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ctoinsights.wordpress.com/789/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=789&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ctoinsights.wordpress.com/2013/01/16/agile-product-management-process/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/f52276f8d9db1d7c6577deb16eef9e0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ctoinsights</media:title>
		</media:content>

		<media:content url="http://ctoinsights.files.wordpress.com/2013/01/productmanagementprocess3.png" medium="image">
			<media:title type="html">ProductManagementProcess</media:title>
		</media:content>
	</item>
		<item>
		<title>Getting new developers productive on day one</title>
		<link>http://ctoinsights.wordpress.com/2013/01/10/getting-new-developers-productive-on-day-one/</link>
		<comments>http://ctoinsights.wordpress.com/2013/01/10/getting-new-developers-productive-on-day-one/#comments</comments>
		<pubDate>Thu, 10 Jan 2013 14:57:56 +0000</pubDate>
		<dc:creator>Robert Tekiela</dc:creator>
				<category><![CDATA[software development]]></category>
		<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://ctoinsights.wordpress.com/?p=783</guid>
		<description><![CDATA[All new developers joining my team start coding on day one, and complete the first set of tasks/commit code on day two. I found that the most effective way of getting new team members up to speed and productive is by getting them to code right away. I start by assigning a set of simple [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=783&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>All new developers joining my team start coding on day one, and complete the first set of tasks/commit code on day two.</p>
<p>I found that the most effective way of getting new team members up to speed and productive is by getting them to code right away. I start by assigning a set of simple bug fixes and tiny enhancements. The tasks are selected to touch various parts of the code base.</p>
<p>The advantages of this approach are:</p>
<ul style="margin-left:20px;">
<li>Coding tasks provide a clear focus and beat other methods of getting up to speed such as reading documentation and browsing through the code base.</li>
<li>Keeping them simple provides a set of quick to achieve goals and the resultant sense of accomplishment is a powerful motivator.</li>
<li>Careful selection of tasks provides a good exposure to the breadth of the code base.</li>
<li>We start getting business value on day two.</li>
<li>Keeping the tasks small minimizes risks.</li>
</ul>
<p>We use a bi-weekly, scrum based, agile process (see <a title="Our Development Process" href="http://ctoinsights.wordpress.com/2012/12/28/our-development-process/">Our Development Process</a>). Throughout the developer&#8217;s first full sprint I gradually increase complexity of the tasks. At the beginning of their second full sprint, they are ready to start selecting work on par with the other team members.</p>
<p>The approach is very effective and sets the tone for a high performance team culture.</p>
<p>What is your method for on-boarding of the new team members?</p>
<br /> Tagged: <a href='http://ctoinsights.wordpress.com/tag/agile/'>agile</a>, <a href='http://ctoinsights.wordpress.com/tag/software-development/'>software development</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ctoinsights.wordpress.com/783/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ctoinsights.wordpress.com/783/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=783&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ctoinsights.wordpress.com/2013/01/10/getting-new-developers-productive-on-day-one/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/f52276f8d9db1d7c6577deb16eef9e0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ctoinsights</media:title>
		</media:content>
	</item>
		<item>
		<title>jQuery Mobile Tutorial the most popular in 2012</title>
		<link>http://ctoinsights.wordpress.com/2013/01/01/jquery-mobile-tutorial-the-most-popular-in-2012/</link>
		<comments>http://ctoinsights.wordpress.com/2013/01/01/jquery-mobile-tutorial-the-most-popular-in-2012/#comments</comments>
		<pubDate>Tue, 01 Jan 2013 16:38:22 +0000</pubDate>
		<dc:creator>Robert Tekiela</dc:creator>
				<category><![CDATA[software development]]></category>
		<category><![CDATA[chart]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jquery mobile]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://ctoinsights.wordpress.com/?p=774</guid>
		<description><![CDATA[jQuery Mobile Tutorial  posts got by far the most views in 2012. The three parts tutorial &#8211; recently upgraded to jQuery Mobile 1.2.0 &#8211; can be found at: jQuery Mobile Tutorial Part I – Static Pages jQuery Mobile Tutorial Part II – Dynamic Pages jQuery Mobile Tutorial Part III – Managing Data Next in order of popularity were Top [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=774&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>jQuery Mobile Tutorial  posts got by far the most views in 2012. The three parts tutorial &#8211; recently upgraded to jQuery Mobile 1.2.0 &#8211; can be found at:</p>
<p><a title="jQuery Mobile Tutorial Part I – Static Pages" href="http://ctoinsights.wordpress.com/2012/01/03/jquery-mobile-tutorial-part-i-static-pages/">jQuery Mobile Tutorial Part I – Static Pages</a></p>
<p><a title="jQuery Mobile Tutorial Part II – Dynamic Pages" href="http://ctoinsights.wordpress.com/2012/01/03/jquery-mobile-tutorial-part-ii-dynamic-pages/">jQuery Mobile Tutorial Part II – Dynamic Pages</a></p>
<p><a title="jQuery Mobile Tutorial Part III – Managing Data" href="http://ctoinsights.wordpress.com/2012/01/03/jquery-mobile-tutorial-part-iii-managing-data/">jQuery Mobile Tutorial Part III – Managing Data</a></p>
<p>Next in order of popularity were <a title="Top Chart Libraries" href="http://ctoinsights.wordpress.com/2011/07/26/top-chart-libraries/">Top Chart Libraries</a>, <a title="git-flow with rebase" href="http://ctoinsights.wordpress.com/2012/06/29/git-flow-with-rebase/">git-flow with rebase</a> and <a title="Running distributed cron jobs in the cloud" href="http://ctoinsights.wordpress.com/2011/10/17/running-distributed-cron-jobs-in-the-cloud/">Running distributed cron jobs in the cloud</a>.</p>
<p>Visitors came from 146 countries led by United States, India and United Kingdom.</p>
<br /> Tagged: <a href='http://ctoinsights.wordpress.com/tag/chart/'>chart</a>, <a href='http://ctoinsights.wordpress.com/tag/cloud/'>cloud</a>, <a href='http://ctoinsights.wordpress.com/tag/git/'>git</a>, <a href='http://ctoinsights.wordpress.com/tag/javascript/'>JavaScript</a>, <a href='http://ctoinsights.wordpress.com/tag/jquery/'>jquery</a>, <a href='http://ctoinsights.wordpress.com/tag/jquery-mobile/'>jquery mobile</a>, <a href='http://ctoinsights.wordpress.com/tag/mobile/'>mobile</a>, <a href='http://ctoinsights.wordpress.com/tag/software-development/'>software development</a>, <a href='http://ctoinsights.wordpress.com/tag/tutorial/'>tutorial</a>, <a href='http://ctoinsights.wordpress.com/tag/visualization/'>visualization</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ctoinsights.wordpress.com/774/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ctoinsights.wordpress.com/774/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=774&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ctoinsights.wordpress.com/2013/01/01/jquery-mobile-tutorial-the-most-popular-in-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/f52276f8d9db1d7c6577deb16eef9e0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ctoinsights</media:title>
		</media:content>
	</item>
		<item>
		<title>Our Development Process</title>
		<link>http://ctoinsights.wordpress.com/2012/12/28/our-development-process/</link>
		<comments>http://ctoinsights.wordpress.com/2012/12/28/our-development-process/#comments</comments>
		<pubDate>Fri, 28 Dec 2012 23:54:33 +0000</pubDate>
		<dc:creator>Robert Tekiela</dc:creator>
				<category><![CDATA[software development]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[lighthouseapp]]></category>
		<category><![CDATA[software qa]]></category>

		<guid isPermaLink="false">http://ctoinsights.wordpress.com/?p=748</guid>
		<description><![CDATA[Introduction for the new team members. We use a scrum based, bi-weekly, agile process. Every 2nd Wednesday we have a Sprint Kickoff meeting where we select tickets to work on in the next sprint. Tickets are chosen based on priorities, e.g. highest priority first and within a priority defects ahead of enhancements. Tickets are stored in [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=748&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><em>Introduction for the new team members.</em></p>
<ol>
<li>We use a scrum based, bi-weekly, agile process.</li>
<li>Every 2nd Wednesday we have a Sprint Kickoff meeting where we select tickets to work on in the next sprint. Tickets are chosen based on priorities, e.g. highest priority first and within a priority defects ahead of enhancements.</li>
<li>Tickets are stored in <a href="http://lighthouseapp.com/">Lighthouse</a>.</li>
<li>github is our source code repository.</li>
<li>We use git flow branching model. Please read <a href="http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/">Why aren&#8217;t you using git-flow?</a>.</li>
<li>When starting work on a ticket, create a feature branch for it.</li>
<li>We subscribe to the Test Driven Development philosophy. Code is considered complete when it has full test coverage and the tests are passing.</li>
<li>Both unit and integration tests are implemented using rspec.</li>
<li>Once all work on a ticket has been completed:<br />
- commit the changes to the feature branch using the following git commit message convention: &#8220;[#TICKET_NUMBER] Your message.&#8221; This allows us to cross-reference Lighthouse with github.<br />
- Then pull develop branch from github, rebase develop into feature branch and push feature branch to github. Rebase will keep commit history clean and linear.<br />
- Last but not least initiate a pull request on github. Please refer to <a href="https://help.github.com/articles/using-pull-requests">Using Pull Requests</a>.</li>
<li>Next comes a code review. Developers with a thorough understanding of the code base can take on the reviewer role. When reviewing a pull request, discuss it with developer if necessary. When code is ready for merge:<br />
- Rebase develop to feature branch and push the feature branch to github.<br />
- Merge pull request and delete feature branch on github.<br />
- Last but not least change the ticket state in Lighthouse to resolved.</li>
<li>We use <a href="https://www.tddium.com/">tddium</a> for Continuous Integration. Develop branch commits on github trigger execution of the entire application test suite. You will receive an email notification from tddium. Any failed tests need to be resolved as a priority ahead of working on the next ticket.</li>
<li>QA Team does additional QA on top of test automation. Ticket state is changed to verified if it passes QA. It is changed to open if issues are discovered. Our goal is to have zero re-opened tickets.</li>
<li>Every 2nd Tuesday we have a Sprint Wrap-up meeting where we go over completed and outstanding sprint tickets.</li>
<li>After a Sprint Wrap-up meeting, a release branch is created. Release name is the same as the Lighthouse milestone number for the current sprint, e.g. 1.0.5.4.</li>
<li>After release branch is created we have a day for the final regression testing. Any issues found during regression testing have a priority and have to be fixed in the release branch.</li>
<li>When a release is ready for production, i.e. all tickets are in verified state and there are no failing tests, the release branch is merged into develop and master. The master branch is deployed on production as described in this article: <a href="http://ctoinsights.wordpress.com/2011/08/30/deploying-ruby-applications-in-the-cloud/">Deploying Ruby applications in the cloud</a>.</li>
<li>On rare occasions, a hot fix release is required in between regular releases. Hot fix naming convention adds a digit to the regular release name. For example if 1.0.5.4 was the most recent release prior to a hot fix, the hot fix name would be 1.0.5.4.1.</li>
<li>Every business day we hold a brief team meeting &#8211; 10 minutes scrum at 10:10am.</li>
</ol>
<br /> Tagged: <a href='http://ctoinsights.wordpress.com/tag/continuous-integration/'>continuous integration</a>, <a href='http://ctoinsights.wordpress.com/tag/git/'>git</a>, <a href='http://ctoinsights.wordpress.com/tag/lighthouseapp/'>lighthouseapp</a>, <a href='http://ctoinsights.wordpress.com/tag/software-development/'>software development</a>, <a href='http://ctoinsights.wordpress.com/tag/software-qa/'>software qa</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ctoinsights.wordpress.com/748/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ctoinsights.wordpress.com/748/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=748&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ctoinsights.wordpress.com/2012/12/28/our-development-process/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/f52276f8d9db1d7c6577deb16eef9e0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ctoinsights</media:title>
		</media:content>
	</item>
		<item>
		<title>The Art and Science of Product Prioritization</title>
		<link>http://ctoinsights.wordpress.com/2012/09/27/the-art-and-science-of-product-prioritization/</link>
		<comments>http://ctoinsights.wordpress.com/2012/09/27/the-art-and-science-of-product-prioritization/#comments</comments>
		<pubDate>Thu, 27 Sep 2012 13:27:18 +0000</pubDate>
		<dc:creator>Robert Tekiela</dc:creator>
				<category><![CDATA[software development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[product development]]></category>

		<guid isPermaLink="false">http://ctoinsights.wordpress.com/?p=66</guid>
		<description><![CDATA[Prioritization is a challenge. A typical product wishlist far exceeds the product team capacity. Choosing wisely makes a big difference in product and ultimately business success. Product wishlist items are collected using a variety of sources and techniques. They come from customers and internal stakeholders and are gathered using brainstorming sessions, interviews, online feedback capture, [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=66&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Prioritization is a challenge. A typical product wishlist far exceeds the product team capacity. Choosing wisely makes a big difference in product and ultimately business success.</p>
<p>Product wishlist items are collected using a variety of sources and techniques. They come from customers and internal stakeholders and are gathered using brainstorming sessions, interviews, online feedback capture, focus groups, analysis of sales win/loss reports and support cases, competitive analysis etc. Wishlist is constantly evolving with frequent additions of new items. Different stakeholders commonly have varying perspectives on the top priorities.</p>
<p>The process we have used to determine top priorities starts with scoring (the science part). All items are scored in two dimensions: business value and cost/complexity.</p>
<p><a href="http://ctoinsights.files.wordpress.com/2012/09/2-x-2-prioritization-board1.png"><img class="alignleft size-medium wp-image-742" title="2 x 2 Prioritization Board" alt="" src="http://ctoinsights.files.wordpress.com/2012/09/2-x-2-prioritization-board1.png?w=300&#038;h=228" width="300" height="228" /></a>Items which are high value and low complexity (Quick Wins) are a no brainer and after a sanity check automatically become a priority. Items which are low value and high complexity make for an equally easy decision and are disqualified. Now comes the arts part. Items of high value and high complexity is where the key decisions have to be made. Scoring is a rather imprecise tool so simply using scores to drive decisions would not result in an optimal decision. Top items from the Strategic quadrant are instead selected in a working session involving key stakeholders where their respective merits are debated and ultimately voted on.</p>
<p>The process is outlined in more details below:</p>
<ol style="margin-left:20px;">
<li>Start with the business goals and key themes among customer requests. Translate these into product goals.</li>
<li>Define scoring criteria. Value scores are based on alignment with the product goals. Cost/complexity scores are based on rough engineering estimates.</li>
<li>Sanitize  wishlist.</li>
<li>Brainstorm additional wishlist items.</li>
<li>Score wishlist and place all items on the 2 x 2 board.</li>
<li>Sanity check Quick Wins and Disqualified items.</li>
<li>Debate and select top items from the Strategic quadrant.</li>
<li>Selectively choose Discretionary items.</li>
</ol>
<p>Steps 6 through 8 above are done is a working session with the key stakeholders. The entire process is repeated every 6-7 weeks, or at a minimum once a quarter.</p>
<h4 style="margin-top:20px;"><strong>Related posts:</strong></h4>
<p><a title="Product Hierarchy of Needs: Winning, Keeping and Growing Business" href="http://ctoinsights.wordpress.com/2010/11/07/product-hierarchy-of-needs-winning-keeping-and-growing-business/">Product Hierarchy of Needs: Winning, Keeping and Growing Business</a></p>
<p><a title="Developing products at a high pace and low cost" href="http://ctoinsights.wordpress.com/2010/10/27/developing-products-at-a-high-pace-and-low-cost/">Developing products at a high pace and low cost</a></p>
<br /> Tagged: <a href='http://ctoinsights.wordpress.com/tag/agile/'>agile</a>, <a href='http://ctoinsights.wordpress.com/tag/product-development/'>product development</a>, <a href='http://ctoinsights.wordpress.com/tag/software-development/'>software development</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ctoinsights.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ctoinsights.wordpress.com/66/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=66&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ctoinsights.wordpress.com/2012/09/27/the-art-and-science-of-product-prioritization/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/f52276f8d9db1d7c6577deb16eef9e0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ctoinsights</media:title>
		</media:content>

		<media:content url="http://ctoinsights.files.wordpress.com/2012/09/2-x-2-prioritization-board1.png?w=300" medium="image">
			<media:title type="html">2 x 2 Prioritization Board</media:title>
		</media:content>
	</item>
		<item>
		<title>Popular jQuery Mobile Tutorial upgraded to version 1.1.1</title>
		<link>http://ctoinsights.wordpress.com/2012/08/26/popular-jquery-mobile-tutorial-upgraded-to-version-1-1-1/</link>
		<comments>http://ctoinsights.wordpress.com/2012/08/26/popular-jquery-mobile-tutorial-upgraded-to-version-1-1-1/#comments</comments>
		<pubDate>Mon, 27 Aug 2012 03:36:09 +0000</pubDate>
		<dc:creator>Robert Tekiela</dc:creator>
				<category><![CDATA[software development]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jquery mobile]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://ctoinsights.wordpress.com/?p=717</guid>
		<description><![CDATA[jQuery Mobile Tutorial has been upgraded to work with the latest stable release of jQuery Mobile &#8211; release 1.1.1. If you are interested in learning jQuery Mobile, the tutorial will walk you through the process of building a simple but fully functional mobile application. Part I of the tutorial covers framework basics – creation of [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=717&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a title="jQuery Mobile Tutorial Part I – Static Pages" href="http://ctoinsights.wordpress.com/2012/01/03/jquery-mobile-tutorial-part-i-static-pages/">jQuery Mobile Tutorial</a> has been upgraded to work with the latest stable release of jQuery Mobile &#8211; <a href="http://jquerymobile.com/blog/2012/07/12/jqm-1-1-1/">release 1.1.1</a>.</p>
<p>If you are interested in learning <strong><a href="http://jquerymobile.com/">jQuery Mobile</a></strong>, the tutorial will walk you through the process of building a simple but fully functional mobile application.</p>
<p><a title="jQuery Mobile Tutorial Part I – Static Pages" href="http://ctoinsights.wordpress.com/2012/01/03/jquery-mobile-tutorial-part-i-static-pages/">Part I </a>of the tutorial covers framework basics – creation of static pages. <a href="http://ctoinsights.wordpress.com/2012/01/03/jquery-mobile-tutorial-part-ii-dynamic-pages/"><strong>Part II</strong></a> introduces dynamic pages and <a href="http://ctoinsights.wordpress.com/2012/01/03/jquery-mobile-tutorial-part-iii-managing-data/"><strong>Part III</strong></a> adds data management features – ability to add, store and delete records.</p>
<h3 style="margin-top:20px;">Related posts:</h3>
<p><a title="HTML5 versus Native Apps: Which Platform To Choose For Your Next Mobile App" href="http://ctoinsights.wordpress.com/2012/01/05/html5-versus-native-apps-which-platform-to-choose-for-your-next-mobile-app/">HTML5 versus Native Apps: Which Platform To Choose For Your Next Mobile App</a></p>
<br /> Tagged: <a href='http://ctoinsights.wordpress.com/tag/jquery/'>jquery</a>, <a href='http://ctoinsights.wordpress.com/tag/jquery-mobile/'>jquery mobile</a>, <a href='http://ctoinsights.wordpress.com/tag/mobile/'>mobile</a>, <a href='http://ctoinsights.wordpress.com/tag/programming/'>programming</a>, <a href='http://ctoinsights.wordpress.com/tag/software-development/'>software development</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ctoinsights.wordpress.com/717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ctoinsights.wordpress.com/717/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=717&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ctoinsights.wordpress.com/2012/08/26/popular-jquery-mobile-tutorial-upgraded-to-version-1-1-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/f52276f8d9db1d7c6577deb16eef9e0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ctoinsights</media:title>
		</media:content>
	</item>
		<item>
		<title>When not to use Rails db:migrate?</title>
		<link>http://ctoinsights.wordpress.com/2012/07/28/when-not-to-use-rails-dbmigrate/</link>
		<comments>http://ctoinsights.wordpress.com/2012/07/28/when-not-to-use-rails-dbmigrate/#comments</comments>
		<pubDate>Sat, 28 Jul 2012 12:23:06 +0000</pubDate>
		<dc:creator>Robert Tekiela</dc:creator>
				<category><![CDATA[software development]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://ctoinsights.wordpress.com/?p=685</guid>
		<description><![CDATA[Rails db:migrate is used to manage database structural changes, .e.g. adding database columns, and database content changes, e.g. populating lookup tables. In general it works very well. There are however cases when alternative database migration approaches should be used. These include: long lasting migrations those which lock a table for too long destructive structural changes [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=685&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Rails db:migrate is used to manage database structural changes, .e.g. adding database columns, and database content changes, e.g. populating lookup tables. In general it works very well. There are however cases when alternative database migration approaches should be used. These include:</p>
<ul style="margin-left:30px;">
<li>long lasting migrations</li>
<li>those which lock a table for too long</li>
<li>destructive structural changes</li>
</ul>
<h3 style="margin-top:30px;">Locking table for too long</h3>
<p>Locking table for too long will result in an application downtime as requests attempting to make changes to the table will time out. Structural changes to large tables fall into this category as executing ALTER TABLE will lock the table.</p>
<p>The way around the issue is to implement a multi-step process:</p>
<p>Before the release</p>
<ol style="margin-left:30px;">
<li>Create a new table with the new structure.</li>
<li>Gradually copy data from the original table to the new table.</li>
</ol>
<p>During the release (this can be executed as a transaction)</p>
<ol style="margin-left:30px;">
<li>Copy remaining data, i.e. original table data which are not in the new table yet.</li>
<li>Rename the original table.</li>
<li>Rename the new table to the original table name.</li>
</ol>
<p>The process can be implemented as a set of rake tasks or database procedures.</p>
<h3 style="margin-top:30px;">Long lasting migrations</h3>
<p>Long lasting migrations, even if they do not lock tables for a long time, can be problematic. They elongate the release process and typically you would want to complete a release process as quickly as possible to move to a stable infrastructure state. Data aggregation or data model de-normalization migrations fall into such category. For example you may decide to add a customer balance column to a customer table when calculating balance from transactions table is starting to take too long. This migration can be executed in three steps:</p>
<ol style="margin-left:30px;">
<li>In release A add a new aggregated column.</li>
<li>Between release A and B run a rake task which populates the new column.</li>
<li>In release B deploy code which uses the new column.</li>
</ol>
<h3 style="margin-top:30px;">Destructive structural changes</h3>
<p>Changes such as deleting columns can result in exceptions if a code using a column and the column itself are removed as part of a single release process. Between the time database migration is run and the time code on all servers is upgraded to the latest code base, the application may attempt to use a column which is no longer there.</p>
<p>A simple solution is to do structural deletions over two releases:</p>
<ol style="margin-left:30px;">
<li>In release A remove all code references to the database element (e.g. column) about to be removed.</li>
<li>In release B implement database changes.</li>
</ol>
<h3 style="margin-top:30px;">Work management</h3>
<p>If migration involves multiple steps spanning two releases we simply create multiple, cross-referenced work tickets.</p>
<h3 style="margin-top:30px;">Rake tasks naming convention</h3>
<p>One of the benefits of db:migrate is that it automates sequence of execution for various migrations. That benefit is lost when using rake to implement migration tasks. Implementing a naming convention for the rake tasks as outline below can help:</p>
<p><script src="https://gist.github.com/3183215.js"></script></p>
<p>Tasks associated with a given release are grouped together using the release number as a namespace for the tasks. In general, releases rake file should be sparsely populated, i.e. only a small subset of releases should require migration rake tasks.</p>
<h3 style="margin-top:30px;">Summary</h3>
<p>Rails db:migrate has many benefits and should be used whenever possible to implement database migration. There are a few use cases however where blindly using db:migrate would lead to issues. Simple processes utilizing rake tasks provide a viable alternative for these scenarios.</p>
<br /> Tagged: <a href='http://ctoinsights.wordpress.com/tag/mysql/'>mysql</a>, <a href='http://ctoinsights.wordpress.com/tag/programming/'>programming</a>, <a href='http://ctoinsights.wordpress.com/tag/ruby-on-rails/'>ruby on rails</a>, <a href='http://ctoinsights.wordpress.com/tag/software-development/'>software development</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ctoinsights.wordpress.com/685/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ctoinsights.wordpress.com/685/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=685&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ctoinsights.wordpress.com/2012/07/28/when-not-to-use-rails-dbmigrate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/f52276f8d9db1d7c6577deb16eef9e0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ctoinsights</media:title>
		</media:content>
	</item>
		<item>
		<title>We have been selected by AlwaysOn as an AlwaysOn Global 250 Winner</title>
		<link>http://ctoinsights.wordpress.com/2012/07/11/we-have-been-selected-by-alwayson-as-an-alwayson-global-250-winner/</link>
		<comments>http://ctoinsights.wordpress.com/2012/07/11/we-have-been-selected-by-alwayson-as-an-alwayson-global-250-winner/#comments</comments>
		<pubDate>Wed, 11 Jul 2012 14:01:29 +0000</pubDate>
		<dc:creator>Robert Tekiela</dc:creator>
				<category><![CDATA[software development]]></category>
		<category><![CDATA[startup]]></category>

		<guid isPermaLink="false">http://ctoinsights.wordpress.com/?p=664</guid>
		<description><![CDATA[We have been chosen by AlwaysOn as one of the AlwaysOn Global 250 winners. Inclusion in the AlwaysOn Global 250 signifies leadership amongst its peers and game-changing approaches and technologies that are likely to disrupt existing markets and entrenched players. Here is the press release: 500friends Selected by AlwaysOn as an AlwaysOn Global 250 Winner. A [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=664&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://ctoinsights.files.wordpress.com/2012/07/ao-svis12-250winner-250.jpg"><img class="alignleft size-medium wp-image-666" style="padding-top:10px;" title="AO.SVIS12.250Winner.250" src="http://ctoinsights.files.wordpress.com/2012/07/ao-svis12-250winner-250.jpg?w=239&#038;h=300" alt="Global 250 Winner" width="239" height="300" /></a>We have been chosen by AlwaysOn as one of the AlwaysOn Global 250 winners. Inclusion in the AlwaysOn Global 250 signifies leadership amongst its peers and game-changing approaches and technologies that are likely to disrupt existing markets and entrenched players.</p>
<p>Here is the press release: <a href="http://www.sfgate.com/business/prweb/article/500friends-Selected-by-AlwaysOn-as-an-AlwaysOn-3695589.php">500friends Selected by AlwaysOn as an AlwaysOn Global 250 Winner</a>.</p>
<p>A full list of all the AlwaysOn Global 250 winners can be found on the AlwaysOn website:<br />
<a href="http://www.aonetwork.com/AOStory/Announcing-2012-AlwaysOn-Global-250-Top-Private-Companies">2012 AlwaysOn Global 250 Top Private Companies</a>.</p>
<div style="clear:both;margin-top:40px;">For more context on 500friends check <a href="http://www.sffashionandtech.com/2012/05/08/startup-spotlight-qa-with-500friends/">Startup Spotlight: Q&amp;A with 500friends</a>.</div>
<br /> Tagged: <a href='http://ctoinsights.wordpress.com/tag/startup/'>startup</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ctoinsights.wordpress.com/664/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ctoinsights.wordpress.com/664/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=664&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ctoinsights.wordpress.com/2012/07/11/we-have-been-selected-by-alwayson-as-an-alwayson-global-250-winner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/f52276f8d9db1d7c6577deb16eef9e0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ctoinsights</media:title>
		</media:content>

		<media:content url="http://ctoinsights.files.wordpress.com/2012/07/ao-svis12-250winner-250.jpg?w=239" medium="image">
			<media:title type="html">AO.SVIS12.250Winner.250</media:title>
		</media:content>
	</item>
		<item>
		<title>git-flow with rebase</title>
		<link>http://ctoinsights.wordpress.com/2012/06/29/git-flow-with-rebase/</link>
		<comments>http://ctoinsights.wordpress.com/2012/06/29/git-flow-with-rebase/#comments</comments>
		<pubDate>Fri, 29 Jun 2012 15:05:10 +0000</pubDate>
		<dc:creator>Robert Tekiela</dc:creator>
				<category><![CDATA[software development]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://ctoinsights.wordpress.com/?p=642</guid>
		<description><![CDATA[We are using git-flow for our source code branch management model. If you are not familiar with git-flow, Why aren’t you using git-flow? article provides a nice overview. Many git users may be familiar with the git merge vs git rebase debate. In essence: Merge is simple to use and works great. It creates however lots [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=642&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>We are using git-flow for our source code branch management model. If you are not familiar with git-flow, <a href="http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/">Why aren’t you using git-flow?</a> article provides a nice overview.</p>
<p>Many git users may be familiar with the git merge vs git rebase debate. In essence:</p>
<ol style="margin-left:30px;">
<li>Merge is simple to use and works great. It creates however lots of merge commits especially when working with a larger team.</li>
<li>Rebase keeps commit history linear and clean. It is however harder to use and can be potentially destructive.</li>
</ol>
<p><a href="http://www.jarrodspillers.com/2009/08/19/git-merge-vs-git-rebase-avoiding-rebase-hell/">git merge vs git rebase: Avoiding Rebase Hell</a> article provides a great comparison of both techniques.</p>
<p>The way to get the best of both worlds is to be explicit about when to use one versus the other. For us the simple rules to follow are:</p>
<ol style="margin-left:30px;">
<li>Rebase feature branches.</li>
<li>Never rebase develop or master branch. (Always merge into develop and master.)</li>
<li>Never rebase public branches.</li>
</ol>
<p>To implement the rules we made a small change to the standard git-flow process:</p>
<p>When implementing enhancements or fixes always start by creating a feature branch:</p>
<div style="margin-left:30px;margin-bottom:20px;"><code>git flow feature start foo<br />
</code></div>
<p>When done with work:</p>
<ol style="margin-left:30px;">
<li>pull develop branch from github</li>
<li>rebase feature branch on top of develop
<div style="margin-bottom:20px;"><code><br />
git rebase develop feature/foo</code></div>
</li>
<li>finish feature branch
<div style="margin-bottom:20px;"><code><br />
git flow feature finish foo</code></div>
</li>
<li>push develop to github</li>
</ol>
<p>To get more details on using rebase with feature branches please go to <a href="http://jeffkreeftmeijer.com/2010/the-magical-and-not-harmful-rebase/">The magical (and not harmful) rebase</a> article.</p>
<p>With this simple process change, git commit history is easier to follow while risks of making a mistake are kept at bay.</p>
<br /> Tagged: <a href='http://ctoinsights.wordpress.com/tag/git/'>git</a>, <a href='http://ctoinsights.wordpress.com/tag/software-development/'>software development</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ctoinsights.wordpress.com/642/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ctoinsights.wordpress.com/642/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=642&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ctoinsights.wordpress.com/2012/06/29/git-flow-with-rebase/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/f52276f8d9db1d7c6577deb16eef9e0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ctoinsights</media:title>
		</media:content>
	</item>
		<item>
		<title>CTO Insights has global reach</title>
		<link>http://ctoinsights.wordpress.com/2012/05/30/cto-insights-has-global-reach/</link>
		<comments>http://ctoinsights.wordpress.com/2012/05/30/cto-insights-has-global-reach/#comments</comments>
		<pubDate>Wed, 30 May 2012 15:43:33 +0000</pubDate>
		<dc:creator>Robert Tekiela</dc:creator>
				<category><![CDATA[software development]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://ctoinsights.wordpress.com/?p=631</guid>
		<description><![CDATA[Visitors come from all corners of the world. The top 5 countries are: USA &#8211; 32% of visitors India &#8211; 12% UK &#8211; 6% Germany &#8211; 4% Canada &#8211; 4% Tagged: visualization<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=631&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Visitors come from all corners of the world. The top 5 countries are:</p>
<ol>
<li>USA &#8211; 32% of visitors</li>
<li>India &#8211; 12%</li>
<li>UK &#8211; 6%</li>
<li>Germany &#8211; 4%</li>
<li>Canada &#8211; 4%</li>
</ol>
<p><a href="https://ctoinsights.files.wordpress.com/2012/05/ctoinsights-map.png"><img class="aligncenter size-full wp-image-632" title="CTO Insights Map" src="https://ctoinsights.files.wordpress.com/2012/05/ctoinsights-map.png?w=575&#038;h=369" alt="" width="575" height="369" /></a></p>
<br /> Tagged: <a href='http://ctoinsights.wordpress.com/tag/visualization/'>visualization</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ctoinsights.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ctoinsights.wordpress.com/631/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ctoinsights.wordpress.com&#038;blog=16446976&#038;post=631&#038;subd=ctoinsights&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ctoinsights.wordpress.com/2012/05/30/cto-insights-has-global-reach/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/f52276f8d9db1d7c6577deb16eef9e0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ctoinsights</media:title>
		</media:content>

		<media:content url="https://ctoinsights.files.wordpress.com/2012/05/ctoinsights-map.png" medium="image">
			<media:title type="html">CTO Insights Map</media:title>
		</media:content>
	</item>
	</channel>
</rss>
