<?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>Pragmatic Dictator</title>
	<atom:link href="http://www.dancres.org/blitzblog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dancres.org/blitzblog</link>
	<description></description>
	<lastBuildDate>Wed, 16 May 2012 19:52:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Creation</title>
		<link>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2012%2F05%2F16%2Fcreation%2F&#038;seed_title=Creation</link>
		<comments>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2012%2F05%2F16%2Fcreation%2F&#038;seed_title=Creation#comments</comments>
		<pubDate>Wed, 16 May 2012 18:40:51 +0000</pubDate>
		<dc:creator>Dan Creswell</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[design]]></category>

		<guid isPermaLink="false">http://www.dancres.org/blitzblog/?p=412</guid>
		<description><![CDATA[Design is all about constructing an abstract processing machine. Something that exists only in a world created by the mind. This machine will have some collection of functional, operational and performance characteristics. The machine consists of parts, discrete elements that perform particular roles required to support the functional, operational and performance characteristics. A design should [...]]]></description>
			<content:encoded><![CDATA[<p>Design is all about constructing an abstract processing machine. Something that exists only in a world created by the mind. This machine will have some collection of functional, operational and performance characteristics.</p>
<p>The machine consists of parts, discrete elements that perform particular roles required to support the functional, operational and performance characteristics.</p>
<p>A design should be pure. It may or may not be easily understood depending upon the body of knowledge used in its construction. For example, a design intended to be distributed will contain many subtleties and patterns that most are not familiar with.</p>
<p>The challenge, of course, is to make this abstract machine a reality, create a physical realisation of our abstract processing machine.</p>
<p>During this process of creation it is important we continue to honour the structures in the design. For, if we do not, we create a gap between design and physical reality such that it can be difficult to relate one to the other. Over time these gaps will multiply and widen, such that the physical realisation of the abstract machine no longer looks anything like the original design.</p>
<p>When gaps develop, there will be problems of traceability as one can no longer relate what is being done in the physical realisation to the design. Knowledge retention becomes problematic as the design can no longer be annotated and maintained for reference. The code and build system are now the only truth, containing structures that have been eroded and become grey, ill-defined. A &#8220;big ball of mud&#8221; develops that no one adequately understands. Knowledge is held in the heads of various people and scattered in code comments and notes on bits of paper.</p>
<p>It becomes harder and harder to reason about the behaviour of the physical realisation impeding speed of evolution. This manifests as reduced development speed or slow resolution of operational issues in production amongst other things.</p>
<p>There are a collection of things we can do to inhibit the onset of this death spiral including:</p>
<ul>
<li>Develop and retain a naming convention that fits with the nouns and verbs used in the design.</li>
<li>Ensure that deployment onto physical machinery is an intuitive mapping that fits the inter-relatedness of components in the design. This compels the design to express constraints in respect of locality and methods of communication. It must also define failure modes and recovery protocols. This may require creation of further layers of abstraction atop physical machinery e.g. lookup mechanisms and remote access constructs.</li>
<li>Considered selection of supporting infrastructure that works with the design rather than forcing compromises such as false separations of data or code, fractures in naming conventions, tight coupling where the design requires the opposite or introduction of behaviours that interfere with desired performance characteristics.</li>
<li>Look for situations where the physical realisation is complicated by the design. When this happens, some re-design is natural but care must be taken to ensure that this is not occurring because of inappropriate technology choice.</li>
</ul>
<p>Of course, nothing is perfect and some compromises must be made to bring these abstract machines into reality. Nevertheless too many compromises bring on the death-spiral so it is important to carefully consider those made and limit the number that exist at any moment in the lifetime of the physical realisation.</p>
]]></content:encoded>
			<wfw:commentRss>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2012%2F05%2F16%2Fcreation%2F&#038;seed_title=Creation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ive</title>
		<link>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F12%2F31%2Five%2F&#038;seed_title=Ive</link>
		<comments>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F12%2F31%2Five%2F&#038;seed_title=Ive#comments</comments>
		<pubDate>Sat, 31 Dec 2011 10:37:22 +0000</pubDate>
		<dc:creator>Dan Creswell</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.dancres.org/blitzblog/?p=399</guid>
		<description><![CDATA[Jonathan Ive (Apple&#8217;s Design High Priest) has been knighted. Those that succeed in influencing technology as much as Mr Ive are well worth paying attention to. A quick google, shows that he&#8217;s not that public of a personality, seemingly preferring to let his products do the talking, works for me! Nevertheless there are some interviews [...]]]></description>
			<content:encoded><![CDATA[<p>Jonathan Ive (Apple&#8217;s Design High Priest) has been <a href="http://www.telegraph.co.uk/technology/apple/8985289/Apple-designer-becomes-Sir-Jonathan-Ive-in-New-Year-Honours.html">knighted</a>. Those that succeed in influencing technology as much as Mr Ive are well worth paying attention to.</p>
<p>A quick google, shows that he&#8217;s not that public of a personality, seemingly preferring to let his products do the talking, works for me! Nevertheless there are some interviews out there, including this <a href="http://designmuseum.org/design/jonathan-ive">one</a> which features a quote that I feel fits well (and is far more succinct) with my previous <a href="http://www.dancres.org/blitzblog/2011/12/30/renegade/">post</a>:</p>
<p><em>Q. What are the advantages of designing for one company? And the disadvantages? What are the particular characteristics of the set-up at Apple that has made the experience of working there rewarding for you?</em></p>
<p><em> </em></p>
<p><em>A. It is pretty humbling when so much of your effectiveness is defined by context. Not only is it critical that the leadership of a company clearly understands its products and the role of design, but that the development, marketing and sales teams are also equally committed to the same goals. More than ever I am aware that what we have achieved with design is massively reliant on the commitment of lots of different teams to solve the same problems and on their sharing the same goals. I like being part of something that is bigger than design. There is a loyalty that I have for Apple and a belief that this company has an impact beyond design which feels important. I also have a sense of being accountable as we really live, sometimes pretty painfully with the consequences of what we do.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F12%2F31%2Five%2F&#038;seed_title=Ive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Renegade</title>
		<link>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F12%2F30%2Frenegade%2F&#038;seed_title=Renegade</link>
		<comments>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F12%2F30%2Frenegade%2F&#038;seed_title=Renegade#comments</comments>
		<pubDate>Fri, 30 Dec 2011 16:27:10 +0000</pubDate>
		<dc:creator>Dan Creswell</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.dancres.org/blitzblog/?p=397</guid>
		<description><![CDATA[I&#8217;m a CTO, the traitorous techie that turned to the dark side of management or the unrealistic techie that won&#8217;t face up to management reality, depending on your point of view. Who am I really? I&#8217;m the man with experience on both sides of the fence. I&#8217;m the one who sees that the grass is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a CTO, the traitorous techie that turned to the dark side of management or the unrealistic techie that won&#8217;t face up to management reality, depending on your point of view. Who am I really? I&#8217;m the man with experience on both sides of the fence. I&#8217;m the one who sees that the grass is decidedly scorched regardless of which side of that fence you sit.</p>
<ol>
<li>Many geeks are obsessed with using all the latest technologies and building ultra-clever software that isn&#8217;t practical to run assuming it ever gets delivered.</li>
<li>Many managers fail to prioritise. An organisation can only ever be focused on one thing effectively at any moment. That&#8217;s because there are always bottlenecks, cash, mindset, staff, office space, the list goes on. Best identify the single most important thing you can do and go for it with all you have. Back a single horse, not the entire field.</li>
<li>Many geeks are all about the process. They&#8217;re agile, they&#8217;re kanban, they&#8217;re lean, they&#8217;re waterfall, they&#8217;re hypothesis testing. All of them miss the fundamental, which is not the process but the mindset that underpins it. Following the process blindly makes one a valueless robot, a cog in the machine, rather than an active participant shaping destiny.</li>
<li>Many managers fail to understand that dates are aspirational. One must actively work towards a date by managing scope, risk and resource, even then, there are no guarantees. What&#8217;s the value of a date anyway? Nothing. What matters is what you have to offer and whether it&#8217;s enough.</li>
<li>Many geeks fail to understand that design is a creative, subjective discipline. Design patterns aren&#8217;t the answer nor is the do it all framework. It&#8217;s knowing what to apply and when which comes from broad experience (which means you need to know more than one language, platform and operating system and will need to have worked in a number of industry verticals).</li>
<li>Many managers are obsessed with cost reduction. Fact is that to do something to a particular standard in some reasonable amount of time is going to cost a certain minimum. That minimum is largely unknowable in advance so better to decide how much you are prepared to pay and work to that number. As soon as an overshoot looks probable it&#8217;s time to step back and re-think (maybe even can) the plan.</li>
<li>Many geeks are performance junkies, optimising every part of their system based on a set of metrics that have nothing to do with the real-world. In the worst cases, there are no metrics, no one has done any measurement and the statement that something is &#8220;too slow&#8221; is pure speculation.</li>
<li>Many managers treat those that work for them as interchangeable components with no feelings, no individual strengths or weaknesses, no motivations or concerns. They then wonder why staff retention is appalling, performance is horrid and they can&#8217;t ever seem to recruit the right people.</li>
</ol>
<p>What&#8217;s missing is a collective focus on producing something worth a damn. Producing such a thing requires caring and provides challenge, profit, happiness, satisfaction and a whole lot more. So the first question to ask whether you&#8217;re a geek or a manager is, what are <em>we</em> trying to do? Natural follow-ups would be why and do we care?</p>
<p>Whilst you&#8217;re pondering that, hopefully you&#8217;ll realise that there shouldn&#8217;t be a fence or sides…</p>
]]></content:encoded>
			<wfw:commentRss>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F12%2F30%2Frenegade%2F&#038;seed_title=Renegade/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Training</title>
		<link>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F11%2F27%2Ftraining%2F&#038;seed_title=Training</link>
		<comments>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F11%2F27%2Ftraining%2F&#038;seed_title=Training#comments</comments>
		<pubDate>Sun, 27 Nov 2011 13:14:31 +0000</pubDate>
		<dc:creator>Dan Creswell</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[Philosophy]]></category>
		<category><![CDATA[training]]></category>

		<guid isPermaLink="false">http://www.dancres.org/blitzblog/?p=395</guid>
		<description><![CDATA[One simple management fact: Staff move on. There are many reasons this happens, not least of which is the lack of additional opportunity to progress and learn. Given this state of affairs, we need to develop means for handling the fact that staff move on. Typically that focuses everyone on recruitment of suitable replacements that: [...]]]></description>
			<content:encoded><![CDATA[<p>One simple management fact: Staff move on. There are many reasons this happens, not least of which is the lack of additional opportunity to progress and learn.</p>
<p>Given this state of affairs, we need to develop means for handling the fact that staff move on. Typically that focuses everyone on recruitment of suitable replacements that:</p>
<ul>
<li>Already possess the appropriate technical skills</li>
<li>Already have the relevant experience</li>
<li>Already have the relevant mindset</li>
</ul>
<p>The key word there is <i>already</i>. It presents us with a number of problems:</p>
<ol>
<li>An equivalently skilled individual will almost certainly move on themselves, because they&#8217;ll soon figure out there&#8217;s no more opportunity.</li>
<li>There are only so many suitably skilled people available.</li>
<li>Unless we have a bottomless pit of money, we can only access some fraction of the overall pool of available people.</li>
<li>Someone who has the mindset may not yet have developed the skills.</li>
</ol>
<p>All these factors limit our ability to find the perfect replacement. It follows that we should widen the net a little, look for those that <i>could</i> be what we need with a little training. Training is likely to be a mixture of courses and on the job, with the latter dominating as what is learnt in the classroom must be put into real practice to bring progress and value.</p>
<p>Adopting such an approach brings many benefits including a maintained quality of work and a level of loyalty which translates into good staff retention which in turn reduces the amount of recruitment we must do. Cool, huh?</p>
<p>One last fact: Too many organisations make no serious effort at training, expecting the right people to just walk through their doors. They want someone else to take the burden e.g. universities and give nothing back in return. Such selfishness ultimately leaves them short of the skills they desire incurring costs.</p>
<p>Employment is give and take, give some training and development and you&#8217;ll take the rewards.</p>
]]></content:encoded>
			<wfw:commentRss>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F11%2F27%2Ftraining%2F&#038;seed_title=Training/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Overhaul</title>
		<link>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F11%2F23%2Foverhaul%2F&#038;seed_title=Overhaul</link>
		<comments>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F11%2F23%2Foverhaul%2F&#038;seed_title=Overhaul#comments</comments>
		<pubDate>Wed, 23 Nov 2011 12:03:22 +0000</pubDate>
		<dc:creator>Dan Creswell</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Distributed Systems]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[sporting index]]></category>

		<guid isPermaLink="false">http://www.dancres.org/blitzblog/?p=390</guid>
		<description><![CDATA[When I arrived at Sporting Index, three or so years ago, my early tasks included the planning of a programme of work to overhaul the existing trading system. To call it a trading system was, at least architecturally, a gross lie, as in fact it was an everything system: payments, accounts, customer profile, reporting (yes, [...]]]></description>
			<content:encoded><![CDATA[<p>When I arrived at <a href="http://www.sportingindex.com">Sporting Index</a>, three or so years ago, my early tasks included the planning of a programme of work to overhaul the existing trading system.</p>
<p>To call it a trading system was, at least architecturally, a gross lie, as in fact it was an everything system: payments, accounts, customer profile, reporting (yes, OLAP and OLTP on the same database, madness) and the bet engine.</p>
<p>So the programme broke down into two parts:</p>
<ul>
<li>Clean up and separate out the components</li>
<li>Replace certain components with new implementations</li>
</ul>
<p>The programme of work started about 18 months ago and if we deliver the entire roadmap there&#8217;s another 18 months to go.</p>
<p>Thus far we&#8217;ve separated the B2B elements out (yes, they were hanging off the side of the &#8220;trading system&#8221; as well) and put a new data delivery infrastructure in place with considerably reduced latency and increased reliability. We&#8217;ve also just about completed the moving of all reporting into our OLAP systems with real-time updates from the OLTP elements (we used to do reporting refresh every 24 hours with all the painful load spike issues that go with that). The other essential element has been to eliminate the intimate relationship between website and trading system (most website content should not live in the betting engine).</p>
<p>The next major step we&#8217;re focused on is the splitting out of customer and account handling. Once this is done we&#8217;ll be in the happy situation where we can introduce our new bet engine and run in parallel with the old one so a customer placing bets on markets in either engine continues to get a complete and accurate view of their position (as do our traders).</p>
<p>Our other major area of focus is the development of a new betting engine and a key innovation there will be that we don&#8217;t use RDBMS&#8217;en for storing that information. We maintain auditing trails and DR abilities but with a faster, far lighter weight solution that will cost much less than what we&#8217;re running now.</p>
<p>Some technical details:</p>
<ul>
<li>We&#8217;ve opted for a service-based implementation, mostly with RESTful interfaces and always with smart stubs. Fact is we have to do a distributed solution to support our regulatory requirements effectively and efficiently (PCI, FSA and various gambling authority needs).</li>
<li>We&#8217;ve implemented a service lookup mechanism from scratch based on <a href="http://en.wikipedia.org/wiki/Gossip_protocol">gossip algorithms</a>. This allows us sophisticated load and failure management strategies tuned on a service by service basis. It also gives us scope for admission control.</li>
<li>We&#8217;re building up a new multicast infrastructure to deliver updates from the bet engine to desktops, other systems etc in real-time.</li>
<li>Our bet engine is partitioned such that we can up or down scale on demand via virtualisation (no we can&#8217;t use most forms of cloud infrastructure as that breaches a number of regulations).</li>
<li>We&#8217;ve got some nice automated recovery protocols that make recovery from hardware or component failures straightforwards for operational staff. In essence, they replace the broken element and it automatically knits itself back into the system and supports an SLA for recovery. For example, we can say that a cache will contain all relevant data within 5 minutes assuming a certain set of constraints are met (failure recovery times are difficult to guarantee 100%).</li>
<li>Everything is monitored including stubs, services and infrastructure. Our operational teams get to routinely use what&#8217;s being developed and be involved in the specification of the data generated and the writing of the manuals. We&#8217;ve standardised the protocols/methods of exposure for both the monitoring data and logging output.</li>
</ul>
<p>You&#8217;ll notice I haven&#8217;t talked about languages used and such. That&#8217;s because it doesn&#8217;t matter as with our service-based approach we can use whatever suits us best on a per service basis. That&#8217;s a key part of our general engineering philosophy, &#8220;right tool for the right job&#8221;, we don&#8217;t do fashion, buzz or hype influenced work, the pragmatic, practical, effective and efficient space is where we&#8217;re focused.</p>
]]></content:encoded>
			<wfw:commentRss>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F11%2F23%2Foverhaul%2F&#038;seed_title=Overhaul/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Progress</title>
		<link>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F11%2F22%2Fprogress%2F&#038;seed_title=Progress</link>
		<comments>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F11%2F22%2Fprogress%2F&#038;seed_title=Progress#comments</comments>
		<pubDate>Tue, 22 Nov 2011 11:17:13 +0000</pubDate>
		<dc:creator>Dan Creswell</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[it]]></category>
		<category><![CDATA[Philosophy]]></category>

		<guid isPermaLink="false">http://www.dancres.org/blitzblog/?p=386</guid>
		<description><![CDATA[Many in IT would have you believe that they&#8217;re progressive, constantly advancing and learning. They will provide examples such as: We&#8217;re adopting lean (or agile) We&#8217;re using Scala We&#8217;re doing large-scale Dig a little deeper though and you&#8217;ll quickly find: The agile or lean they&#8217;ve adopted and trumpet is merely a fixed set of ceremonies [...]]]></description>
			<content:encoded><![CDATA[<p>Many in IT would have you believe that they&#8217;re progressive, constantly advancing and learning. They will provide examples such as:</p>
<ul>
<li>We&#8217;re adopting lean (or agile)</li>
<li>We&#8217;re using Scala</li>
<li>We&#8217;re doing large-scale</li>
</ul>
<p>Dig a little deeper though and you&#8217;ll quickly find:</p>
<ul>
<li>The agile or lean they&#8217;ve adopted and <a href="https://twitter.com/#!/flowchainsensei/status/138926101517959168">trumpet</a> is merely a fixed set of ceremonies such as time-boxed cycles, limiting in-flight work, pair programming and automated testing.</li>
<li>The Scala code they&#8217;re writing is largely imperative with no use of any of the obvious functional aspects.</li>
<li>The supposed large-scale is in fact a couple of thousand customers running on a single database with an operation count per minute of no more than 60.</li>
</ul>
<p>These individuals and companies are paying lip-service, they haven&#8217;t learnt anything other than what the latest buzz is and they&#8217;re operating some parody of the real thing.</p>
<p>The fundamental problem is, they don&#8217;t do their research. They don&#8217;t actually examine what has been done previously and understand its fundamentals, apply it and sharpen it. This is the skill that I gained at university, not some set of buzz technologies or processes. This is the fundamental skill that allows us to progress, to learn, adapt and act.</p>
<p>[ There's a <a href="http://www.sdtimes.com/blog/post/2011/11/11/Agile-slaves.aspx">supreme irony</a> in an individual or company claiming to be doing agile or lean and not being able to research, learn and adapt because they follow a fixed set of ceremonies. ]</p>
<p>Unfortunately this skill isn&#8217;t generally recognised as valuable in the IT industry, it&#8217;s rarely taught and not seen in requests for curriculum changes from business to universities. <a href="http://www.smh.com.au/it-pro/business-it/want-to-be-a-software-engineer-dont-go-to-university-20111111-1na57.html">This</a> sort of feedback is more typical:</p>
<p>
<i><br />
&#8230;startups need graduates who can hit the ground running, who are proficient in PHP, Python and Ruby (among other modern programming languages), and who, ultimately, understand the practical side of software engineering as opposed to just the theoretical side which they learn at university.<br />
</i>
</p>
<p>Being proficient in a language does not make you good, it just means you can crank (poor) code fast. Further, understanding the practical side of software engineering means learning from what you do, analysing and adjusting. If we&#8217;re all so good at that, why do we repeatedly get burnt by the same <a href="http://www.stevemcconnell.com/rdenum.htm">classic mistakes</a>?</p>
<p>Far too many within IT act on <a href="http://en.wikipedia.org/wiki/Hype_cycle">hype</a> or pay lip-service, they don&#8217;t do research, they don&#8217;t adopt the basic disciplines of learning. Whilst that continues, progress is nothing but a pretence.</p>
]]></content:encoded>
			<wfw:commentRss>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F11%2F22%2Fprogress%2F&#038;seed_title=Progress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Divided We Fall</title>
		<link>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F11%2F09%2Fdivided-we-fall%2F&#038;seed_title=Divided+We+Fall</link>
		<comments>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F11%2F09%2Fdivided-we-fall%2F&#038;seed_title=Divided+We+Fall#comments</comments>
		<pubDate>Tue, 08 Nov 2011 22:26:29 +0000</pubDate>
		<dc:creator>Dan Creswell</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[operations]]></category>

		<guid isPermaLink="false">http://www.dancres.org/blitzblog/?p=382</guid>
		<description><![CDATA[Generally, the longer a defect remains undetected in a system, the more costly it will be to fix. I&#8217;ve seen this fact proven true over and over but you don&#8217;t have to take my word for it, ask Steve McConnell. I&#8217;ve always assumed this was well understood yet many organisations adopt processes, approaches and structures [...]]]></description>
			<content:encoded><![CDATA[<p>Generally, the longer a defect remains undetected in a system, the more costly it will be to fix. I&#8217;ve seen this fact proven true over and over but you don&#8217;t have to take my word for it, ask <a href="http://www.stevemcconnell.com/articles/art09.htm">Steve</a> <a href="http://www.stevemcconnell.com/rd.htm">McConnell</a>.</p>
<p>I&#8217;ve always assumed this was well understood yet many organisations adopt processes, approaches and structures that guarantee certain kinds of defects will be undiscovered for substantial periods of time. One of the more common faults is the separation of Development and Operations.</p>
<p>Each side has its own view of what&#8217;s important and what they&#8217;re responsible for:</p>
<ul>
<li>Operations more often than not seeks to own non-functional aspects (performance, stability, scalability etc).</li>
<li>Development more often than not seeks to own the functional aspects (features).</li>
</ul>
<p>Such a mindset often leads to a classic process mistake, issues with the functional aspects get dealt with early and all those linked to the non-functional and operational are left unsurfaced until last moment grand testing regimes (P&amp;C, User Acceptance Testing) dig them out or worse, are discovered at the point of release into production.</p>
<p>The warning signs are usually there if only we paid attention to them:</p>
<ol>
<li>Developers work in isolation building, deploying and configuring the components they develop in ways that suit them. It follows that deployment and configuration are not optimised for production and do not account for any hard won operational experience.</li>
<li>Operations staff demand huge handover documents be written by developers and passed over with the product. Inevitably the documentation fails to account for operational concerns (what would a developer know about operations?)</li>
<li>There are separate environments for the purposes of validating correctness and accuracy of handover documents. After all developers can&#8217;t be trusted to get the documentation right so it must be checked.</li>
<li>The development environments are ad hoc with no resemblance to production (certainly they aren&#8217;t a scale unit of production). Leading to large numbers of problems at release time: files can&#8217;t be found, configurations are broken and various versioning issues present themselves.</li>
</ol>
<p>The antidote is relatively straightforward, all development activity should be performed in a production like situation. For example:</p>
<ol>
<li>Deployment and configuration of software components under development should be routinely performed by operational staff. The result is early knowledge transfer and the documentation can now be written by those best able to produce it (operations staff, not developers).</li>
<li>Development environments should contain appropriate network topology. Often production setups contain segregated networks for security or availability reasons. Ensuring developers are exposed early to these issues means software is more likely to account for these demands.</li>
<li>Monitoring and logging infrastructure should be as per production and used routinely for debugging and capture of data relevant to testing (performance, failure etc)</li>
<li>Development environments should be scale units of production. This permits early production-like performance testing. This should be backed up with routine robustness testing e.g. to identify memory leaks early.</li>
</ol>
<p>A typical reaction is for development and operations staff to say this cannot possibly work and will slow development to a crawl. They aren&#8217;t actually wrong but they&#8217;re missing a key insight:</p>
<p><strong>If development has slowed to a crawl it&#8217;s an early warning of future production troubles.</strong></p>
<p>For example, if deployment is taking too much effort and time, something needs tweaking, simplifying or automating. What we&#8217;ve done is best summarised by a proverb from Toyota (<a href="http://theleanstartup.com/book">via Eric Ries</a>):</p>
<p><strong>&#8220;Stop production so that production never has to stop&#8221;.</strong></p>
<p>We&#8217;ve created a feedback loop that highlights defects spanning all concerns (functional, non-functional and operational) early which keeps costs down.</p>
<p>Clearly, delivering a given feature will take a little longer as we must account for all aspects from functional through non-functional and operational. That&#8217;s acceptable because if we don&#8217;t cover all these aspects we&#8217;re asking for trouble in many forms including:</p>
<ul>
<li>If we cannot adequately monitor the performance of a newly delivered feature there&#8217;s a direct impact on customer experience. They will know before we do that something is broken which leads to irate phone calls, lost revenue etc.</li>
<li>If we cannot adequately track the effect of a new feature on customer behaviours, we cannot evolve it appropriately.</li>
</ul>
<p>Needless to say developing features in this fashion fits well with lean and agile approaches.</p>
<p>So the antidote is relatively straightforward and there are development approaches that fit well with what needs to be done. The toughest challenge remains though, effecting the necessary mindset shift to get it done. It ought to be a little easier with the rise of DevOps but notably there are early signs of trouble as has been seen with lean and agile adoption.</p>
<p>There are many who claim to know and practice each of these disciplines but most are paying only lip service, picking out the bits of process, mindset or tooling that suit them and ignoring the rest.</p>
<p>Sporting Index is right in the middle of making this tricky jump from Dev and Ops to DevOps, I&#8217;ll let you know how we get on.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F11%2F09%2Fdivided-we-fall%2F&#038;seed_title=Divided+We+Fall/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Warp</title>
		<link>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F03%2F12%2Fwarp%2F&#038;seed_title=Warp</link>
		<comments>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F03%2F12%2Fwarp%2F&#038;seed_title=Warp#comments</comments>
		<pubDate>Sat, 12 Mar 2011 09:37:06 +0000</pubDate>
		<dc:creator>Dan Creswell</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Systems]]></category>

		<guid isPermaLink="false">http://www.dancres.org/blitzblog/?p=373</guid>
		<description><![CDATA[A frequent problem I observe when reviewing system designs is they are built atop one or more libraries, frameworks or products that are poorly suited to the intended task. Fitting the design to these underpinnings warps it in undesirable ways incurring all sorts of costs: It takes an increasing number of staff just to deploy [...]]]></description>
			<content:encoded><![CDATA[<p>A frequent problem I observe when reviewing system designs is they are built atop one or more libraries, frameworks or products that are poorly suited to the intended task. Fitting the design to these underpinnings warps it in undesirable ways incurring all sorts of costs:</p>
<ul>
<li>It takes an increasing number of staff just to deploy and run the system.</li>
<li>Customers face an increasingly bad experience in terms of interaction, performance and stability.</li>
<li>One spends more time refactoring than developing new features &#8211; although in many cases developers will simply not bother with this effort which accelerates the drop in quality for customers.</li>
<li>The level of coupling increases impacting the integrity of the design and making future change more difficult.</li>
</ul>
<p>I call this the &#8220;design-by-product anti-pattern&#8221;. There are a couple of things that cause it to manifest:</p>
<ol>
<li>Absence of a real design prior to product/framework/library selection &#8211; most of those given the remit for design cannot construct proper abstractions that are adequately divorced from implementation. That is they do not understand the core entities and operations that exist within the domain they are building a system for. Thus when products/libraries/frameworks are selected there is limited structure  to assist in evaluating their appropriateness.</li>
<li>These products are used because they are on the list of &#8220;company approved technologies&#8221;. The justification for the existence of such a list is that it &#8220;reduces cost&#8221; which it might well do if all one accounts for is licenses and product support. Unfortunately, the cost equation is not nearly so simple (see above re: costs).</li>
<li>A related problem to &#8220;company approved technologies&#8221; is hot or favourite technologies preferred by the development team regardless of their appropriateness for use in any particular design situation.</li>
</ol>
<p>Any product/library/framework is created by an individual who has their own view of how their customers design their systems and builds APIs accordingly. In the worst cases these individuals design APIs in total isolation, focused on making them theoretically perfect (for some definition of perfect). If we as customers create designs that do not align well with the views of these individuals, the result will be costly as we force the two designs together. The cost is magnified for each additional conflicting product/library/framework design.</p>
<p><a href="http://www.dancres.org/blitzblog/2011/02/15/foundation/">Loose coupling as the result of proper definition of roles and responsibilities</a> is the only tool we have to allow for future design evolution. Poor selection of products/libraries/frameworks erodes this property and should be avoided otherwise <a href="http://en.wikipedia.org/wiki/Death_march_(software_development)">death-march</a> awaits.</p>
]]></content:encoded>
			<wfw:commentRss>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F03%2F12%2Fwarp%2F&#038;seed_title=Warp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Foundation</title>
		<link>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F02%2F15%2Ffoundation%2F&#038;seed_title=Foundation</link>
		<comments>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F02%2F15%2Ffoundation%2F&#038;seed_title=Foundation#comments</comments>
		<pubDate>Tue, 15 Feb 2011 12:26:41 +0000</pubDate>
		<dc:creator>Dan Creswell</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[design]]></category>

		<guid isPermaLink="false">http://www.dancres.org/blitzblog/?p=365</guid>
		<description><![CDATA[There are some design basics that development teams routinely fail to account for: Roles Responsibilities Coupling Role The basic justification for the existence of some api, interface or class. A summary of what it&#8217;s for. Just as importantly, the role defines what a particular entity is not for. Responsibility The things that some entity can [...]]]></description>
			<content:encoded><![CDATA[<p>There are some design basics that development teams routinely fail to account for:</p>
<ol>
<li>Roles</li>
<li>Responsibilities</li>
<li>Coupling</li>
</ol>
<h2>Role</h2>
<p>The basic justification for the existence of some api, interface or class. A summary of what it&#8217;s for. Just as importantly, the role defines what a particular entity is <em>not</em> for.</p>
<h2>Responsibility</h2>
<p>The things that some entity can do/knows in support of a role.</p>
<h2>Coupling</h2>
<p>An expression of the dependencies between roles. This property tells us a lot about the state of our design.</p>
<p>Two things that are heavily dependent upon each other might well be serving individual parts of a single role and thus should be consolidated. If everything ends up in a single role, it can suggest that the current approach to classifying behaviours is missing some factors.</p>
<p>Coupling can be temporal such that, for example, one entity cannot dispatch its responsibilities without the presence of another at the same time. This might indicate the need for some work on handling availability issues in a distributed system.</p>
<p>Limited coupling is a sign of cohesion, clarity in roles and responsibilities which can be indicative of a clean, maintainable design.</p>
<h2>Platform Neutral</h2>
<p>These basics apply regardless of the platform one chooses to develop upon. Roles, responsibilities and coupling apply just as well to service architectures, databases (tables and associated triggers and packages) and applications in Java, Scala, Clojure, C# or any other programming environment.</p>
<h2>Warning Signs</h2>
<p>It is very common for individual developers or development teams to allocate additional functions to existing elements of a design unthinkingly, thus eroding its quality. This manifests in many ways including:</p>
<ol>
<li>Some element of the system becomes the source of all information in respect of e.g. configuration or the entirety of customer data.</li>
<li>A single cache contains all data regardless of its nature (e.g. customer, account details, market price).</li>
<li>Some element of the system must always be running otherwise nothing else works.</li>
<li>Some element of the system has functions that span many different bits of data (e.g. customer, account, market price). </li>
</ol>
<h2>Rule of Thumb</h2>
<p>Any entity within a system should do only one thing and it should do it well (often credited as <a href="http://en.wikipedia.org/wiki/Unix_philosophy">Unix Philosophy</a>). This applies to everything from applications and products to services and individual classes.</p>
]]></content:encoded>
			<wfw:commentRss>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F02%2F15%2Ffoundation%2F&#038;seed_title=Foundation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unaware</title>
		<link>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F01%2F03%2Funaware%2F&#038;seed_title=Unaware</link>
		<comments>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F01%2F03%2Funaware%2F&#038;seed_title=Unaware#comments</comments>
		<pubDate>Mon, 03 Jan 2011 14:44:44 +0000</pubDate>
		<dc:creator>Dan Creswell</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.dancres.org/blitzblog/?p=358</guid>
		<description><![CDATA[Design is not rules, it&#8217;s not patterns, it&#8217;s not technological choices or indeed code. Design is tradeoffs, driven by data where possible and gut instinct. It&#8217;s about identifying the core challenges of a problem domain (which might ultimately be one or many systems) and addressing them through creation of appropriate abstractions. These abstractions embody: Functions [...]]]></description>
			<content:encoded><![CDATA[<p>Design is not rules, it&#8217;s not patterns, it&#8217;s not technological choices or indeed code. Design is tradeoffs, driven by data where possible and gut instinct. It&#8217;s about identifying the core challenges of a problem domain (which might ultimately be one or many systems) and addressing them through creation of appropriate abstractions. These abstractions embody:</p>
<ul>
<li>Functions to be performed</li>
<li>Data to be discovered, consumed and produced</li>
<li>Non-functionals (e.g. SLAs)</li>
</ul>
<p>The abstractions are then rendered into the real-world using appropriate hardware, technologies, patterns and languages. A good design:</p>
<ul>
<li>Exhibits few exception cases</li>
<li>Has logic and/or data located neatly and predictably</li>
<li>Applies a small set of core constructs repeatedly</li>
<li>Addresses operational needs</li>
<li>Considers cost versus value delivered</li>
<li>Is as simple as possible</li>
<li>Has the minimum of implementation assumption</li>
</ul>
<p>There are several key failing points in the design process:</p>
<ul>
<li>No adjustment in the face of implementation feedback &#8211; No design is complete or perfect. There will always be missed details leading to brittle code, complex corner cases or convoluted solutions. It is critical that we monitor our progress and adapt the design accordingly.</li>
<li>No up front design &#8211; Design is the skeleton upon which we hang technology choices and code structure. In it&#8217;s absence we rapidly descend into a world of difficult to navigate code and costly constraints set by uninformed product choices.</li>
<li>No care in following the design &#8211; A key element of design is to place the right things in the right places. Failing to do this at code time increases coupling, makes maintenance difficult and can impact both performance and scalability. Similar effects occur as the result of poor technology selection.</li>
</ul>
<p>Design and implementation go hand in hand yet many of us lack awareness of where the boundary between these two elements lies. We don&#8217;t understand how these elements interact with each other or appreciate the impact of decisions we make in respect of one element on the other.</p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://dancres.org/feeder/?FeederAction=clicked&#038;feed=Articles+%28RSS2%29&#038;seed=http%3A%2F%2Fwww.dancres.org%2Fblitzblog%2F2011%2F01%2F03%2Funaware%2F&#038;seed_title=Unaware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

