Every year, as an exclusive through Agile Advice, Berteig Consulting offers a discount on training it is offering. This year, we are offering training in Toronto, Calgary and Ottawa and the discount is an amazing 20%! This discount is being offered to anyone who registers online before Sept. 20th, 2008 – use the coupon “Agile Advice Discount” in the notes field. Berteig Consulting sponsors the Agile Advice site.
Christian Gruber pointed out a great blog to me today: Lean Software Engineering. I’ve read a few of the articles and I like them. I don’t agree with every detail, but I’m pretty happy with what I see there. In particular, I really liked the article on using a Priority Filter. The idea of a priority filter is a great operational technique but it makes it difficult to clearly justify the cost-benefit of doing the work. Picking the highest priority item from a set of items that all have a negative return is still a bad way of working. The technique could easily be combined with an analytical assessment of the value of a piece of work relative to the cost of the team (and any capital costs).
One of my favorite books is Good to Great by Jim Collins. One of my other favorite books is Freakanomics by Steven Levitt. This article, From Good to Great … to Below Average, takes an interesting look at what has happened to the Good to Great companies in the intervening years. I found the comments to be particularly valuable to read.
Bob C. Martin (Uncle Bob to you and me) suggested, in his “quintessence” keynote at the Agile2008 conference that he had the perfect metric for code quality. Cyclomatic complexity and others were interesting mostly to those who invented them, etc. His answer was brilliant, and was easily measured during code reviews:
WTFs per minute
I love it. All you need is a counter and a stop-watch. Start code-review and start watch and start clicking anytime you see code that makes you say or think “What the F???”. This dovetails nicely with his original recommendation for a new statement in the agile manifesto: “Craftsmanship over Crap”.
The first day of the Agile 2008 Conference was fabulous! I’m working with five other great people including my wife, Melanie, my father, Garry, and three good friends: Paul, Travis and Laila. We have set up a beautiful booth designed by my brother, Alexei Berteig. Working at the booth has been a tiring yet exhilarating experience. Before the conference we received Boothmanship Training from The Portables. The people at The Portables have been excellent and I highly recommend them to anyone embarking on a booth display at a conference.
Today I delivered the first of my two presentations at the conference. The thirty minute experience report: “Extremely Short Iterations as a Catalyst for Effective Prioritization of Work” was well received. There were about 25 people in attendance and despite the short time for questions, there were some good ones. I enjoyed delivering the presentation and it was filmed for later publication on InfoQ. I also received highly positive feedback after the talk. On Thursday, I am giving a much more substantial presentation titled “Meta-Agile: Using Agile Methods to Deliver Agile Training“. This will be a three hour workshop in two parts: a 90 minute presentation, and then a 90 minute participatory patterns workshop. If you are a trainer or coach, I highly recommend attending this one!
I also ran into many friends… too many to list, in fact. It is surprising to me to see how many people I know in this community. There are over 1500 people at this agile conference, and I can’t walk more than 20 steps without running into someone I know. One other really cool thing is that everyone is commenting on how much they like the notebooks that were included in the conference bag – highly popular. In fact, three people have commented that it was the only useful thing in the bag… which is actually a bit of an exaggeration since the conference program was also in the bag and I suspect that it might be just a wee bit more useful Nevertheless, the feedback has been great.
Come check us out at our booth if you are at the conference – it’s unmistakable – strong red backdrop with the Berteig Consulting logo across the top. We also have a great raffle so be sure to drop off your raffle entry which is found in your notebook pocket.
This post is a little geeky and technical and product-related for AgileAdvice, and is a shameless self-promotion. Nevertheless, since testability, test-driven-development, and incremental design are non-exclusive sub-topics of Agile, I though I’d report this here anyway.
Many developers use the Dependency Injection and Inversion of Control (IoC) patterns through such IoC containers as Spring, Hivemind, Picocontainer, and others. They have all sorts of benefits to testability, flexibility, etc. that I won’t repeat here, but can be read about here, here, and here. A great summary of the history of “IoC” can be found here. J2ME developers, however, especially those on limited devices that use the CLDC configuration of J2ME, cannot use the substantial number of IoC/DI containers out there, because they nearly all rely on reflection. These also often make use of APIs not present in the CLDC – APIs which could not easily be added. Lastly there’s a tendency among developers of “embedded software” to be very suspicious of complexity.
In working out some examples of DI as part of a testability workshop at one of my clients, I whipped up a quick DI container, and being the freak that I am, hardened it until it was suitable for production, because I hate half-finished products. So allow me to introduce the Israfil Micro Container. (That is, the Container from the Israfil Micro project). As I mention in the docs, “FemtoContainer” just was too ridiculous, and this container is smaller than pico-container. The project is BSD licensed, and hosted on googlecode, so source is freely available and there’s an issue/feature tracker, yadda yadda.
Essentially I believe that people working on cellphones and set-top boxes shouldn’t be constrained out of some basic software design approaches – you just have to bend the design approach to fit the environment. So hopefully this is of use to more than one of my clients. It currently supports an auto-wiring registration, delayed object creation (until first need), and forthcoming are some basic lifecycle support, and a few other nicities. It does not use reflection (you use a little adapter for object creation instead), and performs quicker than pico-container. Low, low overhead. It’s also less than 10 classes and interfaces (including the two classes in the util project). It’s built with Maven2, so you can use it in any Maven2-built project with ease, but of course you can always also just download the jar (and the required util jar too). Enjoy…
P.S. There are a few other bits on googlecode that I’m working on in the micro-zone. Some minimalist backports of some of java.lang.concurrency (just the locks), as well as some of the java.util.Collections stuff. Not finished, but also part of the googlecode project.