<?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>Software Engineering - from the Trenches</title>
	<atom:link href="http://sw-engineer.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://sw-engineer.com</link>
	<description>The art and practice of delivering software products</description>
	<lastBuildDate>Tue, 05 Jan 2010 07:42:58 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='sw-engineer.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/bcf6874f160b6f853bbbb7c72bf2ab51?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>Software Engineering - from the Trenches</title>
		<link>http://sw-engineer.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://sw-engineer.com/osd.xml" title="Software Engineering &#8211; from the Trenches" />
	<atom:link rel='hub' href='http://sw-engineer.com/?pushpress=hub'/>
		<item>
		<title>New Year’s One Wish – and One Resolution</title>
		<link>http://sw-engineer.com/2010/01/05/new-year%e2%80%99s-one-wish-%e2%80%93-and-one-resolution/</link>
		<comments>http://sw-engineer.com/2010/01/05/new-year%e2%80%99s-one-wish-%e2%80%93-and-one-resolution/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 07:42:58 +0000</pubDate>
		<dc:creator>swengineer</dc:creator>
				<category><![CDATA[Entrepreneurship]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://sw-engineer.com/?p=89</guid>
		<description><![CDATA[New Year’s One Wish: Specs on Time
New Year’s One Resolution: Fostering More Innovation
<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=89&subd=swengineering&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>It is that time of year again …. New Year’s resolutions. Well, I won’t talk – in this blog – about staying fit or a better work-life balance, but rather I’ll keep it focused on software engineering. I will also keep it simple and limit to one wish: specs on time &#8212; and one resolution: fostering more innovation.</p>
<h1><span style="color:#99cc00;">New Year’s One Wish: Specs on Time</span></h1>
<p>If I could wave a magic wand, and change just one thing in my professional life, it would be: <strong>Engineering receives specs 8 weeks prior to the official start of the release</strong></p>
<h3>Why?</h3>
<p>As obvious as the answer is, in general, the Business team (product management and execs who are involved in the product roadmap) don’t seem to grasp that if Engineering gets incomplete specs when we are supposed to start coding, well … we can’t start coding – which means we will not be able to deliver as many features as we could have.</p>
<p>For example, let’s say that one release finishes July 31, and that –as is typically the case &#8211; we only start discussing the December release on August 1. The result is that the specs do not get finalized until the end of August. Thus rather than having the expected 5 months to implement the new release, we have four. Actually, we have much less. …</p>
<h3>Why “8 weeks prior”?</h3>
<p>A lot of work must take place between the time Engineering receives the spec, and the time all developers can start coding in earnest:</p>
<ul>
<li>Scope the deliverables: to figure out what subset of the proposed list of features submitted by PM can actually be delivered in the imposed timeframe</li>
<li>Finalize the exact deliverables: Based on the “cost” (scope) provided by Engineering, the PM team determines the final list of deliverables for the release</li>
<li>Architecture and design: some features require thinking before coding J</li>
<li>Technology analysis: evaluate and validate any new third-party tools, libraries, or packages</li>
<li>Task breakdown and allocation to individual developers</li>
</ul>
<p>Only when all these tasks have been completed – at least on the most important features &#8211; can development start in earnest.</p>
<p>8 weeks seems like a long time, and there is obviously flexibility in the number. The newer the functionality, the more uncertainty on the scope, and the more research required, the more lead time is needed by Engineering to plan out the release.</p>
<p>A good rule of thumb is: when the previous release is feature-complete is the time when PM and Engineering need to start planning the next release, specs in hand.</p>
<h3>What Spec?</h3>
<p>… Enough to be able to scope, and plan</p>
<p>In order for Engineering to commit to deliver certain features by a certain date, Engineering needs enough information about these features to be able to scope them – in other words, something more substantial than a handful of bullets on a PowerPoint slide, or a wiki.</p>
<p>There are many ways to write up requirements, and in the spirit of Agile Development, we don’t really want, nor need, everything written down upfront. On the other hand, Engineering needs a modicum of clarity and specificity about what needs to be built. This can be delivered via use cases, UI mock-ups, flow-charts, feature list as long as the Engineering team can appreciate the scope of work: e.g. feature enhancement vs brand new functionality? Is new technology required? Are there performance challenges? Are there new partners or systems with whom we need to interface? Etc.</p>
<h1><span style="color:#99cc00;">New Year’s One Resolution: Fostering More Innovation</span></h1>
<p>The day-to-day, week-to-week, month-to-month pressure on the Engineering team is “to deliver on-time, on quality and on budget” The vast majority, not to say all, demands are short-term and reactionary: requests from customers, or responses to competitive pressures.</p>
<p>However, the Engineering team also has the responsibility to innovate: to add to our products something that nobody else has thought of. If we don’t, then within a couple of years, a competitor, or a new startup, will, forcing us to react and catch up.</p>
<p>So, how does one drive innovation in an Engineering team, when there is never enough time to do the things that the business team requires? The answer is that we have to make, sometimes steal, the time, and we have to be efficient – both are admittedly easier blogged about than done.  Please send me your suggestions!</p>
<h3>Making the Time to Innovate</h3>
<p>Few companies are as profitable as Google, and can afford to grant a blanket 20% of their time to employees to do self-directed research. On the other hand, in a world where technologies become obsolete within a couple of years, it is suicidal not to heed <a href="https://www.stephencovey.com/7habits/7habits-habit7.php">Steve Covey’s 7<sup>th</sup> Habit: “Sharpen the Saw”</a>. This applies to each of us as individuals, but also as a team.</p>
<p>In practice, this means each engineer must, on his/her own, make time to research new technologies and approaches. It also means that as a team, we need to organize time to discuss promising technologies.</p>
<p>The best approach that I have found is “Tech Talks” where members of the Engineering team present their recent work; articles, books or blogs they have read; or simply a new technique that they have invented.</p>
<h3>Directed Innovation</h3>
<p>“Directed innovation” is admittedly a contradiction in terms. Yet, a small company cannot afford to disperse its resources. It is thus incumbent on the leadership to present the right context for the Engineering team in which to explore, why our customers buy our product and what will make a true difference for our business: performance, scalability, usability, reliability, etc?</p>
<p>With this context, we can direct our investigations and leverage our efforts. Again, team work, and group discussions usually accelerate the growth of ideas.</p>
<p>Getting a startup to articulate its vision and strategy, particularly how these translates to technology needs, has traditionally been a challenge in most of the startups where I have worked. The mode of operation has typically been more reactive – following the orders that will make the quarter …</p>
<p>This is exactly why fostering more innovation is my one and only New Year’s resolution.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swengineering.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swengineering.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swengineering.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swengineering.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swengineering.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swengineering.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swengineering.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swengineering.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swengineering.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swengineering.wordpress.com/89/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=89&subd=swengineering&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://sw-engineer.com/2010/01/05/new-year%e2%80%99s-one-wish-%e2%80%93-and-one-resolution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86d3ab51ec3b0926836957f8e717bc60?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">swengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>Planning &#8211; and Executing the Plan &#8211; are Part of the Job</title>
		<link>http://sw-engineer.com/2009/12/19/planning-and-executing-the-plan-are-part-of-the-job/</link>
		<comments>http://sw-engineer.com/2009/12/19/planning-and-executing-the-plan-are-part-of-the-job/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 06:20:52 +0000</pubDate>
		<dc:creator>swengineer</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>
		<category><![CDATA[Entrepreneurship]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://sw-engineer.com/?p=85</guid>
		<description><![CDATA[Along with writing good code, planning and meeting the plan are part of an engineer's responsibilities, in order for the product to be successful and the business to thrive<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=85&subd=swengineering&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Being an engineer entails more than writing good code. It also requires being a good corporate citizen. We write and test software so that it can be used by our customers. The Engineering team is one of the teams that constitute the business. As such, we need to coordinate our activities with those of the other teams in the business: Marketing, Sales, Operations, and Support. We are dependent on these other teams for our software to find its way into the hands of our customers. We also depend on them for the business to survive. Let’s not forget that Engineering is an expense center, and that without the Sales team, there would not be any paycheck.</p>
<p>Our obligation to the other teams in the company can be summarized fairly simply: we need to deliver what we promised, on time. We thus need to be able to forecast within a reasonable horizon what we will be able to create, and then deliver against our forecast.</p>
<h3>Planning is Difficult but Necessary</h3>
<p>Some argue that writing software is a creative and innovative endeavor, which, as such cannot be predicted. The comparison is made with Civil Engineering where designing a new building is akin to applying well documented formulas and following well defined processes lending themselves to formulaic forecasting. While there is truth to the argument, it cannot be taken to the limit. It does not means that forecasting a software project is impossible, but rather that it is hard.<br />
This being said, we don’t have a choice. As I often point out to my colleagues, sales people have to forecast every quarter, and one can argue that forecasting sales is eminently more challenging, since it relies on the behavior of people over whom we have very little control: our customers. Yet, no company can operate without a sales forecast, and forecasting is one of the skills that salespeople need to develop, along with their sales acumen. Engineers are in the same situation.</p>
<p>More specifically, the reasons we make plans are:</p>
<ul>
<li><strong>To forecast when a given release will be complete</strong>. This in turn will drive forecasts for sales projections, staffing assignment in services – which in turn drive financial projections, and how the company manages its expenditures – such as our salaries</li>
<li><strong>To make strategic decisions</strong>: for example, if certain set of features take too long, or too many resources, we may decide to postpone their implementation, and allocate resources to another product or set of features.</li>
<li><strong>To make our own decisions</strong>: by knowing how much work each task will take allows us to staff projects appropriately, and thus be as efficient as possible.  Over-staffing and under-staffing both have negative consequences that are easy to understand</li>
<li><strong>To align internal resources</strong>: the most obvious example is that the QA team needs to know when a certain feature will be ready to be tested.<br />
The above illustrates how important it is to meet our commitments, once we have announced our plans. If we don’t meet our plans, we let other people down, and force them to scramble to make alternate plans. Yet, meeting one’s commitments is not only about working hard. It starts with making good plans.</li>
</ul>
<h3>Making Good Plans</h3>
<p>How does one make good plans?</p>
<ul>
<li>First and foremost: <strong>include everything</strong> (easier said than done but none the less critical)
<ul>
<li>Think through ALL the tasks that are required to complete the job: create a new Maven project, become familiar with the idiosyncrasies of a new software package, upgrade libraries to a new version, organize design reviews, code, unit tests, integration tests, performance tests, error recovery tests, security intrusion tests, documentation, training, etc.</li>
<li>Account for everything that happens in a typical day/week: e.g. Meetings, interrupts from Ops, support, or other</li>
</ul>
</li>
<li><strong>Be realistic</strong>: Engineers tend to be optimistic – make sure that you take into account that something at some point is going to go wrong
<ul>
<li>The best technique that I know is to use history as a reference. Have you typically been late/early on your past projects. Are there activities that you typically fail to account for?</li>
</ul>
</li>
<li><strong>Build some buffer</strong> – because it is important to meet the commitment (and if you don’t need the buffer, you’ll use the time to implement an extra feature, or start the next release early)</li>
</ul>
<h3>Tracking Progress</h3>
<p>A tool like Atlassian’s Jira allows each developer to enter their tasks and the time for each task. It is critical that each developer enter their own time estimate. No task should be longer than 2-3 days. If it is, it is best to break it up. I have found it to be the right balance between having enough detail in the task to grasp its whole scope, while keeping the total number of tasks manageable.</p>
<p>It is important to think of a task as a complete project: including reviewing requirements, design, code, integration, testing, documentation, hand-off to QA. Of course, each of these tasks can be spelled out when their scope warrants it. Again, include the typical daily overhead in the estimates .<br />
Once we have entered the tasks in Jira, it is critical to track them accurately. Don’t be shy about entering time beyond your original estimates if you are running late: your teammates, and your team lead, need to know &#8212; so that they can make alternate plans if necessary. Progress tracking tools are not meant to find faults, but for project management and communication: it is a much worse offense to your team to keep quiet about your being late, or struggling, on a task, than the fact of being late.  Being late is a problem that can be dealt with – keeping quiet is a professional fault that hurts the project even more than bad code.</p>
<p>One important note: a task is DONE when you won’t need to put any more work into it. In particular, this means a piece of code is not done until it has been fully tested and validated.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swengineering.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swengineering.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swengineering.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swengineering.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swengineering.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swengineering.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swengineering.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swengineering.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swengineering.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swengineering.wordpress.com/85/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=85&subd=swengineering&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://sw-engineer.com/2009/12/19/planning-and-executing-the-plan-are-part-of-the-job/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86d3ab51ec3b0926836957f8e717bc60?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">swengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>Agile Processes for Formal Releases</title>
		<link>http://sw-engineer.com/2009/12/19/agile-processes-for-formal-releases/</link>
		<comments>http://sw-engineer.com/2009/12/19/agile-processes-for-formal-releases/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 19:09:46 +0000</pubDate>
		<dc:creator>swengineer</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>
		<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://sw-engineer.com/?p=79</guid>
		<description><![CDATA[2-4 week milestones culminating in a show-and-tell where Engineering and Product Owner(s) engage in a discussion about priorities deliver a lot of the advantages of Agile methodologies, even without official buy-in from the management team<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=79&subd=swengineering&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Engineering can  follow a mostly Agile methodology, even if the rest of the company does not. For example, you can still break up the development effort into 2-4 week sprints/milestones, even if the Product Owner does not indulge in reviewing priorities for each milestone. In fact, I contend that by having frequent end-of-milestone review, you will in effect elicit prioritization from the Product Management team.</p>
<h3>2-4 Week Sprints/Milestones</h3>
<p>Regular milestones (every 2 to 4 weeks) are essential for a several reasons, each sufficient in its own right</p>
<ul>
<li>2-4 weeks is the proper horizon for planning. While it is not impossible to make plans over longer horizons, the accuracy of these plans drops significantly when they extend beyond 4 weeks. Per Agile, the plan for each Sprint needs to be made “bottoms-up” by the developers who are working on the project</li>
<li>Commitment to the plan – Since the developers created the plan themselves, we can ask them to commit to its timely execution. Accuracy in estimating one’s work is a skill that each developer must fine-tune</li>
<li>Visibility of progress. By having an “almost shippable” release tested at the end of each sprint, we can all assess progress realistically. As the Manifesto for Agile Software Development states “Working software is the primary measure of progress.”.  My measure of progress is binary – if a feature passes all the tests then it is 100% done, if not it is not done (0% complete).</li>
</ul>
<p>With the rhythm of 2-4 week milestones, every one on the team can see the product being built, with the confidence that true progress is being made and the expectation that no nasty surprises are lurking at the tail of the project.<br />
Show-and-Tell</p>
<p>Show-and-tell is the culmination of the milestone, where the project team demonstrates the new features to their colleagues inside and outside of Engineering. It is critical to advertise the Show-and-Tell outside of the Engineering team, including to the CEO, VP Sales, VP Marketing, etc. The benefits of Show-and-Tell sessions are multiple:</p>
<ul>
<li>Rewards for the engineers: The show-and-tell is a perfect opportunity to acknowledge the contribution of each engineer on the project and offer them public recognitions</li>
<li>Avoid surprises at the end: the last thing you want when you have toiled away for 3-6 months on a project is to hear something like “Nice work guys … but this is not what I expected!”, whether it is from your own team, or from customers. Thanks to regular show-and-tell, there are no surprises. We also give the tools to the Product Management team to share these early releases with customers, as appropriate.</li>
<li>Reassure Management: By demonstrating regular forward progress to the management team, we can relieve some of their anxiety as to whether we will be able to meet our deliverables. Equally important, when the project was too ambitious to start with, Engineering can give early warning to the management team that alternative plans need to be made, whether it is to reinforce the Engineering team, or to manage customer expectations.</li>
</ul>
<p>Just like the milestones ensure that the Engineering team can manage its progress without surprises., the Show-and-Tell perform the same function for the business team.<br />
Furthermore, the “Show-and-Tell” give “fair warning” to the rest of the company that the release is on its way, so that the marketing and sales machines can rev up in anticipation of the completion of the release (rather than “wait-and-see” until it’s officially released).<br />
Engage into Discussions about Prioritization</p>
<p>While the business team may not embrace the Agile methodology, by holding the Show-and-Tell events, we effectively engage the Product Management team in a discussion about prioritization. Even when their perspective is “Everything is important, everything must be delivered”, by witnessing the progress, a discussion naturally ensues about whether we need to enhance, or rework,  what has already been built, what features should be developed next, and the reaction of customers to the early releases.<br />
There is no magic formula to make these discussions happen, but, in my experience, it simply happens naturally.</p>
<p>More than ever, in today’s fast-changing environment, Engineering must be both predictable and adaptable. Predictable so that the rest of the company can operate efficiently (e.g. by starting to market a release before it is actually complete) and adaptable in order to respond quickly to changes in the market and/or the competition. Having frequent milestones, and show-and-tell, give visibility to progress and set the stage to review priorities , and adjust them if necessary, with minimal impact on the efficiency of the Engineering team.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swengineering.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swengineering.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swengineering.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swengineering.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swengineering.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swengineering.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swengineering.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swengineering.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swengineering.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swengineering.wordpress.com/79/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=79&subd=swengineering&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://sw-engineer.com/2009/12/19/agile-processes-for-formal-releases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86d3ab51ec3b0926836957f8e717bc60?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">swengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>Setting Expectations about Formal Releases with the Business Team</title>
		<link>http://sw-engineer.com/2009/11/21/setting-expectations-about-formal-releases-with-the-business-team/</link>
		<comments>http://sw-engineer.com/2009/11/21/setting-expectations-about-formal-releases-with-the-business-team/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 19:05:29 +0000</pubDate>
		<dc:creator>swengineer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sw-engineer.com/?p=73</guid>
		<description><![CDATA[Product Management sets features and priorities - Engineering sets schedule ... and meets schedule<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=73&subd=swengineering&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>While the business team may desire, or be obligated, to fix both the date of a release and the features that will comprise it, it is our job as Engineers to educate them on how unrealistic this approach is [under the assumption that staffing cannot be increased and quality is not negotiable]. It is also our job to offer alternatives.</p>
<p>By working collaboratively, we can redefine the desired outcome in a way that still meets the business needs and allows for a speedier implementation, without compromising quality.</p>
<p>The fundamental rule of engagement is that &#8230;</p>
<h3><strong> Product Management Sets Features And Priorities &#8212; Engineering Estimates The Schedule … And Meets The Schedule.</strong></h3>
<p>Engineering is a key contributor to the product roadmap, sometimes even the primary contributor. However, the Product Management (PM) team has, by definition, the ownership of the business derived from the product, and as such they call the shots when it comes to the definition of features, and priorities.</p>
<p>On the other hand, PM has no business pronouncing how long it will take to implement the desired feature sets – this is Engineering’s purview. This is no different than when we are dealing with a contractor to remodel our kitchen: we can tell them what we want the kitchen to look like, but he/she is not going to do business with us if we tell him how much he/she can charge us, and/or how quickly the job will be completed.</p>
<p>Why? It simply boils down to ownership and accountability</p>
<p>Engineers, by and large, are a good sport and will do whatever they can to meet even the most unrealistic schedule. Ultimately, however, hard work cannot compensate for a schedule that is plainly not feasible.</p>
<p>Since it is Engineering’s job to develop the product, having anyone other than Engineering make estimates, or worse, commitments about schedule, removes the ownership and accountability of meeting the schedule from the Engineering team.</p>
<p><strong> </strong></p>
<h3><strong>Schedules Only Have Value If There Is A Reasonable Expectation That They Will Be Met.</strong></h3>
<p>We set a schedule for the release of a product for a reason: so that other teams inside (e.g. marketing, sales) and outside the company (e.g. customers, partners) can make their own plans based on the availability of the product at a given date.  If we don’t meet the schedule, these other teams will have to redo their plans and will resent us for it. Worse, if we establish a habit of missing schedules, they will stop making plans and just wait-and-see until the product is actually delivered. This can create a vicious circle where the Engineering team sees that the Sales team does not plan on the product being ready on time, and thus does not feel the pressure to deliver on time – which reinforces the Sales team’s attitude, &#8230;.</p>
<p>The best way – by far – to build reliable schedules is to let the engineers who are responsible for the delivery of the product estimate their own schedule. For two reasons, one because the estimate will be more reliable and two because the engineers then have ownership of the schedule.</p>
<p>I have worked with a few CEOs who did not trust Engineering with estimates, and who were convinced that giving impossible tasks to the Engineering team ensured that they could get every last drop of blood/work out of the team. This is plain wrong.</p>
<p>Once in a while you can indeed rally the troops to meet an impossible target and “save the company”. However, over time, it quickly becomes counter-productive. People will not accept arbitrary challenges and will simply dis-engage.</p>
<p>On the other hand, when empowered to estimate their own schedule, Engineers will then feel accountable for meeting it, and it will become a matter of personal, and team, pride to deliver on-time. Furthermore, this fosters a culture of success – and a virtuous circle of people being able to rely on teammates’ commitments.</p>
<h3>Schedule And Feature Set Result From A Collaborative Effort</h3>
<p>Pushing the kitchen remodeling analogy further: Usually, the first bid is too expensive. What follows is a discussion about how flexible the dates are, what are the critical elements driving the dates and price, and a series of “what if …” discussions. The same needs to happen between Engineering and Product Management: what flexibility do we have in the dates? For example, will the customer to whom we promised certain features actually go into production at the said date, or will they accept a beta release because they need to do their own tests in a Staging environment? Are all the options and variations of a particular capability required by the release date, or can some of them be pushed out to the next release?</p>
<p>One of the most satisfying moments of the job is when product managers and engineers brainstorm on how to meet the business needs of our customers in innovative ways. By bringing these two teams together and sharing the knowledge of customer needs, or why a certain feature requires a lot of work, or why by softening a specific aspect, implementation becomes much easier, we truly create value for the company. At the end of this brainstorm, we have truly optimized the features we offer AND the effort required to deliver them. The continuous repetition of this exercise allows us to deliver more, faster.</p>
<p>&nbsp;</p>
<p>The final ingredient is to provide transparency to the Engineering process – which is frequently considered as a black box. It is because of this lack of visibility that people on the outside tend to buy themselves insurance and ask for a schedule that’s more aggressive than need be. In the next blog, we will show how Agile Software Engineering provides, among other things, not only visibility on the progress of the Engineering team, but also the ability to adjust the course.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swengineering.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swengineering.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swengineering.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swengineering.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swengineering.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swengineering.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swengineering.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swengineering.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swengineering.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swengineering.wordpress.com/73/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=73&subd=swengineering&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://sw-engineer.com/2009/11/21/setting-expectations-about-formal-releases-with-the-business-team/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86d3ab51ec3b0926836957f8e717bc60?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">swengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>Violating the Laws of Physics: When the Business Imposes both Release Date and Features</title>
		<link>http://sw-engineer.com/2009/11/08/violating-the-laws-of-physics-when-the-business-imposes-both-release-date-and-features/</link>
		<comments>http://sw-engineer.com/2009/11/08/violating-the-laws-of-physics-when-the-business-imposes-both-release-date-and-features/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 02:49:07 +0000</pubDate>
		<dc:creator>swengineer</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://sw-engineer.com/?p=67</guid>
		<description><![CDATA[Managing an Engineering team, when the company imposes both features to be delivered and the release date<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=67&subd=swengineering&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<h1></h1>
<p>In all the companies where I have worked, the business side has been “supportive” of Agile software development methodologies – in its own way J. They like the story, agree it makes total sense … except for the part where we talk about adjusting priorities and not committing ahead of time to delivering specific features by a certain date – even whilst recognizing that historically, priorities have significantly changed in the midst of a release.</p>
<p>&nbsp;</p>
<p>Given that, for all practical purposes, headcount is fixed (budgets are rarely elastic), and quality is non-negotiable, this combination of <strong>fixing features of the release and the release date violates the laws of physics</strong>!  Only Engineering can estimate how long it will take to develop a certain of features (given fixed resources and without impacting quality). The Business team (product managers, VP Marketing, CEO, etc) cannot estimate the amount of effort a given release will take. Just like we don’t tell our contractor how long (or how much) it will take to remodel your kitchen, the business team must let Engineering scope the effort, and time, required for a release.</p>
<p>&nbsp;</p>
<p>In this multi-part blog, I will present my recommendations on how to best manage a team in this environment. I hasten to say that I have not found the perfect solution and I am still working hard at f refining it daily.</p>
<p>&nbsp;</p>
<p>Three important aspects drive the management techniques:</p>
<ol>
<li>Understanding, and communicating to the      Engineering team, the “Why”: why the business needs to impose both dates      and features … and why this is unlikely to change materially</li>
<li>Communicating to the business teams      what they can expect from the Engineering team, and establishing “rules of      engagement”</li>
<li>Understanding, and implementing, the      Agile principles that are most helpful in this environment.</li>
</ol>
<h3>The (Legitimate) Reasons for Formal Release Processes</h3>
<p>To be clear, a continuous release process, where new features are deployed as soon as they are developed and tested is ideal. Unfortunately, this is only possible in specific environments, e.g. self-hosted web-apps, and does not work for ISVs.</p>
<p>&nbsp;</p>
<p>Most ISVs which sell to enterprises need to publish their 18-24 month product roadmap. Customers don’t just buy today’s product, but also tomorrow’s. This 2-year product roadmap is most critical  for startup whose buyers accept the risk of buying from a fledgling company because of the promise the continuous stream of benefits committed in the product roadmap. “Committed” is the operative word: because of its startup status the company must meet every single one of its promises in order to maintain the fragile trust of its customers.</p>
<p>&nbsp;</p>
<p>Here are some common (legitimate) reasons that prevent “continuous” release, and require formal release:</p>
<ul>
<li>The software is installed on customers’ premises. In this case, it is important to “version” the code. It would be impossible to manage communications, installation, or support, if each customer installed a different version</li>
<li>The overhead of introducing new features makes it too costly to release one feature at a time. Any function can cause this overhead to be too dear – even in the case of a hosted (SaaS) web-app:
<ul>
<li>QA – if a bug cannot be afforded (e.g. financial applications, regulatory conditions),</li>
<li>End-user communications &amp; training: when the usage paradigm is changed significantly, deliberate communications and user training will be necessary. Similarly, some environments have seasonality that limit the opportunities to introduce something new (e.g. schools, retail)</li>
<li>Integration with 3<sup>rd</sup> party partners, and/or customer systems: will require a phase of joint testing upon any change in our software</li>
<li>Customer release processes: even in a SaaS environment, customers (e.g. in  mission critical applications such as e-mail, and/or sensitive applications like finance) will impose their own pace of deployment, and limit the number of upgrades to 1 or 2 a year</li>
<li>Marketing: the business may be such that opportunities to communicate to customers, partners and analysts are rare and costly, and consequently, it is necessary to group features in a release to maximize the excitement about product announcement.</li>
<li>Customer commitments: As the CEO, VP of Sales, and sales team scour the country, or the globe, in search of orders, they make commitments to customers in order to win deals, as to features being available by a certain date.</li>
</ul>
</li>
</ul>
<p>&nbsp;</p>
<p>In all the situations listed above, one could argue that there is no reason why Engineering should not be involved in setting dates before commitments are made. And the point is correct. It is in everyone’s interest to involve Engineering before making commitments. This is called the Product Roadmap process … which we will discuss in a subsequent blog</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swengineering.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swengineering.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swengineering.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swengineering.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swengineering.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swengineering.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swengineering.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swengineering.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swengineering.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swengineering.wordpress.com/67/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=67&subd=swengineering&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://sw-engineer.com/2009/11/08/violating-the-laws-of-physics-when-the-business-imposes-both-release-date-and-features/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86d3ab51ec3b0926836957f8e717bc60?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">swengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>Cloud Computing – The Miracle Tool for Testing</title>
		<link>http://sw-engineer.com/2009/10/10/cloud-computing-%e2%80%93-the-miracle-tool-for-testing/</link>
		<comments>http://sw-engineer.com/2009/10/10/cloud-computing-%e2%80%93-the-miracle-tool-for-testing/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 20:02:21 +0000</pubDate>
		<dc:creator>swengineer</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Entrepreneurship]]></category>
		<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[Quality]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://sw-engineer.com/?p=61</guid>
		<description><![CDATA[Cloud Computing eliminates restrictions due to the number of servers in the QA lab, and thus allows concurrent testing by developers and QA engineers. By making it easy to test often, and to expose early releases to the outside world, Cloud Computing will improve product quality<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=61&subd=swengineering&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Does this story rings familiar? You are in a planning meeting for the next release, and learn that in addition to supporting Oracle 11g, the product will also need to support Microsoft SQL Server 2008 (or DB2, or mySQL, or PostgreSQL). Once the typical brouhaha dies down about how complicated this will be, how the whole code will need to be ripped apart, and how much time this will take, the Director of QA turns to you and asks for a couple of additional servers for the QA lab, so that the software can be tested on the two databases in parallel; minimum of three servers: 1 for the database, 1 for our software, and 1 for the test fixtures. The following day, it’s the developer lead’s turn to ask for more servers: need at least 1 “populated” database against which the developers can test, plus another set up for the daily build, etc.  Makes perfect sense … Except that no budget has been allocated for these servers! Soon you find yourself with your beggar’s cup in the CEO’s office, explaining to him, and the CFO, why your team needs these extra servers when “you already have so many!!”</p>
<h3>Rejoice! Here comes Cloud Computing to the rescue ..</h3>
<p>Cloud Computing could not only eliminate the need to purchase servers for testing, but also actually radically improves your ability to test, and thus improve product quality.</p>
<p>Cloud Computing, such as <a href="http://aws.amazon.com/ec2/">Amazon EC2</a>,  offers the ability to deploy (and un-deploy) software on demand. One pays “by the hour” of computing used, and storage and bandwidth consumed. This is <strong>perfect for testing</strong> (by developers and by QA): compute load varies greatly over the cycle of the day, as well as the cycles of the release.</p>
<p>First of all, every developer can now have his/her own test setup against which to test. There is no limitation of hardware, no begging, borrowing or stealing from your colleagues for unutilized servers. One can just deploy at will. Furthermore, there is no restriction on the number of servers. So if you need to test a four-server cluster, you don’t have to hunt around for free servers, you just do it.</p>
<p>Similarly the daily build can deploy to multiple test environments concurrently and thus accelerate the validation of the build.</p>
<p>Finally, the QA team can also test in multiple environments simultaneously, e.g. Oracle <em>and</em> SQL Server at the same time! This offers the potential benefit of being able to test a much larger number of deployment scenarios, than would be possible using one’s own hardware.</p>
<h3>Naturally, leveraging a Cloud Computing infrastructure, requires new tools.</h3>
<p>First and foremost, all the <strong>tests must be automated</strong>. While technology has created virtual servers, it has not yet inventing virtual test engineers J.  Secondly, one will have to build tools to automatically deploy, e.g. from the build environment, the new version of the software, and the test fixtures, as well as collect the results of the test runs.</p>
<p>One can be quite creative with the test management tools. For example, if a test setup encounters a high-severity bug, you could configure your test software to pause the test, deploy to a second environment and continue testing in the second environment. This allows you to go back to the first test setup to troubleshoot, and find the cause of the crash.</p>
<p>Another fascinating advantage is that you can deploy demo or beta systems at will  (assuming your deployment model allows it.), and let your sales team or prospective customers to “play with” the early release. By making it easier to expose early releases of the product to the outside world, Cloud Computing further improves the quality of your product.</p>
<h3>Will you save money by testing in a Cloud Computing infrastructure?</h3>
<p>Obviously the answer depends … on your usage, but also on factors like how much data you need to keep permanently in the cloud. For example you may need to permanently store a synthetic database of a million users (it would be too slow to upload it each time). You will also incur higher networking traffic.</p>
<p>In addition, you may not want to move all your tests to the cloud. For example, you may want to keep your stress-tests, or longevity tests in-house, since these will be running 24&#215;7, and you may want the option of running them on bare-metal.</p>
<p>At the end of the day, to me <strong>the attraction of Cloud Computing for testing is that it will increase quality</strong> (in addition to reducing costs). It will allow each developer to have access to a test environment at will.  It will create an additional impetus for test automation. Cloud Computing will also allow the concurrent deployment of tests to an arbitrary number of computing environments, and make it easier to give early access to your customers. Net-net, this translates to more tests in the same amount of time with less effort. It’s all goodness.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swengineering.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swengineering.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swengineering.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swengineering.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swengineering.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swengineering.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swengineering.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swengineering.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swengineering.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swengineering.wordpress.com/61/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=61&subd=swengineering&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://sw-engineer.com/2009/10/10/cloud-computing-%e2%80%93-the-miracle-tool-for-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86d3ab51ec3b0926836957f8e717bc60?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">swengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>“Dailies” Bolster Creativity</title>
		<link>http://sw-engineer.com/2009/10/10/%e2%80%9cdailies%e2%80%9d-bolster-creativity/</link>
		<comments>http://sw-engineer.com/2009/10/10/%e2%80%9cdailies%e2%80%9d-bolster-creativity/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 18:33:38 +0000</pubDate>
		<dc:creator>swengineer</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>
		<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://sw-engineer.com/?p=56</guid>
		<description><![CDATA[Design reviews do not simply allow me to have my design reviewed, but also give me the opportunity to inspire my team mates with my own ideas, and kickstart brainstorming discussions - thus fostering team creativity<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=56&subd=swengineering&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>By pure coincidence, I recently listened to a 2008 <a href="http://www.podcastdirectory.com/podshows/3338912">interview of Ed Catmull</a>, cofounder of Pixar and President of Pixar and Disney Animation on the topic of “Pixar and Collective Creativity”, by Harvard Business School <a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=152022135">IdeaCast</a>.</p>
<p>The interview centered on mechanisms to foster innovation – for which Pixar is so famous. Ed Catmull’s emphasizes the importance of communication at and across all levels, and he constantly encourages anyone and everyone to share their thoughts, critique, and suggestions.</p>
<p>To this effect, he encourages all the teams at Pixar to have <strong>dailies</strong>: meetings at the end of the day where each of the animators shows to the rest of the team their accomplishments of the day, whether complete or not. This is a vulnerable moment where one has to show work in progress, warts and all, to colleagues (there’s always a bit a competitive spirit at work) and possibly Ed himself, if he happens to drop by. Yet, it is also a great opportunity to not only stimulate suggestions from one’s colleagues on how to improve one’s own work, but also to give ideas, or kick-start a brainstorm about the project in general, and other people’s work.</p>
<p>To me, the concept of dailies translates naturally to <strong>design reviews</strong> in the software development world, as I blogged a few days ago. I don’t necessarily advocate for daily design reviews, but certainly for frequent ones; most importantly early on, before foundational decisions are made, so as to actually benefit from the team’s suggestions.</p>
<p>Ed Catmull highlights another set of benefits of design reviews that are potentially even more powerful to foster <strong>team creativity </strong>(rather than just individual creativity) than simply having my design double-checked: my own work and ideas can inspire my colleagues, and the very process of reviewing my work can also stimulate brainstorming discussions about new concepts and ideas. This is powerful stuff!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swengineering.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swengineering.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swengineering.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swengineering.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swengineering.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swengineering.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swengineering.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swengineering.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swengineering.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swengineering.wordpress.com/56/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=56&subd=swengineering&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://sw-engineer.com/2009/10/10/%e2%80%9cdailies%e2%80%9d-bolster-creativity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86d3ab51ec3b0926836957f8e717bc60?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">swengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>Design Review Checklist</title>
		<link>http://sw-engineer.com/2009/10/02/design-review-checklist/</link>
		<comments>http://sw-engineer.com/2009/10/02/design-review-checklist/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 00:53:10 +0000</pubDate>
		<dc:creator>swengineer</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>
		<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://sw-engineer.com/?p=53</guid>
		<description><![CDATA[Design Review Checklist: useful during the design, as well as during the review session<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=53&subd=swengineering&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<ul>
<li>What problem is being solved
<ul>
<li>What requirements does it tie to?</li>
</ul>
</li>
<li>Describe the design
<ul>
<li>Artifacts that document the design</li>
<li>Specific challenges faced – and how they are addressed</li>
<li>Assumptions</li>
<li>Design pattern(s) used</li>
<li>Approaches considered / rejected. Why?</li>
<li>Evidence that this design works: e.g. prototype; tests</li>
<li>Walk through prototype – if one exists</li>
<li>Known / potential limitations</li>
<li>Confirm that all requirements are met – or identify those missing (if we’re reviewing work in progress)</li>
</ul>
</li>
<li>Any new technology involved?
<ul>
<li>Why?</li>
<li>How well has it been tested?</li>
<li>Other candidates reviewed / rejected. Why?</li>
<li>New hardware / software that needs to be purchased / licensed for Dev or QA</li>
<li>New open-source packages added to product?</li>
</ul>
</li>
<li>Impact on testing / QA
<ul>
<li>Tests that are now obsolete</li>
<li>New test fixtures that need to be built – or migrated from Dev to QA</li>
</ul>
</li>
<li>Impact on product.  For the following identify, anything new and/or anything modified
<ul>
<li>Code version / Build / Unit tests</li>
<li>APIs? Interfaces?</li>
<li>Classes / packages</li>
<li>DB schema</li>
<li>Error handling</li>
<li>Logging</li>
<li>Security</li>
<li>Installation</li>
<li>Provisioning / Configuration</li>
<li>Monitoring / Management console</li>
<li>Online help / tips / messages</li>
<li>Internationalization</li>
<li>Product documentation / manuals</li>
<li>Troubleshooting guides / info for tech support</li>
<li>Marketing documentation</li>
</ul>
</li>
<li>Next steps
<ul>
<li>Can the design be simplified?</li>
<li>Location of all design documentation / code / other artifacts / info on external stuff added to product</li>
</ul>
<ul>
<li>Complete test scenarios</li>
<li>Next steps in implementation</li>
<li>Next steps in testing</li>
<li>When will we be sure it works?</li>
<li>Who can help?</li>
</ul>
</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swengineering.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swengineering.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swengineering.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swengineering.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swengineering.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swengineering.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swengineering.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swengineering.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swengineering.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swengineering.wordpress.com/53/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=53&subd=swengineering&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://sw-engineer.com/2009/10/02/design-review-checklist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86d3ab51ec3b0926836957f8e717bc60?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">swengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>In Favor of Design Reviews</title>
		<link>http://sw-engineer.com/2009/10/02/in-favor-of-design-reviews/</link>
		<comments>http://sw-engineer.com/2009/10/02/in-favor-of-design-reviews/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 00:50:15 +0000</pubDate>
		<dc:creator>swengineer</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>
		<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://sw-engineer.com/?p=49</guid>
		<description><![CDATA[Think holistically; code-and-test incrementally
Design reviews give a chance for your teammates to contribute - and for you to communicate the impact of your proposed implementation<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=49&subd=swengineering&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Because Agile software development methodologies place relatively low emphasis on design, little has been written on design reviews.</p>
<p>I personally strongly believe in upfront design (see previous post), and thus design reviews.</p>
<p>To me the same argument can be made about the importance of design reviews as is made for pair programming – and conversely I have a hard time understanding why one would advocate pair programming and not design reviews: “two heads think better than one”.</p>
<p>Any “bug” that can be found during the design phase, will cost a lot less to fix, than if it is found during the implementation phase.</p>
<p>Furthermore, the advice of my peers is most useful to me in the early stages than when I am 95% done. It’s a lot easier to incorporate their suggestions, or explore alternatives, when no code has been written.</p>
<p>In summary, in my view, the best approach is to spend time upfront figuring out the design, and once I have a good idea of what I want to build, to code it using the Agile methodology. In other words: “<strong>Think holistically; code-and-test  incrementally</strong>”</p>
<p>So when should a design review be held?</p>
<p>As a developer, I want to hold a design review when:</p>
<ul>
<li>I need help</li>
<li>I want to confirm that I am on the right track</li>
<li>I want to double check that I have not missed anything</li>
<li>I want to communicate some assumptions that I have made that impact other components.</li>
</ul>
<p>The design review is important not only to validate the design, but also to communicate: what I plan to do, and how it will impact others: developers, as well as testers, and even tech support, documentation, and product marketing</p>
<p>In the next post, I’ll publish a Checklist. Its purpose is primarily as a tool during the design process itself, to make sure that all aspects of the design have been considered. It is also useful during the design review session as a guide for the discussion. Finally, you can infer from the checklist all the people that need be informed about this design, and ultimately the implementation</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swengineering.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swengineering.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swengineering.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swengineering.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swengineering.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swengineering.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swengineering.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swengineering.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swengineering.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swengineering.wordpress.com/49/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=49&subd=swengineering&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://sw-engineer.com/2009/10/02/in-favor-of-design-reviews/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86d3ab51ec3b0926836957f8e717bc60?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">swengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>In Favor of Architecture Design</title>
		<link>http://sw-engineer.com/2009/09/29/in-favor-of-architecture-design/</link>
		<comments>http://sw-engineer.com/2009/09/29/in-favor-of-architecture-design/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 15:22:45 +0000</pubDate>
		<dc:creator>swengineer</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>
		<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://sw-engineer.com/?p=45</guid>
		<description><![CDATA[An upfront architecture design phase can save a lot of time, and pain, prior to entering an Agile code development phase. Particularly, when complex requirements, high performance or new technology are involved.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=45&subd=swengineering&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Agile software development methodologies seem to dismiss architecture design, in favor of incremental development, and refactoring as needed. In my opinion, investing in upfront design not only accelerates projects, but can avoid unpleasant surprises, and painful delays. Architecture design and agile methodologies easily work hand in hand: the architecture design phases focuses explicitly on eliminating technical risk. Once the technical framework has been validated, implementation follows, applying the traditional agile methodologies</p>
<p>The “Agile” arguments go as follows: identify a new user story / feature, write a test that fails (but that’s required to meet the user story), write the code to pass this test (as well as all preceding ones) – repeat. In the process, keep the code as simple as possible, and since the code is simple and since you have an extensive suite of tests that validate existing functionality, refactoring is easy and fast.  While this methodology is indeed very powerful, it is not universally applicable. In addition, there are intrinsic advantages for upfront design</p>
<p>The main advantage of upfront design is “doing it right the first time”. By spending time upfront analyzing all the requirements, and technical challenges, and by evaluating competing approaches, one can avoid many dead-ends that one encounters when following an incremental approach. In the worst case of incremental design, one may run into a “killer” requirement near the end of the project which causes a complete refactoring of what’s been done before.</p>
<p>Further, even if one ends up with the right implementation in the end, one will simply save time by coming up with the “right design” the first time, and thus avoiding multiple refactoring efforts. While some issues only come up as one codes, spending sufficient time upfront will almost always eliminate unnecessary iterations.</p>
<p>In some cases, however, a phase solely dedicated to architecture design is almost always warranted. For example:</p>
<ul>
<li>To partition a complex project in multiple components that can be handed off to a team of developers</li>
<li>To work through complex – and possibly conflicting – requirements</li>
<li>To ensure critical performance, resource utilization or scalability requirements</li>
<li>To validate the suitability of new technology that will be incorporated into the product: completeness of features, interfaces, or performance and scalability.</li>
<li>To validate with end users the usability of User Interfaces</li>
</ul>
<p>In particular, features that impact different layers of the code (e.g. UI, business logic, database) need upfront design in order to avoid time-wasting back and forth between developers. Letting the whole team work it out is simply not efficient. A recent such project was for us to enable an application for multi-tenancy. Similarly, I have found that any project that involves clustering, fault-tolerance or high performance requires a dedicated and focused design – and validation &#8211; effort. Finally, incorporating any new technology – like an open-source package – must go through a prototyping phase: you never quite get what you expect …</p>
<p>By the way, an architecture design phase, should follow the principles of Agile Software development: keep it simple, use incremental milestones that demonstrate completion of a subset of requirements.</p>
<p>To be effective, the architecture / design phase must limit itself to what is strictly necessary, namely what motivated the design effort in the first place: e.g. functional partitioning or performance validation.  Anything that can be left to implementation must be.</p>
<p>Finally, the design phase must be concluded with a design review! …. More on this later.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swengineering.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swengineering.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swengineering.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swengineering.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swengineering.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swengineering.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swengineering.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swengineering.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swengineering.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swengineering.wordpress.com/45/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sw-engineer.com&blog=7378020&post=45&subd=swengineering&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://sw-engineer.com/2009/09/29/in-favor-of-architecture-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86d3ab51ec3b0926836957f8e717bc60?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">swengineer</media:title>
		</media:content>
	</item>
	</channel>
</rss>