<?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>Shaun MacRae &#187; Software Process</title>
	<atom:link href="http://blog.shaunmacrae.com/category/software-process/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.shaunmacrae.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sun, 05 Feb 2012 03:42:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Geek Empowerment</title>
		<link>http://blog.shaunmacrae.com/2012/02/04/geek-empowerment/</link>
		<comments>http://blog.shaunmacrae.com/2012/02/04/geek-empowerment/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 03:32:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Software Process]]></category>

		<guid isPermaLink="false">http://blog.shaunmacrae.com/?p=559</guid>
		<description><![CDATA[A colleague at work was recently asked to gather requirements from his users before progressing some clever ideas he had about some of our products.  He responded with a Henry Ford quote from many years ago: &#8221;If I had asked people what they wanted, they would have said faster horses&#8221;. I found myself agreeing with him, [...]
No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div>A colleague at work was recently asked to gather requirements from his users before progressing some clever ideas he had about some of our products.  He responded with a Henry Ford quote from many years ago: &#8221;If I had asked people what they wanted, they would have said faster horses&#8221;.</div>
<div></div>
<div>I found myself agreeing with him, and quickly transitioning from a belief I used to have that business end-users should drive the development of business solutions to a belief that only IT professionals, enthusiasts and turbo-nerds should be driving the development of business solutions.</div>
<div></div>
<div>In fact our industry IS changing.</div>
<div></div>
<div>IT professionals are innovating at a faster rate than any of their business counterparts can keep up with.  The recent Facebook IPO is a confirmation to many that geeks are quickly becoming the seed of innovation and are creating the most business value within their organisations.  Facebook took &#8216;User-Driven&#8217; development and turned it on its head with &#8216;Developer-Driven&#8217; development whereby they didn&#8217;t necessarily ignore there users, rather they learned from their users and made their own decisions about what was best for their users.  It&#8217;s not that they didn&#8217;t trust their users, they just trusted themselves more.</div>
<div></div>
<div>Google appears to follow a similar philosophy with its &#8216;strictly-engineering&#8217; culture.</div>
<div></div>
<div>And Apple is world famous for proclaiming that they only focused on building things that THEY would enjoy using.  They innovated and invented products that their users never imagined possible.</div>
<div></div>
<div>So, in changing times, how do we as IT professionals engage with our end-users and business/domain experts?  Of course we must learn from them, and of course we must empower them.  After all our primary goal is to create value for them.  And if we do that they will evangelise our products and help us create value for their friends as well.</div>
<div></div>
<div>Also I think there is a new bread of technology professional required here.  I think IT pros will busily build clever information solutions that domain experts can then implement and configure in various ways to achieve their business solution.  The days where you had to know how to program in order to implement a high-value business solution are over thanks to innovations in technology and advent of enterprise information and development platforms like MS Sharepoint/MS SQL/<wbr>WordPress/SAP/Oracle/&#8230;</wbr></div>
<div></div>
<div>Undoubtedly this creates a great deal of tension between business end-users and geeks, and of course the lines get blurrier and blurrier as we develop layer on top of layer of technology.  Where will you find yourself as an IT pro in this new paradigm?</div>
<div id="st0000000001" class="st-taf"><script src="http://taf.socialtwist.com:80/taf/js/shoppr.core.js?id=0000000001"></script><img style="border:0;margin:0;padding:0;" src="http://tellafriend.socialtwist.com:80/wizard/images/tafbutton_blue16.png" onmouseout="hideHoverMap(this)" onmouseover="showHoverMap(this, '0000000001', 'http%3A%2F%2Fblog.shaunmacrae.com%2F2012%2F02%2F04%2Fgeek-empowerment%2F', 'Geek+Empowerment')" onclick="cw(this, {id:'0000000001',link: 'http%3A%2F%2Fblog.shaunmacrae.com%2F2012%2F02%2F04%2Fgeek-empowerment%2F', title: '+Geek+Empowerment+' })"/></div><p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.shaunmacrae.com/2012/02/04/geek-empowerment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generic Isn&#8217;t Always Better</title>
		<link>http://blog.shaunmacrae.com/2009/08/17/generic-isnt-always-better/</link>
		<comments>http://blog.shaunmacrae.com/2009/08/17/generic-isnt-always-better/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 14:52:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Software Process]]></category>

		<guid isPermaLink="false">http://blog.shaunmacrae.com/?p=500</guid>
		<description><![CDATA[I saw a tweet recently that read &#8216;Use of &#8220;general&#8221; and &#8220;flexible&#8221; are design meeting smells&#8217;. The truth is, words like &#8220;generic&#8221;, &#8220;general&#8221;, and &#8220;flexible&#8221; are pretty loaded words. Like the words &#8220;architect&#8221;, and &#8220;agile&#8221;, these words have different meaning to different people and unfortunately are very often misused. The word generic is also a [...]
No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I saw a tweet recently that read &#8216;Use of &#8220;general&#8221; and &#8220;flexible&#8221; are design meeting smells&#8217;.</p>
<p>The truth is, words like &#8220;generic&#8221;, &#8220;general&#8221;, and &#8220;flexible&#8221; are pretty loaded words.  Like the words &#8220;architect&#8221;, and &#8220;agile&#8221;, these words have different meaning to different people and unfortunately are very often misused.</p>
<p>The word generic is also a very absolute term.  So absolute, that it actually never makes sense to use in terms of software, without a relative operator like &#8216;more&#8217; or &#8216;less&#8217; to describe the scale of flexibility.  To say that a solution is generic is a fallacy because there is no way to assert whether a solution is generic or not.  Generic implies a maximum level of abstraction.  In absolute terms, this is not achievable.  Does the solution cut my grass?  Surely it&#8217;s not generic then.</p>
<p>I think in many cases the words are used flippantly in work cultures that don&#8217;t encourage innovation and evolutionary design.  In cultures where software is largely defined up front and defined to satisfy requirements that are not well known or in some cases not known at all, design meetings will be driven by excessive, risk-adverse, use of this language.  In work-cultures where software is not largely defined up front, or in worse cases not defined up front at all, the same thing can happen for different reasons.  In this case, developers feel like they never have an opportunity to develop great solutions because they are forever putting out fires due to lack of planning.  For them, use of these words is almost like a defense mechanism, and they come out of their mouth before they&#8217;ve even thought about it.  They tend to overcompensate in an effort to manage delivery expectations.</p>
<p>I believe both cases are driven by good intentions.  As developers, we like to abstract.  Doing so, can remove complexity, and in many cases add heaps of value.  In some cases though, it can work against us.  If the solution does cut my grass then it&#8217;s possible that it isn&#8217;t doing what is supposed to do very well.  The problem is when we start to look at abstraction as a silver bullet.  We must remember that like &#8220;architecture&#8221; and &#8220;agile&#8221;, abstraction is a tool.  Not unlike the tools we build, it isn&#8217;t the only one in the toolbox.</p>
<div id="st0000000001" class="st-taf"><script src="http://taf.socialtwist.com:80/taf/js/shoppr.core.js?id=0000000001"></script><img style="border:0;margin:0;padding:0;" src="http://tellafriend.socialtwist.com:80/wizard/images/tafbutton_blue16.png" onmouseout="hideHoverMap(this)" onmouseover="showHoverMap(this, '0000000001', 'http%3A%2F%2Fblog.shaunmacrae.com%2F2009%2F08%2F17%2Fgeneric-isnt-always-better%2F', 'Generic+Isn%26%238217%3Bt+Always+Better')" onclick="cw(this, {id:'0000000001',link: 'http%3A%2F%2Fblog.shaunmacrae.com%2F2009%2F08%2F17%2Fgeneric-isnt-always-better%2F', title: '+Generic+Isn%26%238217%3Bt+Always+Better+' })"/></div><p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.shaunmacrae.com/2009/08/17/generic-isnt-always-better/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agilists and Architects: Allies not Adversaries Presentation</title>
		<link>http://blog.shaunmacrae.com/2009/06/26/agilists-and-architects-allies-not-adversaries-presentation/</link>
		<comments>http://blog.shaunmacrae.com/2009/06/26/agilists-and-architects-allies-not-adversaries-presentation/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 09:49:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Software Process]]></category>

		<guid isPermaLink="false">http://blog.shaunmacrae.com/?p=495</guid>
		<description><![CDATA[Martin Fowler and Rebecca Parsons speak about the challenges of Enterprise Architecture in agile environments: http://www.infoq.com/presentations/agilists-and-architects No related posts. Related posts brought to you by Yet Another Related Posts Plugin.
No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Martin Fowler and Rebecca Parsons speak about the challenges of Enterprise Architecture in agile environments:</p>
<p><a href="http://www.infoq.com/presentations/agilists-and-architects">http://www.infoq.com/presentations/agilists-and-architects</a></p>
<div id="st0000000001" class="st-taf"><script src="http://taf.socialtwist.com:80/taf/js/shoppr.core.js?id=0000000001"></script><img style="border:0;margin:0;padding:0;" src="http://tellafriend.socialtwist.com:80/wizard/images/tafbutton_blue16.png" onmouseout="hideHoverMap(this)" onmouseover="showHoverMap(this, '0000000001', 'http%3A%2F%2Fblog.shaunmacrae.com%2F2009%2F06%2F26%2Fagilists-and-architects-allies-not-adversaries-presentation%2F', 'Agilists+and+Architects%3A+Allies+not+Adversaries+Presentation')" onclick="cw(this, {id:'0000000001',link: 'http%3A%2F%2Fblog.shaunmacrae.com%2F2009%2F06%2F26%2Fagilists-and-architects-allies-not-adversaries-presentation%2F', title: '+Agilists+and+Architects%3A+Allies+not+Adversaries+Presentation+' })"/></div><p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.shaunmacrae.com/2009/06/26/agilists-and-architects-allies-not-adversaries-presentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Throw-it-Over-the-Wall-Mentality</title>
		<link>http://blog.shaunmacrae.com/2009/06/03/throw-it-over-the-wall-mentality/</link>
		<comments>http://blog.shaunmacrae.com/2009/06/03/throw-it-over-the-wall-mentality/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 15:18:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Software Process]]></category>

		<guid isPermaLink="false">http://blog.shaunmacrae.com/?p=448</guid>
		<description><![CDATA[I&#8217;ve struggled with this throughout my career, but it&#8217;s never made sense to me until recently. A colleague said something about operating in isolated environments so that one skill-set does not influence another skill-set. He was referring specifically to analysts not having access to development resources so that the requirements gathered from the client are [...]
No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve struggled with this throughout my career, but it&#8217;s never made sense to me until recently.</p>
<p>A colleague said something about operating in isolated environments so that one skill-set does not influence another skill-set.  He was referring specifically to analysts not having access to development resources so that the requirements gathered from the client are true and pure and not tainted by technology.  It may explain why I&#8217;ve come across so much resistance in past experiences to open and collaborative environments, although I&#8217;m sure there were also those who were just reluctant to the general concept of transparency (for other obvious reasons).</p>
<p>While this particular point was interesting, and I must agree that it is always a challenge gathering requirements without proposing solutions, I still think there is too much to be lost by adopting a throw-it-over-the-wall-mentality.</p>
<p>I&#8217;ve spoke before about the importance of <a href="http://blog.shaunmacrae.com/2008/08/09/no-magic-transparency-is-key/">transparency</a> and I don&#8217;t think working in silos is conducive to successfully delivering quality software.  First of all we end up with specialists instead of generalists.  Specialists are great for some tasks (typically for review and training (especially in niche areas like UX)), but generalists are what we need in software development teams.  Analysts need to understand and appreciate the complexities of the software they are using as do the business/consultants/clients.  The scale will vary from one end of the spectrum to the other, but the closer we can always keep everyone together, the much better the outcome.  Developers must also be close to the business to appreciate and understand their pains.  The only way that all of this can take place is if we stop throwing things over the wall and start <strong>talking</strong>, start <strong>working collaboratively</strong>, start <strong>sharing ideas and visions</strong>.</p>
<p>One of the first things you will notice if you are in a throw-it-over-the-wall type of environment is an emphasis on contracts or agreements.  When the team A lead is telling the team B lead that the most important part of the design is the interface between team A&#8217;s component and team B&#8217;s component you are in trouble.  The fact that team A wants to know nothing about the design of team B&#8217;s component is a sign of silos forming.</p>
<p>More subtly, the contract or agreement will be between a development team and another team.  The outputs of one team serve as inputs for the other team.  It makes sense that developed source code goes through a quality assurance cycle performed by another team for example.  But, when the tester starts to require that the software be packaged in such a way that they would never need to ask a developer a question, things have gotten out of hand.  Ideally, the tester would be working along side the developer, developing the test cases at the same time or before the developer.</p>
<p>The other problem with throwing things over the wall is that <strong>it just takes too long</strong>.  People start to hold on to things because they are scared to throw it over and have it thrown back (especially if it&#8217;s not thrown back soon enough to do anything about it).  This is a bad spot to be in, and will take some time to fix.  People in these environments are generally very defensive and self-serving.  People need to get used of working together as a team with collective ownership of all software artifacts.</p>
<p>It does seem like pretty basic stuff, but the truth is it requires a lot of discipline to support this type of transparency and teamwork.  We all have tendencies to just do the work ourselves and not collaborate because we think it will be easier, but there are a wealth of tools / ideas for making collaboration easier and, in some cases, making it something we can&#8217;t hide from.  Things like open work spaces, on-site development, scrum walls, etc are all good examples.</p>
<div id="st0000000001" class="st-taf"><script src="http://taf.socialtwist.com:80/taf/js/shoppr.core.js?id=0000000001"></script><img style="border:0;margin:0;padding:0;" src="http://tellafriend.socialtwist.com:80/wizard/images/tafbutton_blue16.png" onmouseout="hideHoverMap(this)" onmouseover="showHoverMap(this, '0000000001', 'http%3A%2F%2Fblog.shaunmacrae.com%2F2009%2F06%2F03%2Fthrow-it-over-the-wall-mentality%2F', 'Throw-it-Over-the-Wall-Mentality')" onclick="cw(this, {id:'0000000001',link: 'http%3A%2F%2Fblog.shaunmacrae.com%2F2009%2F06%2F03%2Fthrow-it-over-the-wall-mentality%2F', title: '+Throw-it-Over-the-Wall-Mentality+' })"/></div><p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.shaunmacrae.com/2009/06/03/throw-it-over-the-wall-mentality/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Justifying Repayment of Technical Debt to Management</title>
		<link>http://blog.shaunmacrae.com/2009/03/24/justifying-repayment-of-technical-debt-to-management/</link>
		<comments>http://blog.shaunmacrae.com/2009/03/24/justifying-repayment-of-technical-debt-to-management/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 14:42:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Software Process]]></category>

		<guid isPermaLink="false">http://www.blog.shaunmacrae.com/?p=345</guid>
		<description><![CDATA[I&#8217;ve read 2 articles recently about technical debt: one by Martin Fowler, and one by Max Pool on Codesqueeze. I particularly agree with Max&#8217;s idea that if you &#8216;Make your case, and show the business value, the majority of the time you will get that signature for the refactor&#8217;. I always hear developers blaming management [...]
No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve read 2 articles recently about technical debt: one by <a href="http://martinfowler.com/bliki/TechnicalDebt.html">Martin Fowler</a>, and one by <a href="http://www.codesqueeze.com/refinance-your-technical-debt-just-like-your-mortgage/">Max Pool on Codesqueeze</a>.</p>
<p>I particularly agree with Max&#8217;s idea that if you &#8216;Make your case, and show the business value, the majority of the time you will get that signature for the refactor&#8217;.</p>
<p>I always hear developers blaming management for a lack of time to refactor, but in my experience management is not the problem.  Half the time management doesn&#8217;t even know they&#8217;re in the red.  Also, they are generally thrilled to hear about how refactoring can better facilitate rapid delivery and how it&#8217;s actually a time-saver rather than a time-expenditure, if folded into the every-day development process.</p>
<p>In the past, I have taken the effort to consider how badly an issue is affecting development productivity, considered the effort required to fix the problem, and where relevant brought the argument forward not only to project managers, but in some cases directly to business facing consultants or clients themselves.  As software professionals is it our job to make recommendations and consider trade-offs, etc.  How can we say we have integrity otherwise?  If we can justify the refactor, it is our job to pitch it accordingly.</p>
<p>This type of thinking needs to become ingrained in our day-to-day work.  Seeking improvement in our software, process, and skill sets are an absolute must if we want to continue adding value in our field.  Blaming management alone for technical debt is not acceptable.</p>
<div id="st0000000001" class="st-taf"><script src="http://taf.socialtwist.com:80/taf/js/shoppr.core.js?id=0000000001"></script><img style="border:0;margin:0;padding:0;" src="http://tellafriend.socialtwist.com:80/wizard/images/tafbutton_blue16.png" onmouseout="hideHoverMap(this)" onmouseover="showHoverMap(this, '0000000001', 'http%3A%2F%2Fblog.shaunmacrae.com%2F2009%2F03%2F24%2Fjustifying-repayment-of-technical-debt-to-management%2F', 'Justifying+Repayment+of+Technical+Debt+to+Management')" onclick="cw(this, {id:'0000000001',link: 'http%3A%2F%2Fblog.shaunmacrae.com%2F2009%2F03%2F24%2Fjustifying-repayment-of-technical-debt-to-management%2F', title: '+Justifying+Repayment+of+Technical+Debt+to+Management+' })"/></div><p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.shaunmacrae.com/2009/03/24/justifying-repayment-of-technical-debt-to-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Top Down Design VS Bottom Up Design</title>
		<link>http://blog.shaunmacrae.com/2009/03/04/top-down-design-vs-bottom-up-design/</link>
		<comments>http://blog.shaunmacrae.com/2009/03/04/top-down-design-vs-bottom-up-design/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 13:34:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Software Process]]></category>

		<guid isPermaLink="false">http://www.blog.shaunmacrae.com/?p=239</guid>
		<description><![CDATA[I&#8217;ve heard a few arguments recently siding on either top-down or bottom-up design. I&#8217;ve heard some agreement on a need for both. My opinion resides in the second category. Both are required for different reasons, but both are required in almost every context. Top-down design is very valuable because it allows us to look at [...]
No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve heard a few arguments recently siding on either top-down or bottom-up design.  I&#8217;ve heard some agreement on a need for both.  My opinion resides in the second category.</p>
<p>Both are required for different reasons, but both are required in almost every context.</p>
<p>Top-down design is very valuable because it allows us to look at systems with a birds-eye view.  This birds-eye view is important for evaluating whether a solution or part of a solution is fit-for-purpose.  Solutions that are fit-for-purpose satisfy all of the known requirements for the system, but may also satisfy unknown and predicted requirements.  The amount of top-down design subscribed to can be a slippery slope.  Predicting requirements before they are known can allow us to build flexibility in early, reducing development efforts later, but building systems for requirements that may never exist does not maximize value.</p>
<p>Bottom-up design is very valuable because it emphasizes modular, re-usable components.  Stacking modules on top of modules in layers or piecing modules together in an <a href="http://en.wikipedia.org/wiki/Service-oriented_architecture">SOA</a> fashion provides more flexibility because it reduces the need or desire to &#8216;re-invent the wheel&#8217;.  Most importantly though, bottom up design forces us to think about the details, and we all know &#8216;the devil is in the details&#8217;.  Too much bottom-up design though, can also result in wasted efforts.  If modules at the bottom are being designed that aren&#8217;t fit-for-purpose, they will either remain unused (maintenance nightmare) or will need to be removed or altered.</p>
<p>It is together in unison, that these two approaches provide us with with the spectrum of analysis required to a) ensure a design is fit-for-purpose, and b) reduce risk and maximize re-use by considering the details of low-level modules.</p>
<p>Practicing these two types of approaches in unison requires a very iterative approach, not just in the <a href="http://en.wikipedia.org/wiki/Software_development_life_cycle">software development life cycle (SDLC)</a> as a whole, but even within a particular design phase (which may only be one task in a development iteration).</p>
<p>I usually start with top-down design, considering the requirements and coming up with high-level object models.  Not taking this to far, and realizing my ROI, I quickly drill down to the details.  This requires a great deal of prototyping and proof-of-concept work, generally resulting in throw-away software, but always resulting in a much better understanding of the problem.  At this point, I will step back and review my high-level design.  Undoubtedly, I will find it&#8217;s not sufficient because initially it is impossible not to gloss over important details that WILL impact the design.  Having a better understanding of those details from the proof-of-concept work, I can then begin to polish my high-level design.  Typically though, I need to revisit the details in order to validate the high-level design.  Once this back and forth process is no longer adding enough value, the work moves through to development.  Meanwhile, these mini-design iterations are happening as part of each iteration in the SDLC, so the design changes based on findings during development, and so on and so forth.</p>
<p>Design must be evolutionary, otherwise it can&#8217;t improve, and software that doesn&#8217;t improve over time will not add value.  There are very few contexts that justify the need to design systems in a strictly top-down, up-front (waterfall) approach, and many of the traditional style development groups are incorporating bottom-up thinking and iterative approaches to their designs now as well.</p>
<div id="st0000000001" class="st-taf"><script src="http://taf.socialtwist.com:80/taf/js/shoppr.core.js?id=0000000001"></script><img style="border:0;margin:0;padding:0;" src="http://tellafriend.socialtwist.com:80/wizard/images/tafbutton_blue16.png" onmouseout="hideHoverMap(this)" onmouseover="showHoverMap(this, '0000000001', 'http%3A%2F%2Fblog.shaunmacrae.com%2F2009%2F03%2F04%2Ftop-down-design-vs-bottom-up-design%2F', 'Top+Down+Design+VS+Bottom+Up+Design')" onclick="cw(this, {id:'0000000001',link: 'http%3A%2F%2Fblog.shaunmacrae.com%2F2009%2F03%2F04%2Ftop-down-design-vs-bottom-up-design%2F', title: '+Top+Down+Design+VS+Bottom+Up+Design+' })"/></div><p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.shaunmacrae.com/2009/03/04/top-down-design-vs-bottom-up-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile &amp; Best Practice Software Development Resources</title>
		<link>http://blog.shaunmacrae.com/2008/09/17/agile-best-practice-software-development-resources/</link>
		<comments>http://blog.shaunmacrae.com/2008/09/17/agile-best-practice-software-development-resources/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 19:31:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Software Process]]></category>

		<guid isPermaLink="false">http://www.blog.shaunmacrae.com/?p=107</guid>
		<description><![CDATA[I was about to come up with a list of books and blogs for a colleague that capture Agile &#038; Best Practice Software Development, and I found these: Top 100 Best Software Engineering Books, Ever Top 100 Blogs for Development Managers (Q3 2008) They very closely align with my interests and I believe the lists [...]
No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I was about to come up with a list of books and blogs for a colleague that capture Agile &#038; Best Practice Software Development, and I found these:</p>
<p><a href="http://www.noop.nl/2008/06/top-100-best-software-engineering-books-ever.html">Top 100 Best Software Engineering Books, Ever</a></p>
<p><a href="http://www.noop.nl/2008/09/top-100-blogs-for-development-managers-q3-2008.html">Top 100 Blogs for Development Managers (Q3 2008)</a></p>
<p>They very closely align with my interests and I believe the lists to be quite credible.  The authors are, in my opinion, the brightest thinkers in the software industry at the moment.</p>
<div id="st0000000001" class="st-taf"><script src="http://taf.socialtwist.com:80/taf/js/shoppr.core.js?id=0000000001"></script><img style="border:0;margin:0;padding:0;" src="http://tellafriend.socialtwist.com:80/wizard/images/tafbutton_blue16.png" onmouseout="hideHoverMap(this)" onmouseover="showHoverMap(this, '0000000001', 'http%3A%2F%2Fblog.shaunmacrae.com%2F2008%2F09%2F17%2Fagile-best-practice-software-development-resources%2F', 'Agile+%26%23038%3B+Best+Practice+Software+Development+Resources')" onclick="cw(this, {id:'0000000001',link: 'http%3A%2F%2Fblog.shaunmacrae.com%2F2008%2F09%2F17%2Fagile-best-practice-software-development-resources%2F', title: '+Agile+%26%23038%3B+Best+Practice+Software+Development+Resources+' })"/></div><p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.shaunmacrae.com/2008/09/17/agile-best-practice-software-development-resources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Let the Business Drive Sometimes Too</title>
		<link>http://blog.shaunmacrae.com/2008/08/24/let-the-business-drive-sometimes-too/</link>
		<comments>http://blog.shaunmacrae.com/2008/08/24/let-the-business-drive-sometimes-too/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 06:33:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Software Process]]></category>

		<guid isPermaLink="false">http://www.blog.shaunmacrae.com/?p=105</guid>
		<description><![CDATA[I wrote recently about transparency being key in software development. I think that another way to move in this general direction is to concentrate on letting the business drive your process sometimes too. Our customers don&#8217;t need to know much about software development in order to help us develop software that adds a ton of [...]
No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I wrote <a href="http://www.blog.shaunmacrae.com/2008/08/09/no-magic-transparency-is-key/">recently</a> about transparency being key in software development.  I think that another way to move in this general direction is to concentrate on letting the business drive your process sometimes too.</p>
<p>Our customers don&#8217;t need to know much about software development in order to help us develop software that adds a ton of value.  A close relationship with them allows us to &#8216;feel their pains&#8217; and let their knowledge drive the delivery process.  It also puts some of the owness back on them.  Our customers need to &#8216;feel our pains&#8217; as well.  You would be surprised at how helpful they can be when they become more intimately involved with the actual software.</p>
<p>Of course our customers will not have all of the information they need to make great project decisions on their own.  As consultants, it is our job to present the relevant information, and make recommendations.  As well, we mustn&#8217;t be afraid to challenge decisions made by our customers.  Always consider, &#8220;If that is the answer, what is the question&#8221;.  Only when communication channels are opened up like this do we start to collectively make really good decisions that ADD VALUE.  Our customers must be made aware of these benefits, and only then will they start to view us as trusted advisers, strengthening the cycle further.</p>
<p>In the end, this back and forth collaboration leads to a shared vision, and a more well-rounded team commitment that makes project success much more obtainable.</p>
<div id="st0000000001" class="st-taf"><script src="http://taf.socialtwist.com:80/taf/js/shoppr.core.js?id=0000000001"></script><img style="border:0;margin:0;padding:0;" src="http://tellafriend.socialtwist.com:80/wizard/images/tafbutton_blue16.png" onmouseout="hideHoverMap(this)" onmouseover="showHoverMap(this, '0000000001', 'http%3A%2F%2Fblog.shaunmacrae.com%2F2008%2F08%2F24%2Flet-the-business-drive-sometimes-too%2F', 'Let+the+Business+Drive+Sometimes+Too')" onclick="cw(this, {id:'0000000001',link: 'http%3A%2F%2Fblog.shaunmacrae.com%2F2008%2F08%2F24%2Flet-the-business-drive-sometimes-too%2F', title: '+Let+the+Business+Drive+Sometimes+Too+' })"/></div><p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.shaunmacrae.com/2008/08/24/let-the-business-drive-sometimes-too/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Embrace the Skills</title>
		<link>http://blog.shaunmacrae.com/2008/08/10/embrace-the-skills/</link>
		<comments>http://blog.shaunmacrae.com/2008/08/10/embrace-the-skills/#comments</comments>
		<pubDate>Sun, 10 Aug 2008 07:03:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Software Process]]></category>

		<guid isPermaLink="false">http://www.blog.shaunmacrae.com/?p=101</guid>
		<description><![CDATA[I tend to spend my time as a software developer taking in anything I can get my hands on &#8211; The old ‘jack of all trades, master of none’ adage. While I appreciate opportunities that exercise various skills (and develop new ones when possible), I find it very difficult to multi-task as a developer. Developers [...]
No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I tend to spend my time as a software developer taking in anything I can get my hands on &#8211; The old ‘jack of all trades, master of none’ adage. While I appreciate opportunities that exercise various skills (and develop new ones when possible), I find it very difficult to multi-task as a developer. Developers at the very least, need time blocks in order to manage the complexities of developing software systems. It is too expensive and inefficient to have developers context switching all of the time. Some will handle it better then others, but none will handle it optimally.</p>
<p>That said, there are many professionals in our industry that are more than happy to not be developing. They may have a passion for Support or for Testing, or for coordinating Builds and Releases, or for Business Analysis. Yet, they will be tasked with development efforts just like every one else on the team. So while all of the developers on the team are juggling all areas of software development, there are actually specialists on the team that would be thrilled to focus their energy on one task consistently.</p>
<p>I’m not saying the roles should be so well defined as to disallow any overlap because there will be those who like to move around (like myself). I’m just saying that it is important to recognize specific skills and desires on the team, and embrace them in a way that increases project velocity whenever possible.</p>
<div id="st0000000001" class="st-taf"><script src="http://taf.socialtwist.com:80/taf/js/shoppr.core.js?id=0000000001"></script><img style="border:0;margin:0;padding:0;" src="http://tellafriend.socialtwist.com:80/wizard/images/tafbutton_blue16.png" onmouseout="hideHoverMap(this)" onmouseover="showHoverMap(this, '0000000001', 'http%3A%2F%2Fblog.shaunmacrae.com%2F2008%2F08%2F10%2Fembrace-the-skills%2F', 'Embrace+the+Skills')" onclick="cw(this, {id:'0000000001',link: 'http%3A%2F%2Fblog.shaunmacrae.com%2F2008%2F08%2F10%2Fembrace-the-skills%2F', title: '+Embrace+the+Skills+' })"/></div><p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.shaunmacrae.com/2008/08/10/embrace-the-skills/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>No Magic!!! &#8211; Transparency is Key</title>
		<link>http://blog.shaunmacrae.com/2008/08/09/no-magic-transparency-is-key/</link>
		<comments>http://blog.shaunmacrae.com/2008/08/09/no-magic-transparency-is-key/#comments</comments>
		<pubDate>Sun, 10 Aug 2008 06:28:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Software Process]]></category>

		<guid isPermaLink="false">http://www.blog.shaunmacrae.com/?p=99</guid>
		<description><![CDATA[Most people who have worked with me have heard me preach about the importance of transparency. There is an old-school tendency in IT to view software as some sort of &#8216;magic&#8217;. Those paying for the software prefer to look at it this way, because it means that they are not expected to understand it. Those [...]
No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Most people who have worked with me have heard me preach about the importance of transparency.  There is an old-school tendency in IT to view software as some sort of &#8216;magic&#8217;.  Those paying for the software prefer to look at it this way, because it means that they are not expected to understand it.  Those developing the software don&#8217;t seem to mind because it means nobody is questioning what they do.</p>
<p>Unfortunately, this creates a big gap between the end-user&#8217;s understanding of their software and the actual implementation of their software.  It&#8217;s like the old trick where you whisper something into another person’s ear and then have that process repeated amongst 10 other people.  When the last person is asked to repeat what they&#8217;ve heard, it is always different than what was put forth in the beginning.  This is what happens when customers ask us for something and we try and build it on our own, without any checkpoints.  The software becomes less aligned with what was requested, but further more, the end-user is distanced from its implementation.</p>
<p>Agile thinkers approach this in a much more effective and efficient way.  They bring end-users as close to the implementation as possible so that the gap between their business and the technology driving their business is reduced significantly.  They make transparency the focus in every process.  I mentioned in <a href="http://www.blog.shaunmacrae.com/2007/09/06/agile-2007-conference/">my post about the Agile 2007 conference</a> that there are a number of ways to facilitate transparency (I called them visibility facilitators) on any project, including open work-spaces, project collaboration / management / dashboard tools, and regular feedback. Conducting retrospectives and collecting metrics and velocities are also valuable tools for facilitating transparency.  The obvious facilitator, not mentioned in that list, is on-site development with dedicated end-users staffed specifically for the project.</p>
<p>It&#8217;s not enough to have transparency in the process though.  We need to take it one step further and develop transparent software.  This has always been a battle for me, because I am so passionate about software usability, and I understand that rich UIs need to be able to hide system complexities in order to enhance the end-user experience.  What I don&#8217;t like about that type of thinking is that it often results in systems with unnecessary complexities.  While every problem has inherent complexities, we have to do our best as software developers to avoid introducing additional, unnecessary complexities.  Often, these unnecessary complexities are masked by very non-transparent UIs.  I live by the words &#8216;No Magic&#8217;, because I believe that a good UI should be communicating with the end-user, the same way that it will be communicating with the system.  For example, if I click a button that says &#8216;Calculate Reconciliation&#8217;, I would expect that the interface is going to tell the system to &#8216;Calculate Reconciliation&#8217;, NOT &#8216;Calculate Reconciliation AND Send Various Emails AND Update Invoices, AND &#8230;&#8217;.  While the extra steps taken may be useful, I didn&#8217;t really ask for it, so I start to feel like there is a bunch of magic going on behind the scenes that I don’t know about.  I hate magic!  My thoughts are that interface developers should start with the most transparent interface possible.  Try to align the language on the screen as much as possible with the language used in the system (and visa versa).  Try to expose function points or system intentions with obvious controls.  Only when everything is fully functional should you start making UI tweaks that depart from back-end design.  Lastly, I think it is important to push changes in understanding vertically through every layer of the system as often as possible.  If this week this business are calling the Calculate Reconciliation function Reconcile Books, make that transparent and push that language through every layer of the system.  Likewise, if a data relationship changes from 1-1 to 1-many in the back-end, make that transparent and push that relationship through every layer of the system so that if possible, it is obvious even in the interface.</p>
<div id="st0000000001" class="st-taf"><script src="http://taf.socialtwist.com:80/taf/js/shoppr.core.js?id=0000000001"></script><img style="border:0;margin:0;padding:0;" src="http://tellafriend.socialtwist.com:80/wizard/images/tafbutton_blue16.png" onmouseout="hideHoverMap(this)" onmouseover="showHoverMap(this, '0000000001', 'http%3A%2F%2Fblog.shaunmacrae.com%2F2008%2F08%2F09%2Fno-magic-transparency-is-key%2F', 'No+Magic%21%21%21+%26%238211%3B+Transparency+is+Key')" onclick="cw(this, {id:'0000000001',link: 'http%3A%2F%2Fblog.shaunmacrae.com%2F2008%2F08%2F09%2Fno-magic-transparency-is-key%2F', title: '+No+Magic%21%21%21+%26%238211%3B+Transparency+is+Key+' })"/></div><p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.shaunmacrae.com/2008/08/09/no-magic-transparency-is-key/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

