<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-8918867</atom:id><lastBuildDate>Sun, 15 Nov 2009 04:50:18 +0000</lastBuildDate><title>Ideally, I Shouldn't Try to Live in an Ideal World</title><description></description><link>http://www.trontos.com/dsouth/blog/</link><managingEditor>noreply@blogger.com (Doug)</managingEditor><generator>Blogger</generator><openSearch:totalResults>110</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-8545999348645725287</guid><pubDate>Thu, 26 Mar 2009 04:35:00 +0000</pubDate><atom:updated>2009-03-26T14:41:01.594+10:00</atom:updated><title>Think Different</title><description>Personally, I'd rank things differently then the ranking given in the previous post.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Revenue for the quarter is as expected&lt;/li&gt;&lt;li&gt;Revenue for the quarter exceeds expectations by 10%&lt;/li&gt;&lt;li&gt;Revenue for the quarter are short of expectations by 10%&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Revenue for the quarter exceeds expectations by 50%&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Revenue for the quarter are short of expectations by 50%&lt;/li&gt;&lt;/ol&gt;And I'd only classify the first as success. They key isn't how much was achieved as much as how close to expecations was the result. To me, that's the difference between a short term and a long term view.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-8545999348645725287?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2009/03/think-different.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-2368345195898346209</guid><pubDate>Tue, 24 Mar 2009 22:49:00 +0000</pubDate><atom:updated>2009-03-25T11:31:42.591+10:00</atom:updated><title>Rating Outcomes</title><description>Let's for a moment say that you run a business (if you don't already). You have forecasted your revenue for the quarter. Now consider the following scenarios:&lt;div&gt;&lt;ol&gt;&lt;li&gt;Revenue for the quarter exceeds expectations by 50%&lt;/li&gt;&lt;li&gt;Revenue for the quarter exceeds expectations by 10%&lt;/li&gt;&lt;li&gt;Revenue for the quarter is as expected&lt;/li&gt;&lt;li&gt;Revenue for the quarter are short of expectations by 10%&lt;/li&gt;&lt;li&gt;Revenue for the quarter are short of expectations by 50%&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;I'm willing to bet that if I asked you to rank these scenarios from best to worst, you'd rank them in the order I've presented them. I'm also willing to bet that you'd classify 1-3 as successes and 4-5 as failures. Feel free to comment if I'm wrong.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-2368345195898346209?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2009/03/rating-outcomes.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-6011453779804504148</guid><pubDate>Tue, 24 Mar 2009 01:50:00 +0000</pubDate><atom:updated>2009-03-25T09:42:57.187+10:00</atom:updated><title>Expectations</title><description>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A failure can be defined as when expectations are not met. The less met the greater the failure. Conversely, success is seen as meeting or exceeding expectations. One way to avoid failure is not to have expectations. But then it is very difficult to imagine a worthwhile endeavor that does not have some form of attached expecations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So the really short answer is that it is impossible to avoid failures.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Update: That is, it is impossible to &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;never&lt;/span&gt; fail. There will always be expectations and success and failure is judged based on those expectations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-6011453779804504148?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2009/03/expectations.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-3968091116066513127</guid><pubDate>Mon, 23 Mar 2009 06:56:00 +0000</pubDate><atom:updated>2009-03-23T16:59:06.805+10:00</atom:updated><title>Failure</title><description>The thing that has been bouncing about my head for the last few days is,&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Is is possible to avoid failure?&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;The short answer is no.&lt;br /&gt;&lt;br /&gt;The slightly longer, but still short answer is: no, depends on your attitude and yes.&lt;br /&gt;&lt;br /&gt;To be continued...&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-3968091116066513127?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2009/03/failure.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-1213722990100654783</guid><pubDate>Fri, 20 Mar 2009 02:06:00 +0000</pubDate><atom:updated>2009-03-20T12:09:53.902+10:00</atom:updated><title>Good Teams</title><description>While watching a bit of basketball the other day, I heard a good description of the difference between a good team and a bad team.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A good team accepts that they worked together and are responsible for the good and the bad that happens to them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A bad team is made up of individuals that take credit for the good and blame others for the bad. (Shall we call them egotistical finger pointers?)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-1213722990100654783?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2009/03/good-teams.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-8409869361562020069</guid><pubDate>Wed, 18 Mar 2009 22:03:00 +0000</pubDate><atom:updated>2009-03-19T08:05:13.184+10:00</atom:updated><title>Blame</title><description>While I'm quoting people...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Verdana; font-size: 13px; line-height: 16px; "&gt;It's not who's wrong, it's what's wrong. It's not who's right, it's what's right." - &lt;span class="Apple-style-span" style="font-size: 10px; font-weight: bold; letter-spacing: 1px; text-transform: uppercase; "&gt;&lt;a href="http://gotboondoggle.blogspot.com/"&gt;MIKE WROBLEWSKI&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-8409869361562020069?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2009/03/blame.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-5160649573662056726</guid><pubDate>Tue, 17 Mar 2009 00:27:00 +0000</pubDate><atom:updated>2009-03-17T10:30:57.542+10:00</atom:updated><title>Responsibility</title><description>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Just got back from a ThoughtWorks' Quarterly Technology Briefing and was pleasantly surprised to see &lt;a href="http://jchyip.blogspot.com/"&gt;Jason Yip&lt;/a&gt; there. Best anology from Jason:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Not taking responibility for a problem is like saying the hole is not on your side of the boat.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-5160649573662056726?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2009/03/responsibility.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-8506131088411727899</guid><pubDate>Tue, 03 Feb 2009 21:15:00 +0000</pubDate><atom:updated>2009-02-04T07:26:09.329+10:00</atom:updated><title>Title Change</title><description>I've changed the title of this blog, because I find it the old title (Experiments in Sofware Design) isn't so much what I'm concerned with now days. When I started this blog, it was more about design and practices. Now I find myself thinking about things more abstracted from programming, yet still very applicable to make sure that programming happens properly. Hence the new name...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-8506131088411727899?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2009/02/title-change.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-1496332977579854391</guid><pubDate>Wed, 15 Oct 2008 22:55:00 +0000</pubDate><atom:updated>2008-10-16T09:23:28.797+10:00</atom:updated><title>Debugging in Eclipse across different JRE versions</title><description>From time to time, we get issues that only occur with a particular version of the JRE. Setting a break point and then stepping into the JRE sources proved to be troublesome as the mapping between which JRE was being used and the JRE source was not correct. Fortunately, I've recently discovered the issue. While the runtime JRE was set to one version, the actual classpath had a different JRE. The key is to remember to &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;also&lt;/span&gt; change the classpath to use the same JRE as the runtime JRE. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I keep forgetting this, so basically, note to self...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-1496332977579854391?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2008/10/debugging-in-eclipse-across-different.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-5221768955432545813</guid><pubDate>Sat, 31 May 2008 03:17:00 +0000</pubDate><atom:updated>2008-05-31T21:39:03.210+10:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>JAOO</category><category domain='http://www.blogger.com/atom/ns#'>ErikMeijer</category><title>Brisbane JAOO - Conference Day 2 - Morning Keynote</title><description>The morning keynote was given by Erik  Meijer,&lt;em&gt;Why Functional Programming (Still) Matters&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Creating software is all about abstraction, which is reducing information and retaining only relevant information. Unfortunately  the industry has been abstracting the wrong details for the last 50 years...&lt;br /&gt;&lt;br /&gt;There are 5 Dilemmas:&lt;br /&gt;&lt;br /&gt;1) Useful versus Useless&lt;br /&gt;&lt;br /&gt;I'm not sure I really understood the point Erik was trying to make here, but it was along the lines of the things that makes programs useful are the things that make them vulnerable to misuse, such as data as code and component interaction leads to &lt;a href="http://en.wikipedia.org/wiki/Cross-site_scripting"&gt;XSS&lt;/a&gt;, buffer overruns, virus and &lt;a href="http://en.wikipedia.org/wiki/Blue_Screen_of_Death"&gt;BSOD&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;2) Rich versus Reach&lt;br /&gt;&lt;br /&gt;Flash, Silverlight and Java are rich (proprietary) whereas HTTP, HTML and JavaScript have reach (open standards). Whatever :)&lt;br /&gt;&lt;br /&gt;3) Local versus Remote&lt;br /&gt;&lt;br /&gt;Local is easy and remote hard. Local is what is taught in school. Remote is interesting and more like real life development. Erik defined attributes of local as:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;compositional&lt;/li&gt;&lt;li&gt;sequential deterministic&lt;/li&gt;&lt;li&gt;implicit&lt;/li&gt;&lt;li&gt;synchronous&lt;/li&gt;&lt;li&gt;homogenous&lt;/li&gt;&lt;/ul&gt;and remote as :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;concurrent&lt;/li&gt;&lt;li&gt;nondeterministic&lt;/li&gt;&lt;li&gt;explicit&lt;/li&gt;&lt;li&gt;asynchronous&lt;/li&gt;&lt;li&gt;heterogenous&lt;/li&gt;&lt;li&gt;noncompositional&lt;/li&gt;&lt;/ul&gt;4) Change versus Inertia&lt;br /&gt;&lt;br /&gt;Geeks like to build cool things. People just want to get things done. Marketing tries to make people believe that the cool new things that the geeks built are the things they need to get stuff done.&lt;br /&gt;&lt;br /&gt;Geeks p(success) = F(10 X improvement * Moore's Law)&lt;br /&gt;People p(success) = F(perceived crisis / perceived pain of adoption)&lt;br /&gt;&lt;br /&gt;see "&lt;a href="http://www.amazon.com/Change-Function-Technologies-Others-Crash/dp/1591841321"&gt;The Change Function&lt;/a&gt;"&lt;br /&gt;&lt;br /&gt;The fifth dilemma seems to be Erik's main point...&lt;br /&gt;&lt;br /&gt;5) Pure versus Impure&lt;br /&gt;&lt;br /&gt;Erik gives an example of some code (in C#?) that does a couple of queries including output that outputs in an order that is non-intuitive. The issue is that the code can be read as local yet the code is remote and the side effect of this is that things don't occur in the order that they have been coded.&lt;br /&gt;&lt;br /&gt;Another couple of examples (C# again?) shows an unchecked exception happening beyond where it would appear it should occur and a file being disposed before it is used, again local versus remote.&lt;br /&gt;&lt;br /&gt;The main point of all of these examples is that there are side effects occurring that are not obvious from the code, i.e. the relevant information has been abstracted away.&lt;br /&gt;&lt;br /&gt;Erik continues highlighting side effects by stating that even object creation has side effects, i.e. two different heap spaces are set aside for two different objects of the same class.&lt;br /&gt;&lt;br /&gt;Code has side effects which are not obvious from reading the code, that is the side effects of code are as important as the parameters and the return value.  But you can't get rid of side effects.&lt;br /&gt;&lt;br /&gt;Erik states that Fundamentalist Functional Programming is the answer (pure functions with explicit effects) where a functional language is defined as a language where functions are first-class citizens and given a function and a set of parameters, the function returns the same value ever time it is called with the set of parameters (equality-preserving, i.e no side effects). I believe it is here that he also makes the point that parameter evaluation should be lazy, but I have to admit that where this was mentioned or the importance of it was lost to me.&lt;br /&gt;&lt;br /&gt;Monads allow the declaration of a functions side effects and he gives a few examples of what this means the mapping to and from functions with monads.&lt;br /&gt;&lt;br /&gt;Then Erik considers whether or not normal programmers can understand what is required and can functional programs interact with legacy code. He gives some examples though all a little bit underwhelming in convince me that either is possible without much pain and gnashing of teeth.&lt;br /&gt;&lt;br /&gt;He concludes by giving a litmus test for determining whether or not a language is a fundamental functional language and suggests buying a Haskel book and helping to persuade MS to produce a fundamental functional language.&lt;br /&gt;&lt;br /&gt;While I found the talk interesting, it was rather unconvincing in its final conclusions for me. I'm in no rush to run out and buy yet another language book and I doubt I'll ever tell anyone what language they should implement. Erik's real crisis is just a perceived crisis and I doubt the industry would change to Haskel anytime soon based on the evidence from this talk. In the end, this talk just seems like an intellectual exercise to get people to think...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-5221768955432545813?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2008/05/brisban-jaoo-conference-day-2-morning.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-7463382614618405890</guid><pubDate>Fri, 30 May 2008 10:05:00 +0000</pubDate><atom:updated>2008-05-31T13:17:36.831+10:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>JAOO</category><title>Brisbane  JAOO - Conference Day 3</title><description>Day three, pretty much the same as day 2, which is a good thing. I'll follow up later, but two snipets of the day.&lt;br /&gt;&lt;br /&gt;Bob Martin talking about Clean Code: "Code in a try block is living in a fantasy world where nothing goes wrong."&lt;br /&gt;&lt;br /&gt;End of the day chatting with &lt;a href="http://jaoo.com.au/brisbane-2008/speaker/Erik+Meijer"&gt;Erik&lt;/a&gt;, &lt;a href="http://jaoo.com.au/brisbane-2008/speaker/Gregor+Hohpe"&gt;Gregor&lt;/a&gt;, &lt;a href="http://jaoo.com.au/brisbane-2008/speaker/Patrick+Linskey"&gt;Patrick&lt;/a&gt; and &lt;a href="http://jaoo.com.au/brisbane-2008/speaker/Joe+Albahari"&gt;Joe&lt;/a&gt; and then being invited out for dinner! (Sadly I was too tired to take up the offer :( ).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-7463382614618405890?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2008/05/brisbane-jaoo-conference-day-3.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-8958241917647842272</guid><pubDate>Thu, 29 May 2008 10:45:00 +0000</pubDate><atom:updated>2008-05-30T20:05:47.476+10:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>JAOO</category><title>Brisbane  JAOO - Conference Day 2</title><description>Wow, what a wonderful blur of a day it's been. Reflecting back on the day feels like looking over a few days in time so much has happened. Two interesting and informative keynotes and six sessions all with good knowledge to take away.&lt;br /&gt;&lt;br /&gt;If I had to pick one session as a favorite, it would have to be Erik Dörnenburg's and Gregor Hohpe's &lt;a href="http://jaoo.com.au/brisbane-2008/presentation/Software+Visualization+and+Model+Generation"&gt;Software Visualization and Model Generation&lt;/a&gt;. Simple ideas that can have a big impact on helping to manage large amounts of data. Basically they presented a simple pattern for using different tools to help visualize data. I'll post more details on this and other presentation over the next week or so.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-8958241917647842272?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2008/05/brisban-jaoo-conference-day-2.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-2520690488994936703</guid><pubDate>Wed, 28 May 2008 09:41:00 +0000</pubDate><atom:updated>2008-05-30T20:05:15.179+10:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>JAOO</category><title>Brisbane JAOO - Tutorials Day 1</title><description>So today was my first day at &lt;a href="http://jaoo.com.au/brisbane-2008/conference/"&gt;JAOO&lt;/a&gt;. And I loved it. I attended two vey good tutorials: &lt;a href="http://www.wirfs-brock.com/"&gt;Rebbeca Wirfs-Brock&lt;/a&gt;'s The Art of Telling Your Design Story and &lt;a href="http://www.objectmentor.com/omTeam/martin_r.html"&gt;"Uncle" Bob&lt;/a&gt;'s "Advanced Principles of Agile Object Oriented Class and Component Design. Both presenters were engaging and definitely knew their subjects.&lt;br /&gt;&lt;br /&gt;From the first tutorial, the key point was figuring out what to remove from a story to help more effectively get your point across to your audience. There were a lot of good points across the tutorial and good information that can be used beyond just telling a design story.&lt;br /&gt;&lt;br /&gt;I really did enjoy the second tutorial. Bob is animated, full of energy and happy to digress slightly into entertaining and informative rants. He's completely shattered (in a good way) my view on OO modeling and the "&lt;a href="http://en.wikipedia.org/wiki/Is-a"&gt;is-a&lt;/a&gt;" and "&lt;a href="http://en.wikipedia.org/wiki/Has-a"&gt;has-a&lt;/a&gt;" relationships with excellent concrete examples. He gave us solid categorizations for defining problems with software designs. He made us reconsider what OO really means and I now have some interesting metrics to take back to our team to analyze the state of our codebase. Not to mention the design patterns he has for encouraging good design and fending off software rot. If I have some time and motivation in the future, I'll go into a lot more detail of what I learned from this tutorial.&lt;br /&gt;&lt;br /&gt;Oh, and being in the same room with the likes of "Uncle" Bob, &lt;a href="http://www.michaelfeathers.com/"&gt;Micheal Feathers&lt;/a&gt; and Martin Fowler, I'm really enjoying it...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-2520690488994936703?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2008/05/brisban-jaoo-tutorials-day-1.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-1380272799809341071</guid><pubDate>Tue, 27 May 2008 06:13:00 +0000</pubDate><atom:updated>2008-05-27T20:45:15.060+10:00</atom:updated><title>Better than simian-check</title><description>&lt;a href="http://www.redhillconsulting.com.au/products/simian/"&gt;Simian&lt;/a&gt; is great for helping to maintain code quality and enforcing the &lt;a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;DRY&lt;/a&gt; principle, especially in a green field project. And while not as helpful, it can help to implement the idea of "making things no worse" in a brown field project. However, its goodness only extends in one dimension for a two dimensional problem.&lt;br /&gt;&lt;br /&gt;A team can mandate that the number of duplications within the codebase shall be no more than some threshold. That's one dimension. But what about duplications that already occur below the threshold? simian-check does nothing to ensure that the level of duplication below the threshold doesn't entropy. Simian is good for legacy codebases, but there is plenty of room for improvement.&lt;br /&gt;&lt;br /&gt;This is something I've been mildly aware of for several years now, but I haven't been actively trying to find a way to solve it until recently. I had some slack time and was feverishly working at refactoring our legacy codebase to reduce our simian-check threshold another notch. Having reduced the count by one, I took a quick survey of what would be required to reduce it by yet another notch. At that moment I half panicked half had a flash of insight (most like I had the insight quickly followed by a brief moment of terror).&lt;br /&gt;&lt;br /&gt;If you've never had to play in a large legacy codebase, you may not have ever run into the situation I just found myself. Since simian had not been running on this system, there was a lot of duplication. The more the threshold was lowered for the simian-check, the more work (i.e. more duplications to be removed) was required to lower the threshold one more notch. And the increase in work is more than linear.&lt;br /&gt;&lt;br /&gt;My insight was this; I had a finite amount of time in which to lower the duplication count. If I couldn't do &lt;span style="font-weight: bold;"&gt;all&lt;/span&gt; off the work within that time, the threshold would remain the same. It was quite possible that I could remove half the duplications and then return sometime later and find that I had double the work to do. While that's possible, it's not very probably. I had seen the second dimension to the simian-check. My fear from that initial thought got the wheels in my head in motion.&lt;br /&gt;&lt;br /&gt;The solution is very simple. The simian-report is a an xml file, so I wrote a SAX2 &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/org/xml/sax/helpers/DefaultHandler.html"&gt;DefaultHandler&lt;/a&gt; that was able to parse the number of duplications at the different threshold levels. Putting this into a trivial ant task then gave us a task to help make things no worse even at levels below what the simian-check was doing! Within the first week, the new legacy-check was breaking the build (where the simian-check would never have) and focusing the teams attention on how to make things better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-1380272799809341071?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2008/05/better-than-simian-check.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-5776510491818116263</guid><pubDate>Sun, 04 May 2008 01:39:00 +0000</pubDate><atom:updated>2008-05-04T11:49:50.580+10:00</atom:updated><title>Scala</title><description>I've been spending a bit of my spare time learning &lt;a href="http://www.scala-lang.org"&gt;Scala&lt;/a&gt;. I like it because:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It compiles to Java bytecode&lt;/li&gt;&lt;li&gt;It can use any of the Java API's - the years of investment I have in them translates seamlessly to Scala development and I'm productive almost immediately&lt;/li&gt;&lt;li&gt;Functions are first class citizens of the language allowing for &lt;a href="http://en.wikipedia.org/wiki/Higher-order_function"&gt;higher order functions&lt;/a&gt; leading to a more expressive language&lt;/li&gt;&lt;/ol&gt;It has a some other benefits, but I haven't fully learned the  language just yet, so it's hard to say I like it because of things I haven't experienced.&lt;br /&gt;&lt;br /&gt;The main drawback at the moment is lack of IDE support. I'm using the scala eclipse plugin, but it is primitive compared to the Java support I'm used to in eclipse.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-5776510491818116263?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2008/05/scala.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-5132126214625342088</guid><pubDate>Tue, 29 Apr 2008 00:57:00 +0000</pubDate><atom:updated>2008-04-29T12:17:12.772+10:00</atom:updated><title>The quality of the code you write today...</title><description>... will affect your ability to write quality code for the new features you need tomorrow.&lt;br /&gt;&lt;br /&gt;If you haven't been writing quality code, how can you expect to write new code with any degree of quality? I hypothesize that the affect of this isn't linear, but exponential.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-5132126214625342088?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2008/04/quality-of-code-you-write-today.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-7239579255856359282</guid><pubDate>Mon, 28 Apr 2008 10:22:00 +0000</pubDate><atom:updated>2008-04-28T20:28:55.877+10:00</atom:updated><title>No difference between permanent and contracting...</title><description>I started out contracting for a long time until eventually moving into a permanent position. At the time, on reflecting on everything, I couldn't see any major difference between the two. I've always maintained there isn't a big difference in the long run.&lt;br /&gt;&lt;br /&gt;But there is one thing I've just started to realize that I miss. That's the downtime (when there is some) between jobs. Now I take holidays, and even though I know I'll still have a job when it is done, I don't have the time to learn new technology like I would during downtime.&lt;br /&gt;&lt;br /&gt;Holidays are for de-stressing and catching up with family. Downtime was the time to re-skill and explore. Or more likely, I had more free time to develop my professional skills and interests.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-7239579255856359282?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2008/04/no-difference-between-permanent-and.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-4804101230656737158</guid><pubDate>Mon, 14 Apr 2008 09:59:00 +0000</pubDate><atom:updated>2008-04-14T20:18:20.260+10:00</atom:updated><title>Ironic</title><description>Seth &lt;a href="http://sethgodin.typepad.com/seths_blog/2008/04/the-wealthy-g-1.html"&gt;makes a interesting point&lt;/a&gt; about something I've noticed for a long time. The main point that I find of value is:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;It's just too long a ramp up time, too frustrating and too uncertain to be the best path to make a living.&lt;/span&gt;&lt;/blockquote&gt;But this applies to more than just writing a blog.&lt;br /&gt;&lt;br /&gt;I believe (and live by the idea) that only the people truly passionate about what they do seem to be the ones that do the best. The ones that are famous/wealthy/successful are the ones that didn't set out to be famous/wealthy/successful. The passion gets you over the ramp up time, the frustration and the uncertainty. And most importantly, the passion gives you the drive to focus on doing what is best for your passion and not necessarily for you ego.&lt;br /&gt;&lt;br /&gt;Personally, I'm passionate about programming to provide value. I'm passionate about quality. I'm passionate about eliminating waste. I'm passionate about flow. I'm passionate about chasing perfection.&lt;br /&gt;&lt;br /&gt;And I do love irony at times...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-4804101230656737158?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2008/04/ironic.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-2051687844478224207</guid><pubDate>Thu, 10 Apr 2008 02:59:00 +0000</pubDate><atom:updated>2008-04-10T13:03:49.058+10:00</atom:updated><title>What to do...</title><description>Now that I've got the Google Apps account, I'm struggling a bit about what to do with it. I thought about writing a blog app and blogging to that as well, but &lt;a href="http://bret.appspot.com/entry/experimenting-google-app-engine"&gt;someone&lt;/a&gt; already beat me to that. I have a few ideas, but they are all incomplete and seem to serve no useful purpose. I'm open to suggestions (hint, hint, comment, hint, hint).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-2051687844478224207?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2008/04/what-to-do.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-2193123550491103177</guid><pubDate>Thu, 10 Apr 2008 02:52:00 +0000</pubDate><atom:updated>2008-04-10T12:59:17.451+10:00</atom:updated><title>Learning Python</title><description>Thanks to the Google Apps account, I'm now learning Python (to some extent). The first important task when learning a new language is learning to read errors. After a few, I think I know what the interpreter is trying to tell me when it's not happy. But the first time is always the funnest.&lt;br /&gt;&lt;br /&gt;As a complete Python newbie, I initially missed the difference between:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class="kwd"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ"&gt;MainPage&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;webapp&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="typ"&gt;RequestHandler&lt;/span&gt;&lt;span class="pun"&gt;):&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span class="kwd"&gt;def&lt;/span&gt;&lt;span class="pln"&gt; get&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;self&lt;/span&gt;&lt;span class="pun"&gt;):&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;   self&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;response&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;headers&lt;/span&gt;&lt;span class="pun"&gt;[&lt;/span&gt;&lt;span class="str"&gt;'Content-Type'&lt;/span&gt;&lt;span class="pun"&gt;]&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str"&gt;'text/plain'&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;   self&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;response&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="kwd"&gt;out&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;write&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="str"&gt;'Hello, webapp World!'&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd"&gt;def&lt;/span&gt;&lt;span class="pln"&gt; main&lt;/span&gt;&lt;span class="pun"&gt;():&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt; application &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; webapp&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="typ"&gt;WSGIApplication&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;                                      &lt;/span&gt;&lt;span class="pun"&gt;[(&lt;/span&gt;&lt;span class="str"&gt;'/'&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ"&gt;MainPage&lt;/span&gt;&lt;span class="pun"&gt;)],&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;                                      debug&lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="kwd"&gt;True&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt; wsgiref&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;handlers&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="typ"&gt;CGIHandler&lt;/span&gt;&lt;span class="pun"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;run&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;application&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;and&lt;pre&gt;&lt;span class="kwd"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ"&gt;MainPage&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;webapp&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="typ"&gt;RequestHandler&lt;/span&gt;&lt;span class="pun"&gt;):&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span class="kwd"&gt;def&lt;/span&gt;&lt;span class="pln"&gt; get&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;self&lt;/span&gt;&lt;span class="pun"&gt;):&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;   self&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;response&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;headers&lt;/span&gt;&lt;span class="pun"&gt;[&lt;/span&gt;&lt;span class="str"&gt;'Content-Type'&lt;/span&gt;&lt;span class="pun"&gt;]&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str"&gt;'text/plain'&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;   self&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;response&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="kwd"&gt;out&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;write&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="str"&gt;'Hello, webapp World!'&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd"&gt;  def&lt;/span&gt;&lt;span class="pln"&gt; main&lt;/span&gt;&lt;span class="pun"&gt;():&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;   application &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; webapp&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="typ"&gt;WSGIApplication&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;                                        &lt;/span&gt;&lt;span class="pun"&gt;[(&lt;/span&gt;&lt;span class="str"&gt;'/'&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ"&gt;MainPage&lt;/span&gt;&lt;span class="pun"&gt;)],&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;                                        debug&lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="kwd"&gt;True&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;   wsgiref&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;handlers&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="typ"&gt;CGIHandler&lt;/span&gt;&lt;span class="pun"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;run&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;application&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;10 minutes into the lexical spec and not only did I get the error here, I got a far better and first hand understand of Python. Now the task is to keep learning...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-2193123550491103177?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2008/04/learning-python.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-6396063866439475827</guid><pubDate>Wed, 09 Apr 2008 08:11:00 +0000</pubDate><atom:updated>2008-04-09T18:14:52.755+10:00</atom:updated><title>Google Apps</title><description>Don't know if I was looking or Google has been generous, but I've got a google apps account. The reaction was, "Quick, grab a new toy." Followed by (ask requesting it), "Um, what am I going to do with this?!?". Apparently, the first thing I'm going to do is learn Python (which doesn't appear to difficult, apart from the lack of semicolons :)).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-6396063866439475827?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2008/04/google-apps.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-4040851132308562315</guid><pubDate>Thu, 06 Dec 2007 10:34:00 +0000</pubDate><atom:updated>2007-12-06T20:43:59.410+10:00</atom:updated><title>Estimations - Best, Expected and Worst</title><description>One of these posts I'll stop mentioning Dave Thomas, but until then...&lt;br /&gt;&lt;br /&gt;Another thing that he mentioned was how to give estimates. Nobody should give a single point estimate. No risk factor is involved. But given a best case, expected case and worst case, it is quite easy to see what is risky and what isn't. With this in mind, we spent quite a few hours today giving high level estimates for our current work using these three points. (Work that we hadn't estimated but had planned to sometime this week. Isn't it nice how things come together sometimes...) I think everyone got something good out of it and our estimates feel a bit more accurate and considered.&lt;br /&gt;&lt;br /&gt;To be honest, as a developer, I feel horrible when I miss an estimate, whether it is longer &lt;span style="font-weight: bold;"&gt;or &lt;/span&gt;shorter than expected. But with three point estimates, as long as we hit the range and are good about being close to our expected I don't think I'll mind missing our expected estimate (which is the only one we gave in the past).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-4040851132308562315?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2007/12/estimations-best-expected-and-worst.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-6471658769468216826</guid><pubDate>Wed, 05 Dec 2007 11:19:00 +0000</pubDate><atom:updated>2007-12-05T21:23:12.655+10:00</atom:updated><title>Feeling the Rhythm</title><description>When we've been writing tests lately I've caught us occasionally not feeling the rhythm. It's more obvious now and I'm actually stopping and looking for a red bar. And I haven't found it on a at least 2-3 times over the last few days.&lt;br /&gt;&lt;br /&gt;A test without the Red Bar is a waste of everyone's time and instills false confidence/trust that will get shattered eventually.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-6471658769468216826?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2007/12/feeling-rhythm.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-7244266838124808877</guid><pubDate>Wed, 05 Dec 2007 11:11:00 +0000</pubDate><atom:updated>2007-12-05T21:18:22.969+10:00</atom:updated><title>Dave Thomas sound bites</title><description>Dave Thomas (the &lt;a href="http://www.davethomas.net/"&gt;SmallTalk&lt;/a&gt; one and not the &lt;a href="http://pragdave.pragprog.com/"&gt;Ruby&lt;/a&gt; one) gave a very interesting presentation tonight with a lot of good information in it. Two things really stood out for me:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Best Wrong Way&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Stories without Acceptance Tests are wishes (I may be paraphrasing slightly)&lt;/li&gt;&lt;/ol&gt;Best Wrong Way means that today we are doing our Best Wrong Way and tomorrow we will find a better Wrong Way. There is no Best Right Way (just like there are no Silver Bullets). A lot like focusing on making things no worse instead of trying to always make things better.&lt;br /&gt;&lt;br /&gt;I think wishes speaks for itself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-7244266838124808877?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2007/12/dave-thomas-sound-bites.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8918867.post-7866468187003696392</guid><pubDate>Tue, 04 Dec 2007 21:38:00 +0000</pubDate><atom:updated>2007-12-05T07:51:26.640+10:00</atom:updated><title>Almost an Agile conference in Brisbane</title><description>I mentioned Agile conferences in Brisbane &lt;a href="http://www.trontos.com/dsouth/blog/2007/01/xp-conference-in-brisbane.html"&gt;before&lt;/a&gt; (specifically the lack of), but now it looks like there will be &lt;a href="http://jaoo.com.au/brisbane/conference/"&gt;something&lt;/a&gt; with possibly an Agile track at the end of May, 2008. Thanks to Dave Thomas (not &lt;a href="http://pragdave.pragprog.com/"&gt;the pragmatic one&lt;/a&gt;, &lt;a href="http://www.davethomas.net/"&gt;the other one&lt;/a&gt; :) ), we'll be seeing a major conference with a definite technical focus in Brisbane. Yay! Details of speakers and tracks should be updated some time in January.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8918867-7866468187003696392?l=www.trontos.com%2Fdsouth%2Fblog%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://www.trontos.com/dsouth/blog/2007/12/almost-agile-conference-in-brisbane.html</link><author>noreply@blogger.com (Doug)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item></channel></rss>