<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>select * &#187; process</title>
	<atom:link href="http://aptoma.com/select.star/category/process/feed/" rel="self" type="application/rss+xml" />
	<link>http://aptoma.com/select.star</link>
	<description>web-development, and other issues we really, really care about</description>
	<lastBuildDate>Fri, 09 Dec 2011 11:58:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Thoughts on Program Managers</title>
		<link>http://aptoma.com/select.star/2011/12/09/thoughts-on-program-managers/</link>
		<comments>http://aptoma.com/select.star/2011/12/09/thoughts-on-program-managers/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 10:51:02 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[process]]></category>
		<category><![CDATA[teamwork]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=1313</guid>
		<description><![CDATA[A good program manager (PM) is imperative for making really good software products. In Toyota, they have this role of Chief Engineer. For those who don&#8217;t know, Toyota has been the fastest growing car company most of the time since the 1950&#8242;s, and apart from having technical excellence in their product, they credit a lot [...]]]></description>
			<content:encoded><![CDATA[<p>A good program manager (PM) is imperative for making really good software products.</p>
<p><strong>In Toyota, they have this role of Chief Engineer</strong>. For those who don&#8217;t know, Toyota has been the fastest growing car company most of the time since the 1950&#8242;s, and apart from having technical excellence in their product, they credit a lot of this to the role of the Chief Engineers. The Chief Engineer is a guy that would embed himself with potential customers of the new design. If he were to design a car for carpenters, he&#8217;d put on his carpenter pants and get all carpenty. Usually he&#8217;d discover a lot of design details needed a carpenter. Stuff like double (or triple, or quadruple) coffee holders, a flat dash-board for throwing documents on and to write upon, doors that swing up really wide, to expose the sound system speakers to the outside workers, and so forth. Basically a lot of stuff an office rat, or a technical engineer wouldn&#8217;t dream of.</p>
<p>This approach, combined with the excellent technical quality and their unprecedented production effectiveness, created a lot of success for Toyota.</p>
<p>We&#8217;ve chosen the little more cheesy title &#8220;Program manager&#8221; for our Chief Engineers. We like cheesy, because it&#8217;s so cheesy. (Actually, people don&#8217;t like it).</p>
<p>With 7 people and 3 products, (Aptoma anno 2010) everybody is a PM. And everybody is a developer. And everybody is a janitor. And so on. The lines between developers, visionaries and managers are as blurry as they should and have to be. Everybody is taking turns doing anything, and this is part of the fun of being in a small company. Great stuff.</p>
<p>It doesn&#8217;t scale.</p>
<p><strong>We&#8217;re now 13 people in Aptoma, 10 of which are developers</strong> (and we&#8217;re looking for more talent). With more customers and products, development and maintenance gets increasingly complex, both in coding and in managing. And so we need more focus time on development and on program management as two different, but mutually dependent, exercises.</p>
<p>We now have established formal program management for two of our products (front-page editing, and article- production and layout) and one for our elastic cloud services (streaming, hosting and video transcoding for the media industry).</p>
<h3 dir="ltr">What Does a Program Manager do?</h3>
<p>In short, there are five main responsibilities to the PM.</p>
<ol>
<li>Serve as the customer advocate</li>
<li>Write functional specs</li>
<li>Keep track of progress</li>
<li>Hold team reflections.</li>
<li>Maintain road-map.</li>
<li>Remove obstacles for the team.</li>
</ol>
<h3 dir="ltr">How?</h3>
<p>Seems so simple from the list above, but there is a lot to this role.</p>
<p><strong>1. Serve as the customer advocate.</strong> In order to serve as the customer advocate, you need a lot of information about what to advocate. You need to talk to users, you need to empathically understand them, and you need to dear to expose yourself to irritated users having problems. And you get to talk to those that are really, really happy and has had the time to reflect and envision new stuff. We aim to do this a lot for the same reasons that the Chief Engineer do in Toyota. This can be done by checking in at the customer, and saying &#8220;what&#8217;s up!&#8221;. Sounds easy, but the tricky part of this is that if you have a crappy product, they&#8217;ll only tell you about how crappy your product is. So get your bug-list to zero first. As such, the PM has to coordinate input from various sources, and streamline this information to use it to advocate the customer needs to the rest of the dev-team.</p>
<p><strong>2. &#8230; and that&#8217;s where the functional spec comes in.</strong> Based on the deep understanding of customer needs, the feedback from support, from developers, from just about anyone with a stake in your product, the PM will propose changes, often through a written functional spec. The functional spec will describe an idea for improvement or extension to the product. If the functional spec contains wire-frames (in HTML, or just drawings) it can even be tested on potential users for early feedback.</p>
<p><strong>3/4. Keep track on progress, and hold reflections.</strong> Once you say GO to a great development team, they will go into &#8216;get-shit-done-mode&#8217;, and won&#8217;t stand for any interruptions. That&#8217;s why the PM is keeping noise away from the team by being the customer proxy, gathering input, writing the next functional spec in parallel. And if anyone is to know anything about what is going on, someone must have the job of saying &#8220;Hey! How are things going?&#8221; and &#8220;Hey! Do you have what you need?&#8221;. Developers in &#8216;get-shit-done-mode&#8217;, will first bite your hand off, but everybody appreciates to pause and reflect from time to time, and to be able to report achievements.</p>
<p><strong>5. Maintain roadmap.</strong> This is the wet dream for every bureaucrat. The internal road-map needs to contain information about technical challenges, resource availability, timing, deadlines, suggested and affirmed projects and so forth. Someone needs to coordinate all this. Presto!, the PM is there to help.</p>
<p>So how did anyone in Aptoma find the time for all of this when we didn&#8217;t have formal PMs? They didn&#8217;t. But these things just kind of works, to a point, when the company is small. We&#8217;ve exceeded this limit now, and this, our first small step towards dev-teams’ separation of concern is here.</p>
<p><strong>6. Remove obstacles</strong>. The PM will, by nature of the role, gain overview of the work flow, and during reflections get insight into obstacles that are holding the team back. This can be recurring problems, communication challenges, and so forth. The PM will work to remove such obstacles, to make work flow smoothly.</p>
<h3 dir="ltr">Possible challenges</h3>
<p><strong>Boring maturity</strong>. We have to fine-tune this role for it not to become a boring formal meeting process. And we need to acknowledge that we&#8217;re not Toyota. Yet. We&#8217;re still a very small company, and a lot of people do a lot of different stuff. A job description any cleaner than your average pile of laundry still does not exist at 13 employees.</p>
<p><strong>Conflict of interest</strong>. There’s been internal developer outcry for PMs for the last few months. And as expectations are high, it might be natural to think of a PM as a silver bullet &#8220;Ah, nice, here comes someone to do all stuff that is boring to me, so I can do only the fun parts. Woho!&#8221;. Chances are, however, that some work is fun for both PMs and developers. As such, fun vs. boring is not a well defined separation of concern. For separation of roles to work, one has to consider intellectually (what works, and what does not), as opposed to just consider emotionally what belongs where. The goal is better software and services for our customers, we must keep in mind.</p>
<p><strong>Loss of agility</strong>. If the PM (the bureaucrat that he is) goes all-in on on functional specs, and basically tries to solve the entire problem of creating new functionality/products there, this might lead to over-planning causing unnecessary delays and loss of agility, innovation and flexibility. Knowing programmers quite well, I&#8217;m quite sure he&#8217;ll get a friendly (or even hostile) kick in the butt if this occurs.</p>
<h3 dir="ltr">Expected Benefits</h3>
<ol>
<li>More time for developers to focus on development.</li>
<li>Deeper empathical understanding of our customers needs.</li>
<li>Better and more holistic planning; one guy gets access to all the input and sees the whole picture.</li>
<li>Better coordination to strategy; PMs will report to the director, which makes it easier to provide feedback on direction, and to fine tune strategy.</li>
</ol>
<h3>What We Aim to Preserve</h3>
<ol>
<li>The autonomy of teams; As the director gets higher quality reports, and as planning gets well managed, it might be tempting for top management to mingle more and leave less decisions to the team. This can be harmful.</li>
<li>Developer ownership of ideas; The point of program management is not to shield the dev-team completely from information and customer concerns, but to structure and wisely involve at the right time. It&#8217;s a balancing act.</li>
<li>A peer team-structure; PMs don&#8217;t need ties. They&#8217;re embedded in the team. Authority comes from professional and personal qualities, not from formalities.</li>
</ol>
<p>PS! I say “he” not because we don’t think women can be great developers or PMs, but because this is a note about us. All PMs and developers are still men in this hot dog shop. Don’t let that scare you from contacting us, if you’re a woman.</p>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2011/12/09/thoughts-on-program-managers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Company self-examination</title>
		<link>http://aptoma.com/select.star/2011/02/19/company-self-examintaion/</link>
		<comments>http://aptoma.com/select.star/2011/02/19/company-self-examintaion/#comments</comments>
		<pubDate>Sat, 19 Feb 2011 17:15:30 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[process]]></category>
		<category><![CDATA[teamwork]]></category>
		<category><![CDATA[improvement]]></category>
		<category><![CDATA[retrospect]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=1291</guid>
		<description><![CDATA[This week we gathered the entire company (first time, ever) for a couple of strategy sessions. We ended up doing a lot of reflective exercises, talking a lot about how we work. Below are the results. Identifying our own weaknesses Reflections were very open hearted, which made it a very useful exercise. Not enough “slack” [...]]]></description>
			<content:encoded><![CDATA[<p>This week we gathered the entire company (first time, ever) for a couple of strategy sessions. We ended up doing a lot of reflective exercises, talking a lot about how we work. Below are the results.</p>
<h3>Identifying our own weaknesses</h3>
<p>Reflections were very open hearted, which made it a very useful exercise.</p>
<h4>Not enough “slack” in the system</h4>
<p>This surfaced as a root cause for many of the negative caracteristics we were able to find about ourselves. We’re always pressured for progress on all fronts, by customers, by our own ambitions and by the need for more revenue to keep going. And even though this tension between where we are and where we’d like to be drives us forward at breakneck speeds, it does have some negative side-effects.</p>
<p>a) “Sharpening the saw” Not enough time is spend educating ourselves.<br />
b) Sharing: It feels like disturbing each other when we need to get help or want to share.<br />
c) At times, lack of slack limits our capacity to jump straight onto new important challenges.</p>
<p>Solutions to this problem are many. In many ways it’s a management problem. But solutions rarly have only one single solution. As the management problem might have schrunk in the past years, the culture for pushing the limits of the machinery is there still.</p>
<p>We need to</p>
<ul>
<li>Take the time needed to sharpen the saw. You don’t get more time, you take it.</li>
<li>Drop projects that are not core business.</li>
<li>Be clear on when we are available, and when we’re not.</li>
<li>Insist stronger to hand over projects to customers’ internal development teams.</li>
<li>Hire more people.</li>
</ul>
<p>And please note that the problem is one of ambition, not of sloppiness &#8212; we&#8217;re not working hard due to excessive amounts of bugs. We&#8217;re out there pushing forward.</p>
<h4>Not enough sharing between projects</h4>
<p>Lack of sharing is not always a problem. (Creating shared dependencies between products can be very limiting to innovation. Google’s Eric Scmhidt knows this, as he recently was quoted “I learned a long time ago, <a href="http://android.firstblogfirst.com/2011/02/16/googles-eric-schmidt-on-androids-future-html5-and-more/">don’t try to force technology to be merged</a>.” And thus independency is a strength, too) However, there are ways to increase sharing and still keep the benefit higher than the cost.</p>
<p>We’re always on the lookout for ways to share code and technology without creating limiting dependencies. We’ve had several unsuccesful attempts at this in the past, but we’re getting better. We’re a bit concerned that we’ve been scared by our earlier failures, but we’ve now made a concious decision to keep up the dialogue of a possible “loosely coupled” sharing architecture.</p>
<p>We have a lot to benefit from more knowledge sharing, though. Learning more about “who knows what about what” we believe will enable us to improve our ability to pull knowledge when needed. Combined with fixing the &#8220;lack of slack&#8221;-problem above, we hope that this will trigger many an interesting conversation in the time to come.</p>
<p>We’re forcing ourselves to share more information such as “I’m going to be working on caching technologies for the next two weeks. Let me know if you have anything to share.” and then to be sharing the results findings in each projects regularly (i.e. every two months in an interactive whiteboard-session)</p>
<h4>Our web-site stinks</h4>
<p>Being quite proud of our individual and collective capabilities, we like to think of ourselves as a Ferrari-engine inside a Volkswagen. Thus it’s time to do something serious about the way we present ourselves. That does not mean that you’ll be seeing us coding in suits any time soon, but we’ll definitely have to do something about our web-site. We’re currently on the lookout for graphical designers that can understand our business and help with design and profiling. Let us know if you have any tips. Pimp my <a href="http://aptoma.com">http://aptoma.com</a>. We need it.</p>
<h3>Other caracteristics</h3>
<p>As you can see we’re more interested in what we can improve, than what we’re good at already, and we do think we’re a bit hard on ourselves. Some caracteristics have negative side-effects, and some have positive, but most have both positive and negative aspects. Below are some caracteristics with good side-effects, with a few ones with negative side-effects thrown in for good measure.</p>
<ul>
<li>We’re sometimes a bit hard on ourselves.</li>
<li>We’re very agile &#8211; Customers not accustomed to our style sometimes find that this makes us seem unpredictable &#8212; we’re not commiting for distant detailed roadmaps, as we’re adapting to the ever changing future as it unfolds. We see this as a strenght, and customers tend to do so, too, when they’ve seen us in action for a while.</li>
<li>We like doing everything ourselves &#8211; You don’t have to look further than our web-site to understand that this is not always good. We learn a lot from coding our own sites, frameworks and tools, but sometimes the time has come to admit that we have learned enough and should move on to build on other’s work.</li>
<li>We’re very focussed &#8211; Focussing means saying no to something. Customers don’t always love this. But we didn’t forget or ignore you, we just focussed on something more important for the time being. It’s our job to care for customer needs in the long-haul, also. When we get to your problem, it will also get our undivided attention.</li>
<li>We don’t communicate enough internally.</li>
<li>We think that exposing ourselves to customer feedback is a strenght, but sometimes it becomes too much and it ends up limiting our work.</li>
<li>We’re very clear on what we value in our software: maintainability, usability/productivity and performance.</li>
<li>We’re good at creating cheap proof of concepts before we solidify into production code, but sometimes we move on too fast which creates a bit more <a href="http://en.wikipedia.org/wiki/Technical_debt">technical debt</a> than necessary. But we’re very concious about our technical debt, and we have a track record for paying it down before it is too late.</li>
</ul>
<p>During these strategy sessions we also spent a great deal of time talking about the future of large scale new media publishing, and our role in it. We’re very grateful and excited about our increasing opportunity to play an important role in the way ahead for innovative new media publishers.</p>
<p>And, oh, there’s one solution to all the problems here that we have yet to discuss. We could hire you and put your great skills to good use. <a href="http://aptoma.com/career">Join us in our relentless quest for personal and collective productivity</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2011/02/19/company-self-examintaion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>3 More Industry Problems</title>
		<link>http://aptoma.com/select.star/2010/10/31/3-more-industry-problems/</link>
		<comments>http://aptoma.com/select.star/2010/10/31/3-more-industry-problems/#comments</comments>
		<pubDate>Sun, 31 Oct 2010 22:13:10 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[process]]></category>
		<category><![CDATA[teamwork]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=1260</guid>
		<description><![CDATA[Today I read an excellent and, as always, emotional journal paper by Tom Gilb &#8212; the measure guy of software &#8212; entitled &#8220;What&#8217;s Wrong with Requirements Specifications? An Analysis of the Fundamental Failings of Conventional Thinking about Software Requirements, and Some Suggestions for Getting it Right&#8220;. (Download PDF) It got me thinking (once again) about [...]]]></description>
			<content:encoded><![CDATA[<p>Today I read an excellent and, as always, emotional journal paper by <a href="http://twitter.com/imtomgilb">Tom Gilb</a> &#8212; the measure guy of software &#8212; entitled &#8220;<em><strong>What&#8217;s Wrong with Requirements Specifications</strong>?</em> <em>An Analysis of the Fundamental Failings of Conventional Thinking about Software Requirements, and Some Suggestions for Getting it Right</em>&#8220;. (<a href="http://www.gilb.com/tiki-download_file.php?fileId=443">Download PDF</a>)</p>
<p>It got me thinking (<a href="http://aptoma.com/select.star/2010/01/03/3-major-problems-with-the-software-industry/">once again</a>) about all that is wrong with the software industry. I now have even more to report. Everywhere I look, I see a mess. It is important to acknowledge that the industry is in its infancy. Acknowledging this, you can confidently and profitably dedicate a lot of time to work <em>on</em> the system, not just <em>in </em>the system. Because the system is broken by default, and will remain so for many decades to come, I believe.</p>
<h3>3 Industry Problems</h3>
<p><strong>1. Requirements are not well defined</strong>. The main problem, as I see it, is that we&#8217;re mixing means and ends, as Gilb puts it. We&#8217;re talking too much about what we want, and not so much the background for that wish, which is what we should be specifying. If we know <em>why</em> you want something (i.e. business strategy, broken into objectives), we can use our experience to devise better solutions. Gilb proceeds to explain how to quantify and measure requirements. He&#8217;s right to say that we should, but he&#8217;s just way ahead of us, and we need to fix the way we specify requirements before we can start measuring anything. His point remains valid.</p>
<p><strong>2. Factory organization</strong> &#8211; Separated and specialized functional units passing work between them in a large, efficient factory organization is doomed to fail (planning &amp; specification, design, coding, QA, bugfixing). Such disregard for tacit knowledge and basic <a href="http://www.youtube.com/watch?v=u6XAPnuFjJc">motivational psychology</a> should not exist. Economies of scale in development (and services) is a myth. This has been tested and has failed horribly (think <em>waterfall</em>). It still happens all the time, and in many industries, not just the software industry. Probably also where you are right now. The closest metaphor I can think of is a kindergarden separated into &#8220;baby-feeders&#8221;, &#8220;diaper changers&#8221; and &#8220;comforters&#8221; etc. Think holistically &#8212; the real value delivered in in a kindergarden are not merely the practical operations. By contrast it is the safety and relationship developed with a few adults that the child will value.</p>
<p><strong>3. Budgeting</strong> &#8211; Budgeting is usually a waterfall process in disguise. Budgeting was a tool developed for manufacturing, and should have remained so. But, to a carpenter, every problem looks like a nail, and so budgets are for manufacturing, service organizations and even product development companies. We&#8217;re not in manufacturing. Don&#8217;t adapt their tools. And, yes, this includes the Toyota Production System. Watch out, they&#8217;ll make you decide in your budgets what to do for the next year, and hold you to your promises. They&#8217;ll even scientifically measure this. Budgets forces you to spend the best part of each autumn guessing and assuming while you really should be out there gaining knowledge about emergent challenges, and adapting to them. Time is scarce &#8212; don&#8217;t waste it budgeting.</p>
<h3>What does the Industry Think are the Solutions?</h3>
<ol>
<li>Start XP/Scrum/Lean-teams</li>
<li>Start XP/Scrum/Lean-teams</li>
<li>Start XP/Scrum/Lean-teams</li>
</ol>
<p>John Seddon says it well when he states that everything needs to be projects and tools for us westeners. &#8220;Toolheads&#8221;, he calls us. I believe he&#8217;s got a point. Even Lean, originally The Toyota System, has been subsumed into tools and projects. Every organization has got a lean manager, or a lean team these days &#8212; fixing problems <em>functional department by functional department </em>(oh, the irony) by introducing some tools and running some projects, and then moving on. An A3-reporting there, a daily scrum here, a pull system there, 80% code coverage over there, and so it goes. Basically they are piling new tools and projects onto a broken framework, instead of building the capacity to change the system from the inside by getting managers out there, getting knowledge, working <em>on</em> the system. Get away from budgets, spreadsheets, resource plans and other guesswork &#8211; get knowledge and let&#8217;s use it to improve the way we work.</p>
<p>The current industry solutions only have us doing the wrong thing better. <strong>There&#8217;s nothing more wasteful than doing well what should not be done at all.</strong></p>
<h3>What are the Real Solutions?</h3>
<p>We need to acknowledge that the way work is organized is broken and start addressing it from the core. What makes this challenging, is that the entire organization needs to be in on this, not just the <em>lean tools team</em> or the new empowered Scrum team. These teams are usually not empowered to change the system. Start by getting that power. Talk to your management. Talk to your CEO. Be patient. Discuss. Elaborate. Start small, but do it every day.</p>
<p>You need to design your organization towards challenges (<em>think in terms of what you are solving for your customers, and design against that</em>), rather than just defaulting to functional departments with their meaningless budgets and policies.</p>
<p>This means organizing in cross-functional teams empowered to change the way work is done, with management as a support function embedded into the work. Everyone&#8217;s goal becomes to establish good flow in how we solve real problems for real customers in the most effective way possible.</p>
<p>This is when magic starts to happen, and the fun kicks in. Solving a real problem for a real customer, and actually being there to witness it, is motivating and stimulating. Communicating directly and related to real challenges, not just via plans, sprint-/project backlogs, meetings, reports, Gantt charts and budgets.</p>
<p>Freed from this burden we can spend time improving the way we work, just a little, but every single day. It&#8217;s really quite simple. It&#8217;s fun. It&#8217;s motivating. And not the least, it is very, very profitable. And it is sustainable. It scales.</p>
<p>No more factories with human cogs, no more economies of scale. We all want to be a <a href="http://www.amazon.com/Linchpin-Are-Indispensable-Seth-Godin/dp/1591843162">linchpin</a>.<strong> We need economies of flow.</strong></p>
<p>Anyway, this is how we&#8217;re designing our organization, and it seems to work very well. Come to us and take part of this journey. <a href="http://www.finn.no/finn/job/fulltime/object?finnkode=24912234">We&#8217;re hiring in Oslo and Gothenburg</a>. (Follow the author <a href="http://twitter.com/geirber">@geirber</a> or the company <a href="http://twitter.com/aptoma">@aptoma</a> on twitter, or through <a href="http://feeds.feedburner.com/aptoma/selectstar">RSS</a>)</p>
<h3>References</h3>
<ol>
<li><a href="http://www.newsystemsthinking.com/article_details.asp?ID=49">Why Do We Believe in Economy of Scale</a>? Article on Bryce Harrison inc.</li>
<li><a href="http://www.amazon.com/Linchpin-Are-Indispensable-Seth-Godin/dp/1591843162">Linchpin</a> &#8211; Book by Seth Godin, inspired by the same factory problem</li>
<li><a href="http://aptoma.com/select.star/2010/01/03/3-major-problems-with-the-software-industry/">3 Major Problems with the Software Industry</a> (Select *)</li>
<li><a href="http://www.youtube.com/watch?v=u6XAPnuFjJc">The surprising truth about what motivates us</a> (YouTube)</li>
<li><a href="http://www.gilb.com/tiki-download_file.php?fileId=443">What&#8217;s Wrong with Requirements Specifications</a> (PDF)</li>
<li><a href="http://vimeo.com/4670102">Cultural Change is Free</a> (John Seddon on Vimeo video)</li>
<li><a href="http://en.wikipedia.org/wiki/Systems_thinking">Systems Thinking</a> (Dry, but good, Wikipedia stuff)</li>
<li><a href="http://www.thesystemsthinkingreview.co.uk/index.php?pg=18&amp;utwkstoryid=186">Rethinking Lean service</a> (Entertaining Podcast)</li>
<li><a href="http://www.thesystemsthinkingreview.co.uk/index.php?pg=18&amp;utwkstoryid=177">Economies of scale &#8211; It&#8217;s a myth</a> (Entertaining Podcast)</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2010/10/31/3-more-industry-problems/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Limit Work to Capacity</title>
		<link>http://aptoma.com/select.star/2010/04/22/limit-work-to-capacity/</link>
		<comments>http://aptoma.com/select.star/2010/04/22/limit-work-to-capacity/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 19:50:18 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[Monday School]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[teamwork]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=1233</guid>
		<description><![CDATA[Hard work does not pay off. At least not if your ultimate goal is to improve at what you do. And not if what you do is quality product development. In that case you need to build in slack for learning into the system. You want everyone to have time for sharing, improving and learning [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cheese-burger.net/"><img class="alignright size-medium wp-image-1248" title="Picture 1" src="http://aptoma.com/select.star/wp-content/uploads/2010/04/Picture-1-300x179.png" alt="" width="300" height="179" /></a><a href="http://olvemaudal.wordpress.com/2010/02/12/hard-work-does-not-pay-off/">Hard work does not pay off</a>. At least not if your ultimate goal is to improve at what you do. And not if what you do is quality product development.</p>
<p>In that case you need to build in slack for learning into the system. You want everyone to have time for sharing, improving and learning continuously, and you want to be able to come home from work with energy to pursue your goals for personal skill development even further.</p>
<p>It&#8217;s great fun to be good at what you choose to spend your life doing.</p>
<p>Since the primary raw materials in software product development are skills and intellect, rapid learning is the prime goal and the capital for product development. Fail to invest in raw materials for your business, and you&#8217;ll soon run out of stock. Don&#8217;t <em>allow</em> for time to learn, rather, <em>require</em> it.</p>
<h3>Running a system at 100% yields all sorts of problems.</h3>
<p>Symptoms include</p>
<ul>
<li>You stop talking to each other. &#8220;Sorry, can&#8217;t help, have to go do this thing that is  really urgent&#8221;</li>
<li>You start building technical debt. &#8220;If I just skip to write that test (it&#8217;s really hard to write), then I can save 2 hours today to get to the next thing I have to do.&#8221;</li>
<li>Shallow bug-fixing. &#8220;Need to fix this bug real fast, in order to get the other 4 bugs done, too! No time for digging further&#8221; Root cause analysis and regression testing get skimped on.</li>
<li>Useful, although sometimes inconclusive and somewhat directionless, discussions plainly stops happening.</li>
<li>Stress activates your lizard brain, which numbs the rational being. You are in survival mode.</li>
<li>Work gets less inspiring and fun, which slows things down. Inspiration is high-octane fuel.</li>
<li>People get exhausted, and energy-level is low during, and after work hours. You need to &#8220;relax&#8221; on Facebook at work and in front of the TV at home, instead of doing inspirational learning.</li>
</ul>
<p><a href="http://aptoma.com/select.star/wp-content/uploads/2010/04/congestion.jpg"><img class="alignnone size-full wp-image-1243" title="congestion" src="http://aptoma.com/select.star/wp-content/uploads/2010/04/congestion.jpg" alt="" width="550" height="306" /></a></p>
<p style="text-align: right;"><span style="color: #808080;">(Picture from </span><a href="http://en.wikipedia.org/wiki/File:Moscow_traffic_congestion.JPG"><span style="color: #808080;">Wikimedia commons</span></a><span style="color: #808080;">)</span></p>
<p>If you have trouble grasping the concept, picture a congested highway. If you remove a small percentage of the cars, you get a magnitude of improvement in throughput and speed. <a href="http://en.wikipedia.org/wiki/Traffic_congestion">This is a fact</a>.</p>
<p>Did you ever try to squeeze a washing machine 100% full? No clothes get cleaned. Remove 10 or 20% of the clothes, and you have a winner.</p>
<h3><strong>Don&#8217;t maximize utilization.<br />
Build in time for learning, improving and sharing.</strong></h3>
<p>If you, as we have been, find yourself in this mess. There are several ways to get out of it.</p>
<ol>
<li><strong>Say no.</strong> If you never say no, you don&#8217;t have a strategy &#8212; say no to the least important stuff. Saying no is hard, scary and extremely useful.</li>
<li><strong>If you work for a consultancy firm, give up</strong>. Incentives for maximizing utilization is too high in consultancy companies, as they get paid for &#8220;productive hours&#8221; only. Quit your job, and go to work in a product development company, or a skilled in-house team. Anything but most consultancy firms, they will cannibalize you.</li>
<li><strong>Scale up capacity to meet demand</strong>. What can I say, <a href="http://aptoma.com/career">we are hiring</a>.</li>
</ol>
<h3><strong>Quantified</strong></h3>
<p>This is no science, but if I would be forced to put some numbers on this, I&#8217;d say that:</p>
<ul>
<li>Build in approximately 20% learning/sharing time during normal work hours. Yes, that&#8217;s one whole day a week. We use it for our <a href="http://aptoma.com/select.star/category/monday-school/">monday school</a>, impulsive discussions, reading, friday meeting (our arena for general discussions on processes) and blogging, to mention some activities.</li>
<li> If you want, you can probably &#8220;work&#8221; 60 hours a week or more without any danger of burning out, but <em>only as long as</em> that time is spent balanced and having fun, learning and improving/being productive &#8212; and only if personal situation allows for it without sacrificing time spent on other important values, like your kids.</li>
<li>Don&#8217;t build overtime into your standard operating procedures. Required overtime doing &#8220;productive&#8221; work should be the rare exception, not the default.</li>
</ul>
<p>Find a sustainable pace where you are balancing learning, improving, being productive and all of the time having fun. That&#8217;s an important ingredient in the recipe for success.</p>
<p>By the way, did I mention that <a href="http://aptoma.com/career">we&#8217;re hiring</a> or that <a href="http://aptoma.com/career">we&#8217;re hiring</a>?</p>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2010/04/22/limit-work-to-capacity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>No Scrum, No More</title>
		<link>http://aptoma.com/select.star/2010/02/11/no-scrum-no-more/</link>
		<comments>http://aptoma.com/select.star/2010/02/11/no-scrum-no-more/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 23:11:59 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[process]]></category>
		<category><![CDATA[teamwork]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[goals]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[retrospect]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[sprint]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=1158</guid>
		<description><![CDATA[After listening to Olve Maudal at the Lean Meetup in Oslo yesterday, and after reading some of his tweets today (@olvemaudal) I realized that we never informed our readers that we are not doing Scrum anymore. I don&#8217;t think we have for 9 months or more. We were quite elaborate, if not evangelical, about our [...]]]></description>
			<content:encoded><![CDATA[<p>After listening to Olve Maudal at the Lean  Meetup in Oslo yesterday, and after reading some of <a id="z1-s" title="his tweets today" href="http://twitter.com/olvemaudal/status/8899445418">his tweets today</a> (@<a id="trp5" title="olvemaudal" href="http://twitter.com/olvemaudal">olvemaudal</a>)  I realized that we never informed our readers that we are not doing  Scrum anymore. I don&#8217;t think we have for 9 months or more. We were quite  elaborate, if not evangelical, about our experiments with it <a id="f_ph" title="here on  this blog" href="http://aptoma.com/select.star/?tag=scrum">here on this blog</a>, so I figured it&#8217;s over due to let you  know.</p>
<p>It&#8217;s official: <strong>We&#8217;re not doing Scrum anymore.</strong></p>
<p>I  will take the time to elaborate on why, and I&#8217;ll reflect on what we&#8217;ve  learned from our experiences.</p>
<p><a href="http://aptoma.com/select.star/wp-content/uploads/2010/02/scrum-period-overview1.jpg"><img class="alignnone size-full wp-image-1166" title="scrum-period-overview" src="http://aptoma.com/select.star/wp-content/uploads/2010/02/scrum-period-overview1.jpg" alt="" width="550" height="205" /></a></p>
<h3>Why are we not scrumming?</h3>
<p>The  shortlist:</p>
<ol>
<li><strong>Iterations were too long</strong> &#8211; It would  sometimes feel like a waterfall in miniature. Reality for most development teams is that circumstances change constantly, and developing the capacity to adapt to these changes are more important than planning iterations carefully, which is just a form of guesswork.</li>
<li><strong>Too much  overhead</strong> &#8211; Sprint planning felt a bit forced. We had to decide what  to do for days or weeks to come, and ended up with requirements churn.  Beyond a certain point during planning, we went into congestion, and  stopped caring about the details.</li>
<li><strong>Our sprints are too diverse</strong> &#8211; Sprint goals ended up  so diverse sometimes that we ended  up more often than not with the sprint goal of &#8220;<em>Finish all tasks</em>&#8221; which  was a quite uninspiring goal. (We tried very hard to create good sprint goals)</li>
<li><strong>Demos  not often enough</strong> &#8211; We need to show off the feature we just made <em>right now</em>,  not in 14 or 30 days at the demo. That is way to late for us. Demoing should  be an integral part of each feature or improvement you make. You need to  be close to, and intimate, with real users. If we had investors or any other formal  committee of sponsors that  needed to approve everything we did, we would  see the use of such &#8220;demo roundups&#8221; at regular intervals.</li>
<li><strong>Too long release  cycles</strong> &#8211; The scrum process batches a lot of changes, improvements,  bugfixes and new features into periodical releases. We are working on <a id="j2e6" title="continuous deployment" href="../2010/01/21/notes-on-continuous-deployment/">continuous deployment</a> with a  steady stream of product improvements, which allows for more predictable releases and better fail-tolerance.</li>
<li><strong>&#8220;Scrum is just the easy parts of XP&#8221;  &#8211; </strong>It&#8217;s a quote from Kent Beck, although he does not like to be quoted on that one.  This is why most are doing Scrum in combination with XP of course. I think you in many cases are  better off with XP without Scrum, but that&#8217;s another story. We&#8217;re not  doing XP in its purest form, either. Even though  XP has much stricter coding practices, XP also has its limitations. The  <a id="l.fx" title="lean startup movement" href="http://www.startuplessonslearned.com/2008/09/lean-startup.html">lean startup movement</a> (which  Kent Beck himself seems to be quite interested in) complements the  weaker parts of XP &#8212; the customer feedback part, especially in the  initial phases of product development.</li>
</ol>
<p>You might see a  pattern here: We&#8217;re still doing most, or all, scrum practices, just more  often and in smaller chunks. This brings us closer to Lean.</p>
<h3>What  did we learn from it?</h3>
<p><strong>You should have a Product Backlog</strong>, and  it should be a very simple sortable list. The emphasis should be on  keeping it short, however. A long list of features becomes an  administrative overhead. We found ourselves sifting through much of the same  tasks from sprint planning to sprint planning. Too much got captured in  the sprint backlog. We are still using product backlogs actively.</p>
<p><strong>You  should hold sprint planning meetings.</strong> The problem with the  scrum-format of it is that it has more emphasis on creating a plan up  front (i.e. the waterfall comparison), than it has on the planning  itself. If planning is a monthly activity (or bi-weekly, or whatever  your sprint length is in scrum), you end up reading your plan more than  you spend time planning. We find that planning is at its best a  continuous, on demand, activity. Do more of it, often, but in smaller  chunks, and keep less of it lying around. I will have to agree with <a id="lk75" title="the Dwight" href="http://en.wikipedia.org/wiki/Dwight_D._Eisenhower">the Dwight</a> on this one : <em>Plans are nothing;  planning is everything.</em></p>
<p><strong>Daily scrums solves a non-existing  problem</strong> &#8211; I&#8217;m sure that it is not hard to find team that would  benefit from daily scrums. If you are such a team, chances are you are  not communicating enough. We find that by hanging out on the project  IRC-channel doing continuous micro-coordination and sharing information, and by hooking up on Skype to discuss challenges and  problems on-screen <em>as they arise</em> we have nothing left to coordinate or  discuss on the daily scrums. Everyone is in the loop on what is happening.</p>
<p><strong>Retrospects  are pure beauty.</strong> Again, the problem with scrum for us is not that it is has  bad practices (it has the best of practices, actually). The problem is  that it is performed to seldom to have the desired effect. Retrospect is  not an activity, it is a mindset, and has to permeate everything you  do, and should be done on a continuous basis. Ask these questions about  every little project, task and experiment you run. What went well? What  could be better? What will I focus on improving? It&#8217;s key to learning, and learning is essential.</p>
<h3>Under what  circumstances would we consider scrum?</h3>
<p>If we ever find ourselves in a  multi-team environment with quite large teams (5-10 per team), with  sponsors that needed formal updates and demos, we would be sure to  consider both scrums and scrum of scrums.</p>
<h3><strong>So, was all our  Scrumming just a waste of time?</strong></h3>
<p>No way. It was a learning  experience.</p>
<p>Never forget this: <strong>There is no silver bullet</strong>.  You should try different stuff, be critical and analytical in the  process, ask why to just about everything, and you will learn a lot. Shed each practice that fails to materialize into concrete value for your development process. In the end, no process formalities will save you, your  diverse experience will.</p>
<h3>What will we do differently?</h3>
<p>We will  continue to draw inspiration from Scrum, Lean, XP, Lean Startup,  Customer Development, Continuous Deployment, etc. But instead of changing ourselves to  fit the process (as was much the case with our scrum-efforts), we will look at the core of their ideas, extract their  essence and see how they could apply to our existing and intuitive way  of doing things;</p>
<p><em><strong>If being a keen student of processes and  development theory has taught us only one thing, it is that we should  trust our gut feeling, our sense of what is purposeful and what is common  sense, and that most of our current practices are worth keeping, and improving. </strong></em></p>
<p>I advise you to try to improve the quality of how  your team already, and intuitively go about doing the work. Do not change the way you work entirely in an attempt to magically  achieve quality and speed. This way you can better preserve what you already got figured out, and at the same time be improving continuously.</p>
<h3>In plain words, what are we doing now?</h3>
<p>We still do a lot of the scrum practices. We just do them more often, and in smaller chunks. You might even say continuously, to some extent. We have learned to cherish planning over plans, and a retrospective mindset over bi-weekly formal retrospects. We write less plans, we take less notes. Communication flows more freely instead of formally in batches.</p>
<p>We get more done, and with increased quality, and we also have Scrum to thank for it, but definitely not only Scrum.</p>
<p>One of our biggest ongoing project nowadays is our establishment of <a href="http://aptoma.com/select.star/2010/01/21/notes-on-continuous-deployment/">Continuous Deployment</a> practices, and all the discipline that goes with such a strategy. (It requires some coordination when you have servers deployed all over Europe, as we do) You will need to optimize the entire value stream to achieve this. We&#8217;ll keep you posted on how it evolves, and the benefits our customers and we reap from it.</p>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2010/02/11/no-scrum-no-more/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Notes on Continuous Deployment</title>
		<link>http://aptoma.com/select.star/2010/01/21/notes-on-continuous-deployment/</link>
		<comments>http://aptoma.com/select.star/2010/01/21/notes-on-continuous-deployment/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 22:00:50 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[process]]></category>
		<category><![CDATA[teamwork]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=1073</guid>
		<description><![CDATA[Scenario: A customer has a problem with your software. His questions makes you think and you get an idea for a feature improvement. A good one! Act on it. Plan it Code it Test it Commit it Deploy it Nothing out of the ordinary, it seems. The seemingly new thing about continuous deployment is that [...]]]></description>
			<content:encoded><![CDATA[<p>Scenario: A customer has a problem with your software. His questions makes you think and you get an idea for a feature improvement. A good one! Act on it.</p>
<ul>
<li>Plan it</li>
<li>Code it</li>
<li>Test it</li>
<li>Commit it</li>
<li>Deploy it</li>
</ul>
<p>Nothing out of the ordinary, it seems. The seemingly new thing about continuous deployment is that we remove all the waiting in between each of these steps. That is, we don&#8217;t batch changes before to testing them. You test immediately what you just coded. You commit it. Not to a branch due for merging in a week. No, directly to trunk. And you even deploy it at once to production. Done. Clear your mind of it, enjoy, relax, spend some time doing something proactive.</p>
<p>Develop, test, commit, deploy. One feature, bug-fix or improvement at a time. That is the mantra for continuous deployment.</p>
<p>Some developers, and perhaps particularly managers, will find the idea crazy at first. Release immediately? Omigod. But frequently this sensation of safety in postponing something, is not rooted in any real benefits, and there seems to be no rational answer to the question of: why wait? Did your code ever get better during the night? Some will even argue that big feature releases is a marketing invention, invented to squeeze more money out of customers frustrated with the bugs in the current version. This practice of batching changes in releases in turn got embraced by the industry as the professional way of conducting business. I could easily add this to my list of <a href="http://aptoma.com/select.star/2010/01/03/3-major-problems-with-the-software-industry/">major problems with the software industry</a>.</p>
<p>Wouldn&#8217;t it be nice to deliver a bug-fix the same day it was reported? The same hour, even? It might just be possible if you are continuously deploying product improvements like this, kaizen-style.</p>
<h3><strong>Where does this idea come from?</strong></h3>
<p>The idea of continuous deployment comes from the lean school of thought. In the mindset of lean kanban pull systems &#8212; where you are constantly looking to remove waste and minimize your batch-sizes &#8212; grouping a lot of big software changes together in big batches and big releases makes no sense.</p>
<p>Even <a href="http://code.flickr.com/blog/2009/12/02/flipping-out/">Flickr is doing continuous deployment</a> these days.</p>
<p>The whole idea is to respond to customer &#8220;pull&#8221;. The customer needs something now. The clock starts ticking. Is the feature more useful if you wait a bit before you start coding it? No. Then start now. Is the feature better if you wait with testing after coding it? No. Then test now. Wait until tomorrow to integrate into version system? Is that better? No. Then integrate. Does thing get better if we wait to deploy that new feature? No. Then deploy it. Stop your clock. The shorter the time, the better for the customer. And better for quality, it seems. And the better for you, the coder. Unreleased code is stressful. Released, working code, is stress free. The code works. It&#8217;s proven.</p>
<blockquote><p><em>After a few iterations, our fear level was actually lower than how we used to feel after a staged release. Because we were committing less code per release, we could correlate issues to a release with certainty. (From <a href="http://www.startuplessonslearned.com/2010/01/case-study-continuous-deployment-makes.html">Case Study: Continuous deployment makes releases non-events</a>)</em></p></blockquote>
<p>Bugs that are not discoverable in testing are easier to find and fix if you released only one feature, than if you batched a months worth of changes together in one big bang release. Or so the lean school of thought states. I agree. You would have written the code hours ago, and probably say &#8216;a-ha!&#8217; the second you hear about it. 20 minutes later, a bug-fix is released. Why wait?</p>
<p><strong>A few resources on lean from Amazon:</strong></p>
<ul>
<li><a href="http://www.amazon.com/Lean-Software-Development-Agile-Toolkit/dp/0321150783">Software Development: An Agile Toolkit</a></li>
<li><a href="http://www.amazon.com/Implementing-Lean-Software-Development-Concept/dp/0321437381/ref=pd_bxgy_b_img_b">Implementing Lean Software Development: From Concept to Cash</a></li>
<li><a href="http://www.amazon.com/Lean-Thinking-Corporation-Revised-Updated/dp/0743249275/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1264106246&amp;sr=1-1">Lean Thinking: Banish Waste and Create Wealth in Your Corporation</a></li>
<li><a href="http://www.amazon.com/Toyota-Way-Jeffrey-Liker/dp/0071392319">The Toyota Way</a></li>
</ul>
<h3>What does it take?</h3>
<p>Not surprisingly, continuous deployment requires a high level of team discipline. No goofing off and no more fixing everything <em>mañana</em> in testing. Practices such as <a href="http://www.shmula.com/987/jeff-bezos-5-why-exercise-root-cause-analysis-cause-and-effect-ishikawa-lean-thinking-six-sigma">5 Why root cause analysis</a>, extensive testing and automation will be required. But it will all lead you to better quality and higher iteration speed. <a href="http://aptoma.com/select.star/2010/01/08/quality-and-speed-a-primer-in-team-design/">Speed and quality</a>, it is all related.</p>
<p>Eric Ries writes on O&#8217;Reilly Radar about &#8220;<a href="http://radar.oreilly.com/2009/03/continuous-deployment-5-eas.html">Continuous Deployment in 5 easy steps</a>&#8220;. Eric Ries has gotten a lot of traction with his <a href="http://www.startuplessonslearned.com/2008/09/lean-startup.html">Lean Startup movement</a> lately. And you can follow his thoughts and reports on personal experience on continuous deployment on his blog <a href="http://www.startuplessonslearned.com/">http://www.startuplessonslearned.com/</a></p>
<h3>Look ahead</h3>
<p>Will we pursue this issue of continuous deployment any further? In the name of delivering a high quality experience to our customers and users now, when they still need it: <em>yes we will.</em></p>
<p>If you will join us in this, please follow <a href="http://feeds.feedburner.com/aptoma/selectstar">this blog on RSS</a> or follow <a href="http://twitter.com/aptoma">the company</a> or <a href="http://twitter.com/geirber">the author</a> on twitter. If you digg it, then <a href="http://digg.com/programming/Notes_on_Continuous_Deployment">digg it</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2010/01/21/notes-on-continuous-deployment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Great Software : A Definition</title>
		<link>http://aptoma.com/select.star/2010/01/16/great-software-a-definition/</link>
		<comments>http://aptoma.com/select.star/2010/01/16/great-software-a-definition/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 15:00:19 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[process]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=1043</guid>
		<description><![CDATA[Defining what great software is, is not a complex endeavor. I prefer to boil it down into two distinct characteristics. a) Ease of Use The software solution walks you gently through the process of solving your problems as intended. No distractions, no unnecessary decisions to make, no confusions, always heading towards the goal. In short [...]]]></description>
			<content:encoded><![CDATA[<p>Defining what great software is, is not a complex endeavor. I prefer to boil it down into two distinct characteristics.</p>
<h3>a) Ease of Use</h3>
<p>The software solution walks you gently through the process of solving your problems as intended. No distractions, no unnecessary decisions to make, no confusions, always heading towards the goal. In short : A great user experience.</p>
<h3>b) Quality of Craft</h3>
<p>Quality of Craft means that the software solution is easy to maintain, it&#8217;s easy to modify so that it&#8217;s always accurate in solving the ever changing problems it&#8217;s going after (and by that I don&#8217;t just mean in configuration, but easy to change the code of), it&#8217;s easy to move about (i.e. from server to server), it performs great, it responds immediately when interacted with and it scales, or can be modified to scale, in order to handle the traffic it will attract.</p>
<p><img class="alignnone size-full wp-image-1056" title="aalesund" src="http://aptoma.com/select.star/wp-content/uploads/2010/01/aalesund.jpg" alt="" width="560" height="143" /></p>
<p style="text-align: right;">Photo by <a href="http://www.flickr.com/photos/toffiloff/4257711728/">toffiloff</a></p>
<p>Isn&#8217;t that an intuitive definition?<br />
The definition is common sense in software product development.<br />
Perhaps a &#8220;<em>Software Product 101</em>&#8221; should start out with such a definition.</p>
<p>Thus, we should assume that everyone get&#8217;s this nailed down from the start, or through a little experience, no?</p>
<p>I&#8217;m sorry to report that surprisingly few players in the industry is able to see this.<br />
And even fewer is able to execute it.<br />
<em></em></p>
<p><strong><em>It&#8217;s always either or, never both. The tendency is quite prominent.</em></strong></p>
<p>It seems as start-ups create great solution accuracy and a good user experience using customer oriented development<em> </em>methods<em>,</em> and in general a lean start-up methodology. Growth, however, turns them in the direction of stability and the need for predictability. Sadly this usually leads to a loss of the qualities in a) in favor of a few of the more stabilizing qualities in b).</p>
<p>As much as I agree that as a start-up turns into an enterprise, the need for operations stability and predictable performance increase. I do not, however, believe that this is achieved best by sacrificing the ability to adapt and to keep the software usable and accurate.</p>
<p>I believe that while sacrificing qualities in a) might seem to be the <em>easiest path</em>, it is not the <em>only path, </em>not to mention that it in no way is the <em>right path.</em></p>
<p>I am part of a small, growing, start-up company, and we&#8217;re focusing our resources at keeping on the right path, maintaining the agility of a start-up, and the stability and predictability of an enterprise. It is possible &#8212; this path exists.</p>
<p>It&#8217;s hard to find. But we&#8217;ll find it, or die trying.</p>
<p><strong>Related posts</strong></p>
<ul>
<li>A <a href="../2008/09/16/dont-expect-our-buildings-to-work-they-are-pieces-of-art/">post about buildings</a> (and software quality).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2010/01/16/great-software-a-definition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Pair Programming?</title>
		<link>http://aptoma.com/select.star/2009/05/27/why-pair-programming/</link>
		<comments>http://aptoma.com/select.star/2009/05/27/why-pair-programming/#comments</comments>
		<pubDate>Wed, 27 May 2009 04:00:10 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[pair programming]]></category>
		<category><![CDATA[practice]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=742</guid>
		<description><![CDATA[I am a sucker for rationale. I&#8217;ve been struggling with rationale on the Extreme Programming (XP)-practice of pair programming for quite some time. What at first looks like one person writing code, and the other one watching, has admittedly been very counter intuitive to me. Let me share my current thoughts of benefits and disadvantages [...]]]></description>
			<content:encoded><![CDATA[<p>I am a sucker for rationale. I&#8217;ve been struggling with rationale on the Extreme Programming (XP)-practice of pair programming for quite some time. What at first looks like one person writing code, and the other one watching, has admittedly been very counter intuitive to me. Let me share my current thoughts of benefits and disadvantages of so called pairing.</p>
<p><a href="http://aptoma.com/select.star/wp-content/uploads/2009/05/pair-of-feet.jpg"><img class="alignnone size-full wp-image-743" style="border:0" title="pair-of-feet" src="http://aptoma.com/select.star/wp-content/uploads/2009/05/pair-of-feet.jpg" alt="pair-of-feet" width="560" height="318" /></a></p>
<h3>Disadvantages of Pair Programming</h3>
<p><strong>Don&#8217;t four hands produce more code than two?<br />
</strong></p>
<p>If you are a carpenter, you can hit more nails with four hands than with two. If you are a brick-layer you can lay more bricks with four hands than with two. If you are a developer you can write more production code with four hands than with two. Or wait. This is based on the assumption that the bottleneck in software development is a mechanical one ; the speed of which you can type on the keyboard. My 10 years as a developer and 5 years as a program manager tells me otherwise. The bottlenecks in somewhat innovative projects (non-repetitive) rarely or never include typing speed. Bottlenecks <em>do </em>include hesitation (doubting your own solution), introducing bugs and having to go back to fix it, suboptimal design that deserves a refactoring, lack of needed knowledge for the task, loss of focus and so on.</p>
<p>A small disclaimer before I go on : We have not been experimenting with Pair Programming for more than a few months, and my above observations are based on observing teams develop from a managerial point of view and from reflecting upon my own coding habits as a team member.</p>
<h3>Benefits of Pair Programming</h3>
<p><strong>Amplify learning</strong></p>
<p>The speed of learning in pair programming is overwhelming. Once you enter a topic one party has more experience in, you are in for a ride. I have never experienced learning at such a pace as when this occurs.</p>
<p><strong>Prevent bugs</strong></p>
<p>Bugs are cheapest when they are prevented  from being introduced with measures that does not put restraints on your risk-taking and innovation. Pairing keeps you innovating, and will still help you spot errors more frequently. You will be more critical of your own code, and you will have someone constantly looking for possible improvements in your code, such as stopping a bug in the making, or having an idea for an even better test.</p>
<p><strong>Continuous improvement</strong></p>
<p>Pair programming is a dialogue between two people trying to simultaneously program, and understand how to program better.</p>
<p><strong>Articulating ideas</strong></p>
<p>Pair programming forces you to put words to your thoughts. This will through constant practice improve your skills in articulating your ideas.</p>
<p><strong>Share frustrations</strong></p>
<p>The responsibility on one single programmer can be huge at times. It is relieving to carry the load together. A teams strength and robustness is greater than the sum of strengths.</p>
<p><strong>Avoid hesitation</strong></p>
<p>When exhausted for ideas or new angles, it can lead to hesitation to implement what you suspect is a sub-optimal solution. The union of ideas and angles between the two developers makes this a rarer incident, and the resulting discussions will usually help remove the knots causing hesitation.</p>
<p><strong>Distributed resources<br />
</strong></p>
<p>From a managers point of view, a migration of people between project modules, and even between projects, becomes vastly easier. This is a dream come true. Nobody is the sole &#8220;owner&#8221; of code anymore, and developers can move more freely between code sections and projects, simplifying the complex task of resource scheduling. Starting out on unfamiliar code means that you should be pair programming with someone with a lot of domain knowledge in the start.</p>
<h3>How to do pair programming</h3>
<p>Pair programming is two people using one keyboard to write code. Here are some important best-practices to go along with that description.</p>
<ol>
<li>Choose a suitable partner for pair programming the given task during <a href="http://aptoma.com/select.star/2008/08/15/the-sprint-part-22-the-daily-scrum/">the daily scrum.</a></li>
<li>Sit side by side with only one keyboard and one mouse. Both should have a good view of the monitor.</li>
<li>It must be easy to slide the keyboard from person to person. Switch roles from typer to observer every so often.</li>
<li>Discuss and have a good time.</li>
</ol>
<p>So, these are my reflections on the subject so far. <a href="http://feeds.feedburner.com/aptoma/selectstar">I will be sure to update you (RSS)</a> on any changes of opiniton as we continue to improve our development practices.</p>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2009/05/27/why-pair-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Your Rights as a Customer</title>
		<link>http://aptoma.com/select.star/2009/05/20/your-rights-as-a-customer/</link>
		<comments>http://aptoma.com/select.star/2009/05/20/your-rights-as-a-customer/#comments</comments>
		<pubDate>Wed, 20 May 2009 04:00:23 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[process]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[customer]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=727</guid>
		<description><![CDATA[The Software Management Manifesto *) You have the right to an overall plan. The team should tell you what they could accomplish in the next year or two, and tell you how much that would cost. You have the right to see progress. From the very beginning of the project, the team should be producing [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://aptoma.com/select.star/wp-content/uploads/2009/05/good-news.jpg"><img class="alignnone size-full wp-image-732" style="border:0" title="good-news" src="http://aptoma.com/select.star/wp-content/uploads/2009/05/good-news.jpg" alt="good-news" width="560" height="159" /></a></p>
<h3>The Software Management Manifesto *)</h3>
<p><strong>You have the right to an overall plan</strong>. The team should tell you what they could accomplish in the next year or two, and tell you how much that would cost.</p>
<p><strong>You have the right to see progress</strong>. From the very beginning of the project, the team should be producing functionality that you care about. The functionality should be in the form of a running system, proven to work by passing repeatable tests that you specify.</p>
<p><strong>You have the right to change your mind</strong>. As software development proceeds, you should be able to substitute new functionality for old. You should be able to change the relative priorities of the features of the system, dictating what should be done first and what should be done later.</p>
<p><strong>You have the right to be informed of schedule changes</strong>. Since some things will turn out to be easier than expected and some things harder, the schedule is going to change. You have the right be informed of such changes as soon as the programmers know about them. You have the right to exercise your business judgment by choosing among options for reducing scope so as to restore the original date. You have the right to cancel further development at any time and be left with a useful, working system that reflects your investment up to that date.</p>
<p><strong>*) From <a href="http://c2.com/cgi/wiki?SoftwareManagementManifesto">Software Management Manifesto</a></strong></p>
<p>Does your process ensure your customers these rights?</p>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2009/05/20/your-rights-as-a-customer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>9 Usual Suspects &#8212; What could be improved?</title>
		<link>http://aptoma.com/select.star/2009/05/13/9-usual-suspects-what-could-be-improved/</link>
		<comments>http://aptoma.com/select.star/2009/05/13/9-usual-suspects-what-could-be-improved/#comments</comments>
		<pubDate>Wed, 13 May 2009 04:00:59 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[process]]></category>
		<category><![CDATA[continuous improvement]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[retrospect]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=704</guid>
		<description><![CDATA[One of the more useful activities of Scrum involves a bit of self-reflection &#8212; namely the retrospect. Admit that what you did yesterday could be done better today, and you are on the way to continuous improvement &#8212; a goal in and of itself. Scrum tells you to ask &#8220;What could be improved for the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://aptoma.com/select.star/wp-content/uploads/2009/05/a-dude.jpg"><img class="alignnone size-full wp-image-718" style="border:0" title="a-dude" src="http://aptoma.com/select.star/wp-content/uploads/2009/05/a-dude.jpg" alt="a-dude" width="560" height="231" /></a></p>
<p>One of the more useful activities of Scrum involves a bit of self-reflection &#8212; namely the retrospect. Admit that what you did yesterday could be done better today, and you are on the way to continuous improvement &#8212; a goal in and of itself.</p>
<p>Scrum tells you to ask &#8220;<em>What could be improved for the next sprint</em>?&#8221; at each retrospect. It is usually hard to think of good answers to this question. In this post I make an effort to compile a list of the most usual suspects, and I also suggest some remedies we have seen to work.</p>
<h3>If you are anything like us, your usual suspects would be:</h3>
<p>Presented in no particular order, these are suggestions for improvement that we have discovered.</p>
<h4>1. Complex and / or undocumented code</h4>
<p>Did you stumble upon any code that were hard to understand and even the comments did not help you out? If you did, you know how time consuming and frustrating this is fixing such code. It is a giant waste of time &#8212; and you have to spend a lot of time understanding the whole picture in order to refactor it to simpler, documented code. <em><strong>Andidote</strong> : Refactor mercilessly. Stop writing legacy code.</em></p>
<h4>2. Untested code</h4>
<p>Did you ever struggle to track down a bug in code, only to find that it could have easily have been pinpointed in milliseconds if a test had existed? Did you ever fear improving a piece of code because you did not trust the tests to cover enough to tell you if you broke anything? This and similar kinds of project mistrust is a real killer for productivity. <em><strong>Antidote</strong> : Stop writing legacy code. If you have to use legacy code, write tests for the code you are about to use, first.<br />
</em></p>
<h4>3. 90% done</h4>
<p>Did you ever start coding on some functionality, only to find that it depends on something that is <em>almost</em> finished, but not quite? Obviously you&#8217;ll have to finish the 90% done item. And it takes a lot of time, you have to dig into it (losing the context of the current functionality you are working on) in order to complete it properly. <strong><em>Antidote</em></strong><em> : Schedule work one user-story at a time</em><em>,  and bring all code to 100% completion &#8212; i.e make it pass all unit-tests and acceptance tests (customer tests) &#8212; before proceeding to the next feature.<br />
</em></p>
<h4>4. &#8220;Iterating quality in&#8221;</h4>
<p>Thinking of iterations in form of &#8220;write incomplete code now&#8221; and the next iteration (whenever that is) &#8220;I&#8217;ll make it right(er)&#8221;, will bring you into all sorts of trouble. This kind of mentality leads to both 1, 2 and 3 above. <strong><em>Antidote</em></strong><em> : Add more discipline to your iterations. All iterations should end in all commited code being 100% done. Iterations are lovely and necessary, and you will improve existing code during each of them, but you should do your best the first time, as well.</em></p>
<h4>5. You tested what?!</h4>
<p>Did you just receive feedback on stuff you did a month / two months / three months ago? Delaying acceptance-testing (customer testing) until a developer has forgotten all about the code is very waterfallish. <strong><em>Antidote</em></strong><em> : Keep cycle time from checked in code until testing, deploying and feedback as low as possible (hours or days, not weeks or months).</em></p>
<h4>6. Setting architectural goals, instead of functional goals</h4>
<p>Setting out to &#8220;<em>Create world-saving fancy-schmancy plug-in-environment</em>&#8221; instead of &#8220;<em>Allow programmer to paste text-data through a plugin-api</em>&#8221; (much smaller and better defined) will usually lead us into creating a lot of code that will not be used any time soon. Also, it is much harder to measure &#8220;done&#8221; in &#8220;Create fancy plugin-environment&#8221; and the goal in itself is likely to bee too big for one sprint. It leads us into the &#8220;90% done&#8221;-problem. <strong><em>Antidote</em></strong><em> : Deliver value continuously and in increments by splitting the problem into smaller user stories, each with a value for the customer. The user stories will be much smaller, allowing feedback and quality into the process.</em></p>
<h4>7. Big-bang integrations</h4>
<p>Branching for a while is not a problem when you keep your branch synchronized to trunk all the time. Merging to trunk becomes a breeze. The problem is created for the other guy(s) that have another active branch (god forbid). When you merge to trunk, they are (when synchronizing) smacked in the face with your last week of changes. <strong><em>Antidote</em></strong><em> : Branch only when you must in order to keep commiting daily changesets which would otherwise make the trunk unstable. Merge to trunk as soon as you have a state of passing all tests. Aim for worst-case scenarios of day(s) between merging to trunk, not weeks.<br />
</em></p>
<h4>8. The future is strangling the present</h4>
<p>If you are spending a lot of time in requirements (user-stories) the future is killing the present. You are probably going into details too early.  <strong><em>Antidote</em></strong><em> : Add <a href="http://aptoma.com/select.star/2009/04/23/just-in-time-user-stories-in-the-product-backlog/">just-in-time discipline</a> to your process.</em></p>
<p><strong>9. New functionality, but no users<br />
</strong></p>
<p>Have you ever launched a new functionality that no-one were delighted to have immediately? This is a waste of time, and best-case scenario someone will start using it in 3 months and lead you into what resembles #5 above. <strong><em>Antidote</em></strong><em> : Your planning process is broken, <a href="http://aptoma.com/select.star/2009/05/05/whos-next-how-to-prioritize-your-product-backlog/">involve real users in planning</a>, make sure you are not planning to far ahead.</em></p>
<p>The &#8220;<a href="http://www.projectsmart.co.uk/docs/chaos-report.pdf">Standish Group Report &#8211; Chaos</a>&#8221; (1995) points out a key difference between bridge building projects and software development projects (a difference besides the 3000 years of experience in building bridges). The key difference is that when a bridge falls down, it is investigated and a report is written on the cause of the failure. This is not so in the computer industry, where failures are covered up, ignored, and/or rationalized. As a result, we keep making the same mistakes over and over again.</p>
<p>Consequently, do not judge anyone by their mistakes, but by their ability to recover and learn from them. Ultimately this will determine your success.</p>
<p>Seeking to continuously improve materializes in admitting that the last time you did it, you did not do it as well as you could be doing it today. Finding out why, is the key. Today you can be better than yesterday, tomorrow you can be better than today, and so on. This is true if you are willing to take a honest and sincere look at your mistakes.</p>
<p>What could you have been doing better in your previous projects?<br />
Do you recognize any of our usual suspects?</p>
<p><a href="http://feeds.feedburner.com/aptoma/selectstar">Stay tuned with RSS</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2009/05/13/9-usual-suspects-what-could-be-improved/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

