<?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>robjam.es &#187; Innovation</title>
	<atom:link href="http://robjam.es/category/innovation/feed/" rel="self" type="application/rss+xml" />
	<link>http://robjam.es</link>
	<description></description>
	<lastBuildDate>Sat, 28 Jan 2012 20:40:41 +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>Getting to &#8220;Done&#8221;</title>
		<link>http://robjam.es/2012/01/getting-to-done/</link>
		<comments>http://robjam.es/2012/01/getting-to-done/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 20:40:41 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[General News]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Start Ups]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=469</guid>
		<description><![CDATA[How do you know when you are finished? This can be quite difficult. You are working on something and you need to get that deliverable finished; a document, a piece of code, a project, a building or a Lego creation. But when do you now you are done? This can be extra hard if you [...]]]></description>
			<content:encoded><![CDATA[<p>How do you know when you are finished? This can be quite difficult.</p>
<p>You are working on something and you need to get that deliverable finished; a document, a piece of code, a project, a building or a Lego creation. But when do you now you are done?</p>
<p>This can be extra hard if you consider yourself to be a perfectionist!</p>
<p>There are a four rules that I would suggest to follow;</p>
<ol>
<li>Visualize &#8220;done&#8221; from the start. Before you get started define what getting it done means. What is that end state, and ask yourself the question &#8220;could I get to &#8216;done&#8217; earlier?&#8221;, &#8220;what compromises can I make to get finished sooner?&#8221;</li>
<li>Use tools to test being finished. Test Driven Development does this well. Coders are encouraged to write tests that only confirm the required functionality has been delivered. This discourages over-engineering. Once the tests pass, you&#8217;re done!</li>
<li>Assess as you go. This means asking yourself whether you are &#8216;really&#8217; finished, or do you have more to do. What if you stop now, what are the negative impacts, and how much value are you providing by doing the extra work on this &#8216;thing&#8217;? Would there be more value moving onto the next &#8216;thing&#8217;?</li>
<li>Accept the 80/20 rule. Accept that it takes 20% of the effort to get to 80% of the finished product. Is it really worth spending that additional 80% of your time, to fill that final 20%?</li>
<li>Leave something to do. There is always room for improvement, but make that assessment after your product has been used, your document has been read, or your room has been lived in. You will never get it 100% right the first time round and once you start using your deliverable, you will find ways to improve.</li>
</ol>
<p>There are of course some exceptions to the above, and you also need to question whether what you are currently working on is one of those exceptions (brain surgery comes to mind, you kind of want to get that perfect the first time!)?</p>
<p>But imagine how much more productive you could be if you could commit to finishing things earlier?</p>
<p>So hurry up and get to &#8220;done&#8221;!</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2012/01/getting-to-done/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Understanding Technical Debt</title>
		<link>http://robjam.es/2012/01/understanding-technical-debt/</link>
		<comments>http://robjam.es/2012/01/understanding-technical-debt/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 07:20:25 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[General News]]></category>
		<category><![CDATA[Innovation]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=465</guid>
		<description><![CDATA[Technical Debt is a concept that was introduced in Agile project delivery as a way to understand how to make better software development decisions. I think it&#8217;s just as relevant in any technology based decisions. So much so that I propose that there is a mathematical formula to explain it. The first part of the [...]]]></description>
			<content:encoded><![CDATA[<p>Technical Debt is a concept that was introduced in Agile project delivery as a way to understand how to make better software development decisions. I think it&#8217;s just as relevant in any technology based decisions.</p>
<p>So much so that I propose that there is a mathematical formula to explain it.</p>
<p><img class="alignnone " src="http://robjam.es/wp-content/uploads/2012/01/20120121-181952.jpg" alt="20120121-181952.jpg" width="933" height="172" /></p>
<p>The first part of the equation describes that the more strategic decisions you make and less tactical, the less it will influence the end result (smaller number). But you need to understand that time makes technical debt worse, so that needs to be added as a multipler.</p>
<p><strong>But what is technical debt?</strong></p>
<p>We are very familiar with the concept of borrowing money to buy a car or a house. In a perfect world, we would all have enough money to buy that house or car outright. To do that, we need to save up the money. To shortcut the saving aspect, we go to the bank and borrow money to buy things now. But there is a cost; it&#8217;s called interest. You pay the bank back, and when you do, you need to pay interest, the longer you take to pay, the more interest you will pay.</p>
<p>It&#8217;s no different with technical debt.</p>
<p>Your options are to take your time and do it right (strategic decisions) or if there is urgency and you want to shortcut the end-state, you do what you need to do, making compromises for the long term vision (tactical) decisions.</p>
<p>You also need to add the complexity of time (interest) to this, because the longer you live with a tactical decision, the harder it is to leave it. This is because over time you will get more users dependent on the system, more data in the database to migrate, or more of other systems and processes dependent on it.</p>
<p>Is there anything wrong with making tactical decisions and inheriting technical debt? Absolutely not! Just as borrowing money for a car or a home you must pay it back, same applies to your technical debt. At some stage you need to pay that debt back. It will cost more to decommission it, to replace with a strategic system or migrate to where you want to be.</p>
<p>The issue we have is that many times tactical decisions are made not realizing that there is a debt to pay off. That is what needs to be highlighted. Use the formula above to communicate it to your business stakeholders.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2012/01/understanding-technical-debt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My First (well overdue) Post from Echo!!</title>
		<link>http://robjam.es/2012/01/my-first-well-overdue-post-from-echo/</link>
		<comments>http://robjam.es/2012/01/my-first-well-overdue-post-from-echo/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 00:20:45 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[General News]]></category>
		<category><![CDATA[Innovation]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=459</guid>
		<description><![CDATA[2012 has started and so has my 5th month at Echo Entertainment, and I must admit, I&#8217;m having a ball!!! For those that don&#8217;t know, Echo Entertainment was the result of a demerger of the casino business in TabCorp. We own &#38; operate 4 casinos in Australia; The Star in Sydney, Jupiters on the Gold Coast, [...]]]></description>
			<content:encoded><![CDATA[<p>2012 has started and so has my 5th month at <a href="http://www.echoentertainment.com.au/" target="_blank">Echo Entertainment</a>, and I must admit, I&#8217;m having a ball!!!</p>
<p>For those that don&#8217;t know, Echo Entertainment was the result of a demerger of the casino business in <a href="http://www.tabcorp.com.au/" target="_blank">TabCorp</a>. We own &amp; operate 4 casinos in Australia; The Star in Sydney, Jupiters on the Gold Coast, Treasury in Brisbane &amp; Jupiters in Townsville. Although our core business is casinos and everything gaming related, we as IT, pretty much run everything; casino systems, hotel systems, restaurant, point of sale and even car parks. This is what makes it fun, you have so much variety.</p>
<p>The other thing that I totally love about this place is how we behave. For a public company with over 9,000 employees, we behave like a startup. I was recently part of a project team that delivered a production  mobile application to the gaming floor staff from inception to production in 5 weeks! That is an insane pace, and it was a pleasure of a project to work on. We are process light, which also means that we are bureaucratic light, and that makes for an enjoyable work environment.</p>
<p>I plan to post a lot more about what I am working on. My goals for the next 3 months is to set strategic plans and roadmaps around Mobile, CRM &amp; Gaming systems. Watch this space!!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2012/01/my-first-well-overdue-post-from-echo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visitor Retention: Infographic</title>
		<link>http://robjam.es/2011/09/visitor-retention-infographic/</link>
		<comments>http://robjam.es/2011/09/visitor-retention-infographic/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 22:01:15 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[General News]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=446</guid>
		<description><![CDATA[Came across this really interesting infographic about customer retention. The focus is on gaming, but at a high level, the key points are critical and most often forgotten. Source: From the great mixpanel blog on gaming, http://blog.mixpanel.com/2011/09/16/infographic-what-you-should-know-about-visitor-retention/]]></description>
			<content:encoded><![CDATA[<p>Came across this really interesting infographic about customer retention. The focus is on gaming, but at a high level, the key points are critical and most often forgotten.</p>
<div id="attachment_447" class="wp-caption aligncenter" style="width: 60px"><a href="http://robjam.es/wp-content/uploads/2011/09/retention-infographic.png"><img class="size-medium wp-image-447 " title="retention-infographic" src="http://robjam.es/wp-content/uploads/2011/09/retention-infographic-50x300.png" alt="" width="50" height="300" /></a><p class="wp-caption-text">Click to Enlarge</p></div>
<p>Source: From the great <a href="http://blog.mixpanel.com/" target="_blank">mixpanel </a>blog on gaming, <a href="http://blog.mixpanel.com/2011/09/16/infographic-what-you-should-know-about-visitor-retention/" target="_blank">http://blog.mixpanel.com/2011/09/16/infographic-what-you-should-know-about-visitor-retention/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2011/09/visitor-retention-infographic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Architectural Deck &#8211; A great example</title>
		<link>http://robjam.es/2011/07/architectural-deck-a-great-example/</link>
		<comments>http://robjam.es/2011/07/architectural-deck-a-great-example/#comments</comments>
		<pubDate>Sun, 03 Jul 2011 22:40:53 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=442</guid>
		<description><![CDATA[The other day I talked about the concept of an Architectural deck to describe a blueprint for making decisions. And there is a great example of a well architected solution that we can test the hypothesis of the Architectural Deck against &#8211; The Human Body. Just a reminder, there are 3 layers to our deck; Foundational &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://robjam.es/2011/07/the-architecture-deck-an-introduction/">other day</a> I talked about the concept of an Architectural deck to describe a blueprint for making decisions. And there is a great example of a well architected solution that we can test the hypothesis of the Architectural Deck against &#8211; The Human Body.</p>
<p>Just a reminder, there are 3 layers to our deck;</p>
<ol>
<li>Foundational &#8211; The core and basis that we have to work with</li>
<li>Functional &#8211; The tried and tested solutions</li>
<li>Innovational &#8211; The things that make the solution different or special</li>
</ol>
<p>If we try and correlate this to the human body, or more specifically a component of the human body such as the legs. This may be described in the following way;</p>
<h3>Foundational</h3>
<p>If we look at the human legs, there are some very specific core capabilities that they have, such as balancing upright, being able to move a person around and the materials that are used to construct them; carbon based, organic material to create skin, bones, muscles, nerves and the blood that fuels the cells. This is foundational as its <strong>core</strong> to the human legs. And the observant ones out there would have recognised &#8220;well, that&#8217;s not unique to human legs!?&#8221; And how right you are! This is a great example of the core capabilities that most animals with legs have (give or take), and so we are working with something that has been proven. The <em>&#8220;give or take&#8221; </em>takes us to the next layer; functional.</p>
<h3>Functional</h3>
<p>Human&#8217;s can walk, run, jump and do a variety of different things with their legs. But there are some tried and tested methods that have been employed. For example, there is nothing stopping you from walking backwards with you legs wide a part and feet pointing outwards (granted, it would be difficult). But the point is, we humans typically don&#8217;t walk that way. We have adopted &#8216;best practices&#8217; in walking, we use our hips, bend our knees, put one foot in front of the other etc. So although there are many ways to handle movement with our legs, to get the most optimised functional movement from them, we adopt this best practice.</p>
<p>As an aside, think of the down stream benefits here. Pediatrists have been treating well known issues based on these best practices, how do you think they would go treating you if you always walked the way described above? Shoe&#8217;s are designed based on this premise of walking. There are many other <em>support</em> benefits.</p>
<h3>Innovational</h3>
<p>So what are the exciting innovational aspects that we can attribute to legs? Firstly, the fact that humans effectively walk upright, which would gives us the competitive advantage against certain other animals. But that is not fair, we should compare apples with apples. So think about the well oiled machine that is an sprint runner. Their muscles are finely tuned for explosive strength that is converted to speed. This is different to a marathon runner that is focussing on stamina. Sprint runner&#8217;s bones are strengthened, and the the other systems in their body (lungs, heart etc) work hand in hand to provide this competitive advantage. Although they may have the same make up, they have innovated in how they train and focus on key parts of their legs that sets them above others.</p>
<p>Can you think of other examples?</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2011/07/architectural-deck-a-great-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Architecture Deck &#8211; An Introduction</title>
		<link>http://robjam.es/2011/07/the-architecture-deck-an-introduction/</link>
		<comments>http://robjam.es/2011/07/the-architecture-deck-an-introduction/#comments</comments>
		<pubDate>Sat, 02 Jul 2011 02:56:12 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[General News]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=433</guid>
		<description><![CDATA[Enterprise Architecture is an important practice that has come out in the last 10 years. To me, its an attempt at the &#8216;grand unified theory&#8216; in business &#38; technology. And of the most important models within Enterprise Architecture is to derive the Business Architecture which sits at the top of this tree. After discussing this [...]]]></description>
			<content:encoded><![CDATA[<p>Enterprise Architecture is an important practice that has come out in the last 10 years. To me, its an attempt at the &#8216;<a href="http://en.wikipedia.org/wiki/Grand_Unified_Theory" target="_blank">grand unified theory</a>&#8216; in business &amp; technology. And of the most important models within Enterprise Architecture is to derive the Business Architecture which sits at the top of this tree. After discussing this with a number of people, I have got some traction to a concept I have been talking about for a while that I call it the &#8220;Architecture Deck&#8221;.</p>
<p><a href="http://robjam.es/wp-content/uploads/2011/07/Architectual-Deck.jpg"><img class="aligncenter size-full wp-image-434" title="Architectual Deck" src="http://robjam.es/wp-content/uploads/2011/07/Architectual-Deck.jpg" alt="" width="293" height="174" /></a></p>
<p>The Architecture Deck is a framework to try and conceptualise the layers of an architecture that helps make business decisions. What is great about this deck is that can quite easily be used to architect a city, a house, an enterprise, a startup, a team or a product, or absolutely anything that  can get value from an architectural blueprint.</p>
<p>I&#8217;m a big proponent of simple models, and this is about as simple as they get, but you will see in the next series of posts, how it is quite powerful.</p>
<p>Lets start today with explaining the layers (from the bottom);</p>
<h3>Foundational</h3>
<p>This is the lowest part of the deck, and it describes the most foundational aspects to an architecture. Its where tried and tested, and industry standards (beyond best practices) are employed. You will 99% of the times, engage this in your architectural solution, as there is no benefit to your architectural model to go outside of this. Examples would be the need to have sewerage in a city plan, or cement slab for a house, use IP networks to interconnect computers in an office environment, or use a relational database for storage in a software product. Sure there are other alternatives, but for your current purpose, there is no benefit to go outside of this. This will be described in more detail in future posts.</p>
<h3>Functional</h3>
<p>The functional layer describes the aspects of the architecture that have many differentiators or competitors, so you have some choice. But this is isolated for 2 special reasons; a) things here do not provide your city, business or product with a competitive advantage, &amp; b) in immature architectures where this is not articulated, every architecture has their own version of it. This is critically important, as what we are trying to identify here is the concept of engaging best practices. Examples here could be a Rail Network in a city, the type of timber floorboards you put in a house, the order process in an enterprise, or software pattern you use in your product. As I&#8217;m sure you have already realised, there are many choices with all these examples, but the question that must be asked, &#8220;Is there any advantage in trying to be unique here, or are we best to use the methods that others have tried, tested, failed and then got right?&#8221;</p>
<h3>Innovational</h3>
<p>This is the most exciting layer!! This describes what makes your architecture different. What makes New York a great city that others try hard to imitate, why everyone in your street wants a house just like yours, why your office can process sales orders faster than anyone else, or what makes the iOS such a unique OS for Apple that everyone is imitating it! Its the competitive advantage, its the unique streak, and its the innovation that occurs in a city, house design, office operations or software product!</p>
<p>I appreciate that this is all quite esoteric, and the details will come out in future posts, but essentially the basics described here are all that you need to help you make decisions. In future posts we&#8217;ll get into the details, we will also look at some real world examples, and we&#8217;ll discuss how you can work out your own Architectural Deck.</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2011/07/the-architecture-deck-an-introduction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Startups: The importance of the Founder Chemistry</title>
		<link>http://robjam.es/2011/06/startups-the-importance-of-the-founder-chemistry/</link>
		<comments>http://robjam.es/2011/06/startups-the-importance-of-the-founder-chemistry/#comments</comments>
		<pubDate>Wed, 15 Jun 2011 03:57:06 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[General News]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Start Ups]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=427</guid>
		<description><![CDATA[I have been involved in some interesting conversations recently, where technical founders are struggling to find business co-founders and vice versa. Additionally, there seems to be the search for the holy grail of what defines an effective founder. Everything from age analysis, to combinations and structures. But I wonder if there is a magic bullet [...]]]></description>
			<content:encoded><![CDATA[<p><!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Arial} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Arial; min-height: 14.0px} -->I have been involved in some interesting conversations recently, where technical founders are struggling to find business co-founders and vice versa. Additionally, there seems to be the search for the holy grail of what defines an effective founder. Everything from <a href="http://techcrunch.com/2011/05/28/peak-age-entrepreneurship/" target="_blank">age analysis</a>, to <a href="http://startupgenome.cc/" target="_blank">combinations and structures</a>. But I wonder if there is a magic bullet theory that could be derived here?</p>
<p>In my limited experience, these are the elements that I found critically important.</p>
<p><strong>1) A respected and aligned knowledge base</strong></p>
<p>Maybe unusual to be at the top of my list, but I believe this is one of the culprits for many relationship breakups disguised as other things. Take the case of a technical and non-technical cofounder, one must respect and trust the other&#8217;s knowledge and experience. As a non-technical founder, if you are questioning every technical decision that your partner is making, you are doomed for failure. But this trust needs to be earned. You need to make decisions your partner&#8217;s and your team will respect. As soon as you do something that smells of something different, that respect is not only lost, but everybody&#8217;s motivation will be channeled into something they think is more important, and it not you or your startup.</p>
<p><strong>2) Equalized commitment</strong></p>
<p>This is not about a 50/50 split, but about the commitment each of you are willing to provide. Do you agree that once the business is sustainable, that you may have to give up your day jobs? Do you have alternative agendas going on, or does one of you see this as a pet project while the other is banking his whole life on it? Nothing wrong with any of these scenarios if you discuss this prior and both agree the arrangement you are entering into.</p>
<p><strong>3) Strategic alignment</strong></p>
<p>One would argue that this is the no# 1 important aspect. That you all agree what the strategic direction is. What is going on in your head is agreed by everyone, but this may be only your perception. The best way to tackle this is through your existing strategic discussions, but don&#8217;t forget to try and do some crystal ball gazing. Ie/ when toting out your grand plan, start asking some &#8216;what if&#8217; questions; &#8220;what if we run out of money in 18 months?&#8221;, &#8220;what if someone offers to acquire us in 12 months, but at a fraction of our expectations?&#8221;. See if you are all on the same page in the early days with these types of decisions. I would also recommend you keep notes here &#8211; believe me, people&#8217;s attitudes change when real money is being thrown around.</p>
<p><strong>4) Clearly defined and accepted responsibilities and accountabilities</strong></p>
<p>This is almost business management 101, but I have seen so many disputes occur because there was no clear concept of who should be doing what. &#8220;you mean you expect me to write the monthly newsletters?&#8221;, &#8220;when did it become my role to go out and do sales?!&#8221;. Remember that &#8220;accountability&#8221; is the decision maker, while &#8220;responsibility&#8221; is the doer. If you have not used one before, I love using <a href="http://en.wikipedia.org/wiki/Responsibility_assignment_matrix" target="_blank">RACI</a> matrices for this.</p>
<p><strong>5) Vito power</strong></p>
<p>This is a hard one, and I struggled to define it. But what happens when you are just totally at odds as to what the decision should be? The rule defined above should help here, but it&#8217;s the big strategic decisions that I am talking about, most specifically &#8220;time to pivot&#8221;! When one founder believes that the current model isn&#8217;t working, and it&#8217;s time to change, while the other founder is convinced that the existing one has not been exhaustively tested and we should persist. This is a critically important decision, but who wins? The best path you have is to try and argue your case and persuade the other side, and I encourage that this is done until all avenues are exhausted. Failing that, someone may have to pull the Vito card. But keep in mind, its not going to be pretty if you do!</p>
<p>Anything else you want to add?</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2011/06/startups-the-importance-of-the-founder-chemistry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t assume the most obvious problem is THE problem</title>
		<link>http://robjam.es/2011/05/dont-assume-the-most-obvious-problem-is-the-problem/</link>
		<comments>http://robjam.es/2011/05/dont-assume-the-most-obvious-problem-is-the-problem/#comments</comments>
		<pubDate>Mon, 23 May 2011 07:01:32 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[General News]]></category>
		<category><![CDATA[Innovation]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=421</guid>
		<description><![CDATA[When solving a problem, we come across what seems the most obvious issue, and fix it. We then assume that the problem has gone. But there are many instances when there are a deeper set of problems that don&#8217;t appear so obvious. Take for example debugging code. When it is determined that there is a [...]]]></description>
			<content:encoded><![CDATA[<p>When solving a problem, we come across what seems the most obvious issue, and fix it. We then assume that the problem has gone. But there are many instances when there are a deeper set of problems that don&#8217;t appear so obvious.</p>
<p>Take for example debugging code. When it is determined that there is a bug, we may go through the code and find something blindingly obvious to us that is the problem. We may then do the rights things; write a test that checks for this, fails and then we fix the bug and push to be deployed. Woila! Problem fixed! But is it?</p>
<p>Many a time, this assumption can get us unstuck. We should actually check whether there was more to the problem. This is particularly true when we have technical solutions to business problems, as there is a translation in between.</p>
<p>A friend of mine is a telco line engineer, and on a number of occasions he has mentioned that junior engineers get unstuck when they go and service a faulty line after heavy downpour of rain. They make the &#8220;<em>assumption</em>&#8221; that since there was heavy rain that the line terminals are flooded with water. They go onsite, and sure enough find moisture in the terminal plugs and clean these plugs up and replace it all. Only to find that the issue is still there.</p>
<p>This is because that although the cables don&#8217;t like water, they are actually quite resilient to these conditions, and its usually other unrelated issues, such as pressure building up in pipes that cause issues with the cabling itself elsewhere. And its this information that an experienced engineer knows to look out for.</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2011/05/dont-assume-the-most-obvious-problem-is-the-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#8217;s wrong with Grails Searchable?</title>
		<link>http://robjam.es/2011/04/whats-wrong-with-grails-searchable/</link>
		<comments>http://robjam.es/2011/04/whats-wrong-with-grails-searchable/#comments</comments>
		<pubDate>Wed, 27 Apr 2011 01:33:45 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Featured Articles]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=413</guid>
		<description><![CDATA[I have been a huge fan of the Grails Searchable plugin, and its one of the main selling points when I talk to people about Grails. But something has made me go sour on it recently. A great blog post from Boris Goykhman about the plugin has prompted me to write my own. For those of [...]]]></description>
			<content:encoded><![CDATA[<p>I have been a huge fan of the Grails Searchable plugin, and its one of the main selling points when I talk to people about Grails. But something has made me go sour on it recently. A <a href="http://groovytard.blogspot.com/2011/04/quick-journey-through-grails-searchable.html" target="_blank">great blog post from Boris Goykhman</a> about the plugin has prompted me to write my own.</p>
<p>For those of you that don&#8217;t know; <a href="http://www.grails.org/plugin/searchable" target="_blank">Searchable plugin</a> is a plugin wrapper in the Grails Framework for the <a href="http://www.compass-project.org/" target="_blank">Compass Search</a> engine that abstracts much of the domain class to search index mappings. And Compass is an extended implementation of the robust <a href="http://lucene.apache.org/java/docs/index.html" target="_blank">Open Source Lucene search engine</a>. But its the &#8220;Domain Model to Search Index&#8221; abstraction that has cause for concern.</p>
<p>So lets start &#8211; I think Searchable is absolutely brilliant!!! It simplifies the process of adding a search engine to a Grails application. Although apart from some straight forward indexing and searching, I don&#8217;t believe its designed to handle complex search scenarios. Sure, you can spend a lot of time bastardising your application to support many of the elements (such as searchable component and searchable reference) to try and get deep nested relationships correctly mapped, but more often than not, I find myself also bastardising my domain model to handle what I want search to do!!</p>
<p>I will continue to use searchable for basic type search mappings, but I have recently decided that it is more efficient to separate the concerns between domain data and search indexes. Domain models are inherently a tree structure, there are relationships, abstractions and extensions. Whereas your search index is a flattened version of this. And trying to do this flattening through decorators and mapping files is not effective.</p>
<p>In a recent project, I took the approach to handling the domain to search indexing data structure conversion myself. And its already started to demonstrate pay offs! I have moved to the Solr Search engine, which is another emerging implementation of the Lucene Engine. I favour it these days for its added features particularly in Geo Spatial Search capabilities.</p>
<p>Quite simply, my application has a SolrService that takes domain objects that I pass it and convert them to a flattened Solr Object (that I also implemented), that is then passed to the Solr Search Engine through SolrJ. All this is quite simply managed through the afterInsert, afterUpdate and afterDelete triggers in the Domain objects. But it means that I don&#8217;t have to write complex mapping files to try and map my domain structures to the search index I want to create.</p>
<p>What are the benefits? Most of you would state that it would take more time doing this, but I found it to be the contrary. I have spent so much time (sometimes weeks), tweaking searchable configurations and mappings to see how it would affect my index. Looking at indexes with the <a href="http://code.google.com/p/luke/" target="_blank">Luke</a> tool to try and determine what is actually going on and then trying to perform searches against that data to see if I get back what I am after.</p>
<p>I have found that the search indexes are much smaller and much more performant because of it. Because you have much more control over the indexes, I create my indexes so that I don&#8217;t have to do any GORM queries at all when rendering search results. Which you can also do in searchable, but its much more complex to understand the translation.</p>
<p>Soon I will try and post some code on how I actually did this.</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2011/04/whats-wrong-with-grails-searchable/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Creating HTML with jQuery</title>
		<link>http://robjam.es/2011/04/creating-html-with-jquery/</link>
		<comments>http://robjam.es/2011/04/creating-html-with-jquery/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 00:33:43 +0000</pubDate>
		<dc:creator>Rob James</dc:creator>
				<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://robjam.es/?p=389</guid>
		<description><![CDATA[Recently I needed to manipulate some HTML for a page where the HTML did not exist in the DOM tree as yet. Or more specifically, I wanted to clone some existing HTML, manipulate it and then re-insert it to the document. Although JQuery has a great .clone(); method, all the examples talk about cloning and [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I needed to manipulate some HTML for a page where the HTML did not exist in the DOM tree as yet. Or more specifically, I wanted to clone some existing HTML, manipulate it and then re-insert it to the document.</p>
<p>Although JQuery has a great .clone(); method, all the examples talk about cloning and re-inserting without modifying;</p>
<p>ie/ given the follwing HTML,</p>
<p>[code language="html"]<br />
&lt;div class=&quot;group&quot;&gt;<br />
	&lt;div class=&quot;user&quot; id=&quot;1&quot;&gt;User name&lt;/div&gt;<br />
&lt;/div&gt;<br />
[/code]</p>
<p>you can do this;<br />
[code lang="js"]<br />
$('.user').clone().appendTo('.group');<br />
[/code]</p>
<p>But what if you want to do somethnig to your cloned object before re-inserting it into the DOM? Sure, with the above example, this can be quite straight forward, but other scenarios can be a little more complex.</p>
<p>I discovered that the best way to do thia is the following;</p>
<p>[code lang="js"]<br />
var $clone = $('.user').clone()<br />
$clone.attr('id','2')<br />
$clone.html(&quot;Other User&quot;);<br />
$clone.append(&quot;(User Title)&quot;);<br />
$('.group').append($clone);<br />
[/code]</p>
<p>Pretty straight forward, but the main gotcha, is how do you traverse this &#8216;in memory&#8217; DOM tree? For example $clone.$(&#8216;.someClass&#8217;) won&#8217;t work. And this is where the .find() function is your friend!</p>
<p>You can simply do;</p>
<p>[code lang="js"]<br />
$clone.find('.someClass').doSomething();<br />
[/code]</p>
]]></content:encoded>
			<wfw:commentRss>http://robjam.es/2011/04/creating-html-with-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

