Tuesday, December 11, 2007

ASP.NET MVC is here

ScottGu has announced the CTP release of ASP.NET 3.5 Extensions. This is great news for ALT.NET and really has made my week. As regular readers might realise the key part of this release for me is the MVC (Model-View-Controller) framework for ASP.NET.
ASP.NET MVC: This model view controller (MVC) framework for ASP.NET provides a structured model that enables a clear separation of concerns within web applications, and makes it easier to unit test your code and support a TDD workflow. It also helps provide more control over the URLs you publish in your applications, and more control over the HTML that is emitted from them.”
I think this finally gives ASP.NET developers some much needed flexibility. The guys at Microsoft are taking pains to point out this is not a replacement for the existing WebForms model, but they point to the following reasons to use the new framework:
  • It allows developers to use the MVC pattern with ASP.NET more cleanly than ever before.
  • It makes it easier to implement RESTful (Representational State Transfer) systems and to control your URLs using ASP.NET
  • The MVC pattern allows for easier unit testing of business logic behind pages (now in controllers) and therefore helps promote the use of Test-Driven Development with ASP.NET.
I have some personal reasons for looking forward to this framework that may be too politically sensitive for the ASP.NET guys to admit to:
  • This kills off the one form per page restriction, allowing for XHTML that more closely matches the functionality of the page.
  • No more viewdata is a pain, but it also means that ASP.NET developers can now more easily incorporate other client-side frameworks into their applications (e.g. Yahoo! User Interface Library, Script.aculo.us, Prototype, etc)
  • Ruby on Rails is looking a whole lot less attractive as ASP.NET MVC offers much of the same clarity of design whilst leveraging my existing ASP.NET skills.
I will probably devote a few more blog posts to exploring this interesting ASP.NET development, so feel free to let me know (via the comments) what you might be most interested in knowing about.

Monday, December 10, 2007

Elcom is hiring

My workplace (Elcom Technology) is looking to hire two junior .NET developers who are looking at working in a medium sized shop (35 staff overall, with 14 developers) and looking to get mentored and grown to become gurus in their own right.

The job ad is on Seek. Please feel free to apply or mention it to your friends.

This is one of the best places I've ever worked at, and there is a great bunch of experienced developers here you can learn from. This might be the start of your own personal walk on The Long Road:
To become truly good at programming is a life's work, an ongoing enterprise of learning and practicing.
Ron Jeffries

Wednesday, November 21, 2007

Yahoo! Pipes rocks without Flash or Silverlight

Roy Osherove is talking lots about Yahoo! Pipes and they look very interesting – here is a screenshot of one I was in the middle of creating (you can't see it, but my mouse pointer was a hand-shape holding the bottom end of that curved pipe):

The idea behind it is an interesting one, bringing Unix command line pipes (|) to a web-based GUI:
“Pipes is a powerful composition tool to aggregate, manipulate, and mashup content from around the web.

Like Unix pipes, simple commands can be combined together to create output that meets your needs:
  • combine many feeds into one, then sort, filter and translate it.
  • geocode your favorite feeds and browse the items on an interactive map.
  • power widgets/badges on your web site.
  • grab the output of any Pipes as RSS, JSON, KML, and other formats.”
Here are some more screenshots, firstly me choosing to add a sort-by clause to the results:

Lastly the final results of the pipe, showing a visual representation of the shape, plus the details of what was actually used, and the results in the main panel:

I've published this pipe and given it a nice name so you can see the results yourself.

This is a great example of using a dynamic HTML interface to do something useful on the web. Let me repeat that a different way - there is no Flash/Silverlight used here!

Tuesday, November 20, 2007

Visual Studio 2008 and .NET 3.5 released!

Microsoft have given us developers an early Christmas present by releasing Visual Studio 2008 and .NET Framework v3.5 today! See Scott Guthrie's post about the release for full details.

The bits I'm waiting for the most are the VB.NET improvements, particularly Lambda Expressions which might give us the ability to use some of the niftier BDD test framework's features in VB rather than needing to write executable specs in C#. The new web designer interface and CSS/JavaScript improvements will be welcome ones too. Then there are other features that look nice, but I am less excited about, LINQ being foremost of those.

The piece I am most eagerly awaiting is not yet released, that is the ASP.NET MVC framework, which will give us .NET developers the same sort of simple and clean structure Ruby on Rails developers have been enjoying.

Wednesday, October 10, 2007

Chad Fowler's Big Rewrite

Chad Fowler by pragdave
The hirsute Chad Fowler, author of My Job Went to India and Rails Recipes, has an excellent series of blog posts up about The Big Rewrite, when a successful software product is targeted for a major rewrite, often in the latest and greatest new language / framework / database / platform / etc.
“You’ve got an existing, successful software product. You’ve hit the ceiling on extensibility and maintainability. Your project platform is inflexible, and your application is a software house of cards that can’t support another new feature.

You’ve seen the videos, the weblog posts and the hype, and you’ve decided you’re going to re-implement your product in Rails (or Java, or .NET, or Erlang, etc.).

Beware. This is a longer, harder, more failure-prone path than you expect.
This is something we're struggling with at Elcom Technology. We have a successful content management system product that is highly flexible, configurable and chock-full of features - but it is also carrying a legacy of non-web standards compliant design decisions. A major rework of the current system is possible, but it is tempting to see the amount of work as so great that it justifies spending that time on a complete rewrite in a newer language/framework/database/platform/etc.

Amongst the options we have are to use Ruby on Rails, especially if we can do it within Visual Studio 2008 (via IronRuby), increment to .NET 3.0/3.5, replace SQL Server 2005 with an Object DB, or even just look at adding our unique intellectual property as webparts in Microsoft's SharePoint 2007 (now including their CMS solution).

Having just helped do the initial design on an upgrade of our Image Library component Chad's point about Software as Spec really hits hard. In his words:
"Make it do what it already does." That’s a tempting and simple way to view software requirements on a rewrite project. After all, the system already exists. The question of "what should it do when…" can presumably always be answered with: "what it already does".

“programmers can easily oversimplify the interface, and assume they know the capabilities of the system.”
There are two major problems with this assumption. The first, and most disruptive, is that the programmers don’t know what questions to ask. This is especially true if the programmers weren’t the original developers of the system (most often the case on a major technology shift), but even a programmer who did the original implementation of a product won’t remember every nook, cranny, and edge case. What’s worse, with the fragile safety net of an existing implementation, programmers can easily oversimplify the interface, and assume they know the capabilities of the system. If a combination of drop-down selections results in a whole new corner of the system, how are they to know without stumbling onto it (or performing an exhaustive and expensive test cycle)?


“Existing code is good for discovering algorithms—not complex, multistep processes.”
Based on my own experiences and conversations with thousands of software developers around the planet, I unscientifically conclude that almost all production software is in such bad shape that it would be nearly useless as a guide to re-implementing itself. Now take this already bad picture, and extract only those products that are big, complex, and fragile enough to need a major rewrite, and the odds of success with this approach are significantly worse.

Existing code is good for discovering algorithms—not complex, multistep processes.
An initial reading of the Image Library code made it clear that determining the existing functionality from the code only would be a very difficult task. As a core part of CommunityManager.NET it was called from all sorts of parts of the system, with subtly different behaviours depending upon where it was called from. To make matters worse the configuration options to allow it to handle the range of functionality different clients required added another layer of obfuscation and confusion. Talking about the functionality further with other developers that had worked on previous iterations of the Image Library made it clear that there were a large number of edge cases lurking to trap an unwary developer that attempted a simple rewrite.

The solution was to start with the existing module and work on adding functionality incrementally, initially replacing the image upload control, and then eventually moving to new screen designs, and perhaps enhanced search functionality. In other words we avoided a rewrite and went for changing what was already there (but in a major way).

It does provide food for thought, if this is representative of our modules (and I know it is of at least some of them) then a complete rewrite needs to be approached very carefully, and preferably with a well-understood specification, or permission to vary functionality significantly from our existing application. Peter McBreen's thinking about software craftsmanship suggests that successful applications should not be rewritten, but rather nurtured and taken care of so that there is little justification for a major rewrite and plenty of reasons to keep improving the existing codebase.

Perhaps you've recently worked on this sort of Big Rewrite, what were your experiences?

P.S. This rant in favour of simple software is a fun read (if, um, fruity) and educational dissection of arguments against simple software. Perhaps what we need is a simpler CMS?

P.P.S> James Shore has a great blog post about software rewrites too, and he includes some advice on what to do.

Thursday, September 13, 2007

A big shout out to Alan J Lee!

A big shout out to my compadre Alan J Lee , who has just entered the world of blogging. One of his first posts is about a Silverlight presentation we had yesterday from Microsoft Developer Evangelist Michael Kordahi.

Keep on blogging Alan!

Wednesday, September 05, 2007

Go Wallabies!

Some great footage of the Australian rugby team:

My favourite player, Stirling Mortlock:

What happens if we meet the All Blacks in the semi-finals?

Tuesday, September 04, 2007

Dams 'contribute to global warming'

I'm trying to not comment on climate change froth and bubble, but I couldn't resist this story: Dams 'contribute to global warming'.
International Rivers Network executive director Patrick McCully today told Brisbane's Riversymposium rotting vegetation and fish found in dams produced surprising amounts of methane - 25 times stronger than carbon dioxide.

"Often it's accepted that hydropower is a climate friendly technology but in fact probably all reservoirs around the world emit greenhouse gases and some of them, especially some of the ones in the tropics, emit very high quantities of greenhouse gases even comparable to, in some cases even much worse than, fossil fuels like coal and gas," Mr McCully said.
I'm sure that some devoted climate change alarmists will start ad hominem attacks on Mr McCully, but this is a very interesting piece of research. They estimate that one third of global methane production is from dams! Perhaps we should be looking at other ways of storing water? (huge plastic bottles for instance?)

Friday, August 31, 2007

Architecture at the BIG end of town

Dan Pritchett on EBay's attitude towards architecture:
“I now need 3 mid tier boxes just so that we can have this widget on this page”
“One of the challenges that I often face with the product organization is that they will see a cool feature on a site that is parallel to our industry but they really want it. And it's like "they are doing this" and that's ok, but they are doing 500.000 page views a day and you want to put it on a page that's doing 300 million page views a day, and that involves 5 database round trips, in order for us to implement that feature so you are talking about adding 1.5 billion SQL executions a day to a database. A host that can do 600 million host a day, I now need 3 mid tier boxes just so that we can have this widget on this page. These are the kind of problems that you face as an architect at EBay.”
They also have an interesting definition of a "high-volume" page:
“(if) you are a developer at EBay you'd better know how to do a 4 million page views a day page”
“Another cool thing is that what a lot of organizations consider a scaling problem, we don't assign architects to because it's such a trivial volume of data that we expect the developers to be able to handle it. The 3 or 4 million per day per page site is just something that we will apply our pattern to. You don't need approvals, just go build it the way it is supposed to be built, we know it will run. There are people spending hours of their day trying to figure out how to get the 4 million page views a day. To us it's a cast aside problem, you are a developer at EBay you'd better know how to do a 4 million page views a day page.”
This is a good insight into the sorts of problems a truly globally popular site faces. Other problems that they have are how to maximise “transactions per watt”, a problem most organisations are not even close to facing up to.

On the other hand there is another InfoQ article covering the shift from machine-performance to human-performance which looks at the other end of the spectrum, the average application where it has become more important to maximise (expensive) developer productivity over (cheap) processor performance, coming out of a discussion about the marriage of Ruby (language) and Agile software development. There is an accompanying video in Japanese with English subtitles:

Wednesday, August 29, 2007

Agile references for project managers

Jimy Bogard has some great agile references for project managers on his GrabBag blog.

From what I've read and experienced of agile processes it is easier to change at the developer's end than the project manager's. Agile software development challenges some of the holy cow's of traditional software projects and it is not easy to find a solution.

Sunday, August 26, 2007

Rugby World Cup 2007

The Rugby World Cup 2007 is nearly upon us, and I'm looking forward to a few late nights (~midnight) and early mornings (~5am) watching the Australian games. I was planning on doing it with friends, but the weird hours mean it will probably something I end up doing alone. However it is still exciting for all that.

The Wallabies go into the cup as underdogs, just the way we like it. Most people expect New Zealand to win, but an upset by South Africa, or one of the Northern Hemisphere teams is on the cards - especially France as they will be playing at home.

Anyway, check out this cool Rugby World Cup 2007 ad:
More cool videos on Infini-Nut.

Wednesday, August 22, 2007

Easy find and replace in SQL Text fields

As you may know, you can only use the REPLACE SQL function on varchar or char fields, which becomes a problem when you have a text field to update (as we often do). In my case I had a text field with values up to 14,000 bytes, far too long to do a CAST to varchar (with a maximum of 8,000 bytes).

The traditional solution to this problem is to either use the UPDATETEXT function in a cursor, with lots of nasty code, or to whip up a small throwaway .NET application to iterate through the database records using the VB.NET Replace function.

SQL Server 2005 introduces the idea of large-value data types, which allows you to specify a data type that can store values up to 2^31 (2,147,483,648) bytes of character, binary or Unicode data (equal to the String data type in .NET). The importance of this change is obvious from the help text on these:
“The built-in string functions that can operate on character and binary data are enhanced to support large-value data types as arguments”
The syntax for the type declaration is:
  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
This allowed me to write the following update statement:
UPDATE ItemContent
SET ItemContent = CAST(REPLACE(CAST(ItemContent AS VARCHAR(max)), '#ff9900', '#8b0b04') AS TEXT)
Much easier than messing around with textpointers and offset values with the UPDATETEXT function!!

Wednesday, August 08, 2007

KEVIN07 - update

Thanks again to everyone who commented on my original KEVIN07 post. The newsfeeds are full of interesting points of view about the site:

For a start I think it's un-Australian to shorten Kevin Rudd's name to just Kevin. No, it needs to become the truly iconic Kev for him to have a real chance to win the election in 2007.

Anyway, back to the commentary:

Craig Sherborne at the Herald Sun points out the American elements in the site:
“Lashings of American-style red, white and blue, which are also Labor Party colours, create a bold backdrop for video links and a quick, simple manifesto for hot topics from job security to climate change.”
The Herald Sun also wonders where the KEVIN07 t-shirts are made:
“Kevin Rudd's "prototype" campaign T-shirts may have been made in the sweatshops of Asia.

A "Kevin07" T-shirt obtained by the Herald Sun had its label cut out.

A Labor spokesman could not rule out that it had been made overseas. ”
NineMSN have attracted hundreds of user comments about the KEVIN07 website. Most pointed was this one:
“Hypocrisy best describes this lastest stunt. Kevin Rudd is my local member and before he became opposition leader I sent an email for him to address some issues on my behalf...........I am still waiting for a reply!!!!!”
Finally, Lachlan Connor (independent for Victoria) gave us the following hacked image of Kev and his crew:

I'm looking forward to more good parody images coming out over the next week or so ... mind you being parodied and made fun of never did John Howard any harm, so it may all come good for Kev in the end.

Tuesday, August 07, 2007

KEVIN07 - are Labor out of their minds?

We've hit a new low in Australian political life with the launch of KEVIN07, the campaign website for Kevin Rudd - oh, and the Labor party. It is full of the mock enthusiasm so prevalent in American politics, and the similarities are made more obvious by the use of red, white and blue, the presence of bumper stickers, and the ability to buy KEVIN07 gear ...

In a blatant acknowledgement that they must fight the Liberals on personality alone, the site launch represents the rock-bottom for Australian politics - that is, until we have the Rudd girl battling the Howard girl online (like the yanks do with Obama girl vs Hilary girl). Mind you Kev looks like he's just swallowed a prune in this photo, so he probably needs some cheering up.

The buzz around the office is that this is likely to backfire. It is all too easy to parody and rip something like this off, not to mention the average Aussie's instinctive dislike of anyone so blatantly espousing American qualities and values.

We might like working with and cooperating with yanks, but that doesn't mean we want our politicians to become them!

The buzz in the blogosphere is that Labor has made a bold play, but might just have shot themselves in the foot with this one. I think the idea, using the web effectively, is a smart one - but the out and out cheesiness of the site backfires badly.

Monday, July 23, 2007

Amazing Grace (Movie)

There is an interesting new movie coming out about William Wilberforce's fight for the abolition of slavery in the British Empire. Of particular interest is his mentor John Newton, an Anglican clergyman who had once been a slaveship master, before becoming convinced that it was ungodly - and who is best known for his famous hymn Amazing Grace which captures the spirit of his conversion (see lyrics below).
This is a film I'm really looking forward to seeing, not least because it stars Ioan Gruffudd (of Hornblower fame). I've blogged more about the movie, and modern slavery on Cracked Jug.
“Amazing Grace”

Amazing grace, how sweet the sound
That sav’d a wretch like me!
I once was lost, but now am found,
Was blind, but now I see.

’Twas grace that taught my heart to fear,
And grace my fears reliev’d;
How precious did that grace appear,
The hour I first believ’d!

Thro’ many dangers, toils and snares,
I have already come;
’Tis grace has brought me safe thus far,
And grace will lead me home.

The Lord has promis’d good to me,
His word my hope secures;
He will my shield and portion be,
As long as life endures.

Yes, when this flesh and heart shall fail,
And mortal life shall cease;
I shall possess, within the veil,
A life of joy and peace.

The earth shall soon dissolve like snow,
The sun forbear to shine;
But God, who call’d me here below,
Will be forever mine.

Saturday, July 21, 2007

If architects had to work like programmers ...

Comparisons are always suspect, but this humorous piece collapses several of the common recurring problems in software projects into one hilarious piece that portrays what it would be like if architects had to work like programmers:
Please design and build me a house. I am not sure of what I need, you should use your discretion. My house should have between two and forty-five bedrooms. Just make sure the plans are such that the bedrooms can be easily added or deleted. When you bring the blueprints to me, I will make the final decision of what I want. Also bring me the cost breakdown for each configuration so I can arbitrarily pick one...

Sunday, July 15, 2007

Rob Walling's developer archetypes

I've mentioned Rob Walling's developer archetypes before, but my first week in my new position has brought home to me some of how I fall across those archetypes (and I'm egotistical enough to believe it is of interest to you). This is how he sums them up:
The archetypes are:
  • Trainer/Author -
    spends the majority of his/her time teaching, training, writing articles and books, and otherwise helping others learn how to program.
  • Coder - a hard-core developer. Into design patterns, the next cool and experimental language constructs, and talking about web service proxy generators.
  • Lead - excellent organization skills, driven to make projects succeed, and skilled at leading others.
  • Technologist - into all the new applications; would rather integrate than write code.
I mulled about this myself, but I didn't like the answers I got, but I know that's never a good reason to ignore something. This last week, it all came together for me. I'm in a senior developer position - not team lead, not project manager, not even consultant. Of course a fair bit of the week was spent settling in (getting the right keyboard for instance), but I found that by the end of the week I've done exactly four new lines of code, amended about 30 lines of code, re-designed 9 web page wireframes and yet feel valuable, energised and eager to go to work each day.

This settled an internal argument I'd been having about Coder vs. Technologist. I am definitely more of a Technologist than a Coder, but I'm more of a Coder than anything else.





The part of my week that I'm most proud about? Getting a mental picture of how the whole company operates, particularly with regards to software development and deployment. I now understand how the whole hangs together - yet I'm sure a pure Coder would not be interested in that, it's more of a sign of a Technologist/Integrator. In any case it justifies for me the decision to go back to a development role, especially in light of Rob's recent post about why good developers re promoted into unhappiness. I'm far happier now than I was when all I ever got to see was Visio network diagrams, the occasional test script and tons of paperwork, meetings and decisions about what others should do.

Thursday, July 12, 2007

Samurai.fm - music to code by

Now that Pandora has closed access from international listeners, my new favorite internet radio station is samurai.fm. With the usual eclectic Japanese way of bringing together music from everywhere it offers some cool, weird and inspiring music to code by.

Wednesday, July 11, 2007

What is .NET 3.0 and Nested Masterpages in VS 2008

Our tech lead has encouraged me to look into .NET Framework 3.0. As the diagram below shows, it is basically good ol' .NET Framework 2.0, plus a few new funky 'Foundation' elements (I'm sure Windows CardSpace was meant to have 'Foundation' at the end):

As you'd expect from Microsoft there is lots of good information online, and it makes for interesting reading. Unfortunately it is presented with the usual breathless wonder at the daring of Microsoft to go out on a limb and provide us with the very latest and greatest technologies:
“Use the .NET Framework 3.0 to build applications that have visually compelling user experiences, seamless communication across technology boundaries, the ability to support a wide range of business processes, and an easier way to manage your personal information online.”
All of that is available without .NET Framework 3.0, but I guess it was better than saying:
“Use the .NET Framework 3.0 to build applications where you actually have to provide what the designers want, that use Google/Yahoo accounts, play nice with SOA and have a consistent way to implement the workflow that makes up 0.5% of your application.”
Sarcasm aside (marketing is probably doing their best), the extra bits are well worth having. Well, okay, CardSpaces may become the next .NET Passport (remember how popular that was!?) but the rest of the package looks genuinely useful.

Windows Presentation Foundation (WPF)
I have my doubts about how Agile WPF will let a team be, I mean it's great when you mix designers into the development team, but I feel it may allow too much 'frozen design' at the start of a project, with the expensive designers being expected to hand across their tidy XAML code to the developers who are expected to not deviate one iota from it. However it may be less relevant to cross-browser websites anyway, as from what I've seen (and here) it is aimed fairly squarely at thick-clients, and the ActiveX control for WPF/E makes it fundamentally not cross-browser friendly.
[UPDATE: Here is a great blog post about why designers should be involved in development.]

Windows Workflow Foundation (WF)
I first got interested in workflow-enabling applications back in 1994 and have found it easiest to create them in Lotus Notes and SharePoint/InfoPath. However my resume is not littered with dozens of successful workflow projects. Why is that? The main reason is that workflow is usually a small subset of any business problem, and the meat of the issue is within each task. The exception is when the task is simply data capture, or is executed in an existing legacy system that needs to be more closely integrated with others to enable more efficient workflows. In the first case, WF is overkill (and may have significant performance gotchas), in the second it offers a genuine solution (especially in conjunction with WCF). So I'm interested, but I don't think I'll be wrapping every application I create in workflow just because WF exists.

Windows Communication Foundation WCF)
This looks genuinely interesting, an easy way to implement SOA within .NET, and of course extensive support of SOAP. More interesting (IMHO) is that it also supports Representational State Transfer (REST) and can be extended to support ATOM (for RSS) and JSON (for lightweight AJAX) formats. I previously mentioned how I was re-doing the Agile Web Development with Rails tutorials as a way of getting a better handle on REST, and mentioned a great slideshow on RESTful development(see 3rd slideshow at bottom of post). I can think of a couple of ways we could use this right away, but the exciting bit is really to think through REST and consider whether it adds value to our application design (or not).

Lastly, Scott Guthrie has a great post up about how Visual Studio 2008 will support nested master pages giving us WYSIWYG support, and (even better) we can do all this with .NET Framework 2.0, without needing to go to .NET Framework 3.5 (yay!). I've been acquainting myself with master pages in ASP.NET 2.0, somehow all the projects I've worked on in the past have managed not to use this feature, then again most of my ASP.NET projects were 1.0/1.1.

Thursday, July 05, 2007

New .NET Role

I'm about to start a new permanent role at a .NET web company in Sydney. I've been lamenting the fact that I won't get to play with Ruby on Rails at work, mainly because I love the simplicity of the Model-View-Controller architecture it forces on you. Then, lo and behold, what should I stumble across but MonoRail, a project to bring the MVC web framework of ActionPack (what drives Rails) to .NET (1.1, 2.0 and Mono).

So I may end up escaping WebForms horror of one-form to a page, abstracted abstractions, and the cross-browser nightmares that follow.

Well, OK, a guy can dream can't he? ;D

[UPDATE: That sounds like I'm not excited about the new role, the fact is I am, especially because we'll be using Scrum, and the guys seem friendly and smart. It's just that I was coding dynamic web pages before WebForms came along, and I hope to be doing so well after they're relegated to the scrapheap.]

Friday, June 29, 2007

The real solution for the Pasha Bulker

If Transformers was real then imagine the interesting solutions we'd have to daily problems, such as how to get the Pasha Bulker off Nobby's Beach in Newcastle:

Tuesday, June 26, 2007

Software craftsmanship, cathedrals and developer archectypes

I recently came across the online version of the Cathedral and the Bazaar and was particularly struck by this rule:
“5. When you lose interest in a program, your last duty to it is to hand it off to a competent successor.”
Unfortunately I've broken that rule in the way I've handled the Traveller T20 Starship Design Spreadsheet ... fortunately few people would care.

More to the point I started to study how cathedrals were built, as I suspect that there is another analogy that can drawn with them, one of software craftsmanship - particularly as I get paid to build proprietary software, not open-source.

Unfortunately I haven't the time to develop these ideas more now, but I don't want to just generate a bunch of bookmarks to be forgotten later. So here are some of the interesting articles I've come across in this area:

The Meaning of the Arts and Crafts Movement
“The most imposing monuments of man's skill with tools are those great mediaeval churches and halls which were built in England and on the continent during the time when men who worked with their hands still sought through their craft to express the religious feelings and the craving for beauty which were still a glory and a source of humble pride. The stone carver who cut the pillars of Melrose or of Rosslyn or of York, wrought to the glory of God, consciously feeling that if his work was good it was because it was sanctified by its end. He was recognized as one interested in the success of the whole undertaking and could therefore be accorded a freedom impossible today, when the average journeyman has little thought of his work as a means of expression, considering it too often only as a means of livelihood.”

How BLogs and Wikis Can Help Knowledge Management
“From my window, I can see the great cathedral of York Minster, which was built over 700 years ago by generations of skilled craftsmen. They would have learnt their trade through serving seven-year apprenticeships, where they picked up the skills of their craft by observing the more experienced craftsmen.”

Becoming a Better Developer: Know Your Archetype
“Developers come in many shapes and sizes, but over the years I've noticed a handful of archetypes that we tend to embody. These archetypes are the fundamental building blocks of who we are as developers, and two to three of them exist in each of us in varying quantities”

Medieval Cathedrals
“Each master of his own trade ran a workshop for his own particular trade – so a master mason would employ a number of masons who were trusted enough to be considered competent to work on a cathedral as they, themselves, worked towards becoming a master.”

Nine Things Developers Want More Than Money
“Money is a motivating factor for most of us, but assuming comparable pay, what is it that makes some companies attract and retain developers while others churn through them like toilet paper?”

Monday, June 25, 2007

New Wallabies Jersey

The ARU and sponsor Canterbury International have revealed the new Wallaby jerseys for the Rugby World Cup 2007.

Lots of supporters that I know were saying that we should have had this sort of gear in 2003, but better late than never!

Sunday, June 24, 2007

Ease at Work

Kent Beck (from Agitar Software and of JUnit, Extreme Programming and Test-Driven Dvelopment fame) talks about Ease at Work, it's a 7-part video series, so I'm showing them all to make it easy for you (BTW, InfoQ has a great summary of this talk). Here is a reminder of the range of values we can find in the word 'ease', with the ones Kent is using highlighted:
  1. The condition of being comfortable or relieved.

    1. Freedom from pain, worry, or agitation: Her mind was at ease knowing that the children were safe.

    2. Freedom from constraint or embarrassment; naturalness.

    3. Freedom from difficulty, hardship, or effort: rose through the ranks with apparent ease.

    4. Readiness or dexterity in performance; facility: a pianist who played the sonata with ease.

    1. Freedom from difficulty, hardship, or effort: rose through the ranks with apparent ease.

    2. Readiness or dexterity in performance; facility: a pianist who played the sonata with ease.

  2. Freedom from financial difficulty; affluence: a life of luxury and ease.

  3. A state of rest, relaxation, or leisure: He took his ease by the pond.

Friday, June 15, 2007

Pete McBreen on the current state of software development

Pete McBreen shares his thoughts on the current state of software development with StickyMinds.com. As well as disliking ravioli documentation (just add water to the API code) he has the following spot-on summation to make:
“The things that have gone unchanged are as depressing as ever. Managers and organizations still undervalue experience, fail to understand that complex projects are impossible to estimate up front, and are just as resistant to new technology and process ideas as they ever were. I am still seeing people with 15+ years of experience opting out of development, leaving massive holes in organizations because there is nobody left who understands how their entire suite of systems works together. These things might be good from a consulting standpoint, but from the viewpoint of employees and customers, all I see is rising frustration and stress because the systems are becoming more and more rigid and fragile.”

Wednesday, June 13, 2007

Cost Accounting, Lean Manufacturing and the Craftsman Within

InfoQ asks the question Does Cost Accounting Cause Crappy Code? They reference a series of posts by Henrik MÃ¥rtensson and point out other ways that the Theory of Constraints and Lean Manufacturing have affected recent thinking about software development.

Jason Yip is an Aussie a Canuck with interesting views on how lean manufacturing thinking (specifically Toyota's version of it) can help us better understand software development. Norman Bodek has said that traditional accounting systems form one of the challenges for successful lean manufacturing:
The real challenge for us in America is both an accounting problem, the measuring system which puts pressures on management is in the opposite direction of lean, and how we develop people. In our measurement system, inventory is very powerful metric for managers. Managers know at the end of every quarter, especially if they’re a public company, they have to produce as much inventory as possible. I don’t even have to sell it!
Moving away from cost accounting is a hard sell with management (after all that's what their degrees and MBAs taught them to manage), but I've been delving into Software Craftsmanship: A New Imperative by Pete McBreen and it makes the point that software development is more successfully dealt with as craftsmanship than engineering. One of he key points that I've picked up in my reading around lean manufacturing is that it often does not work in the West because we treat it as an exercise in systems development, or engineering, when in reality it is an extension of the well-developed Japanese approach to excellent craftsmanship ... and lifelong employment with the one company, which makes the enhancing of the employee's skills an exercise in capital improvement. Norman puts it this way:
We [Americans] look at people as if they’re expendable. Toyota develops people and teaches them skills, they realize long term success comes from building up peoples’ skills. We say people are our most important asset, but we don’t mean it.
Now I know that most managers would probably chime in at this point to ask where loyalty to the company has gone - because many well-trained people move on to other companies, taking their skills with them. Pete McBreen addresses this issue by making self-development the responsibility of the craftsman themselves - the only responsibility the company has is to value master craftsmen differently from journeymen or apprentices. The "software development is like movie making" meme (see Scott Berkun, Mike Cannon-Brookes and David Friedman at Inc [from 1995!]) gives us a clue as to how this might be handled, with masters bringing their own apprentices and journeymen onto projects they are hired for.

I was lucky enough to have a master craftsman, Richard Jowsey, for the first two years of my professional life as a developer. Whilst Richard was ostensibly on the project to teach us Omnis7, he taught me far more about how to write code, make it maintainable and how to design systems, especially usable ones. Funnily enough he had a patchwork background with a chemistry degree, followed by a stint as a jeweller, travelling extensively, then a psychology degree and practising as one, before buying his first Apple Mac and getting sucked into writing code for his practice ... followed by a long history of software projects (the last I heard he was running Death2Spam).

Richard's depth of personal and life experience, (obviously) keen mind and relentless drive to enjoy life infected me and gave me the first glimpse of the joy to be hand when working towards excellence in a creative field like software development. The two years that followed taught me how to run a team for a large consulting organisation, but they leached the joy out of my work and led me to strike out on my own with my first company to do web development. It is only now, years later, that I appreciate how much Richard taught me about software craftsmanship. When I challenge myself to walk The Long Road it is encouraging to see what I do as craftsmanship rather than just becoming a bigger cog in the software factory.

Friday, June 08, 2007

Rugby: O'Neill is back!

He says he's not the messiah but at this point he is the next best thing for the Australian Rugby Union who have re-appointed him as Managing Director/CEO.
“John will be working with a very experienced senior management team to keep things moving towards the Rugby World Cup in France later this year. I know John has strong views on where Rugby should be going and how it should go about achieving those goals. John has the support of the Board in pursuit of those goals.”
Peter McGrath, ARU Chairman
Hoorah! We might finally get the sport out of the quagmire it's been in since O'Neill left!

Monday, June 04, 2007

Google Gears

This is the very interesting presentation about Google Gears made by Aaron Boodman at last week's Google Developer Day in Sydney:

This is going to make web application development very interesting ... and by that I mean challenging. I'm sure that ASP.NET will end up hiding this functionality under yet another layer of abstraction (abstractions upon abstractions ...) but at the end of the day there are a lot of gotchas with this sort of application that developers will need to deal with, not least being the change in user mindset that is required. After all, where will user data actually reside?

Data replication is a well-understood problem for many thick-client tools, document management tools such as Interwoven WorkSite have one way of handling it, whilst Lotus Notes has dealt with this problem for years. However, despite being well understood by developers, it always seems to cause issues with users - mainly because it violates so many of their mental models of how computers work. One interesting point will be the re-interpretation of the "Offline" mode indicators that these GUIs often use. I wonder what will become the most popular solution to that design problem? (mine is courtesy of My cool button)

There will also be problems in bandwidth poor nations like Australia, where users find their internet bills going through the roof because they are suddenly downloading copious amounts of data during asynchronous data updates with their favourite web applications. Yes, the technology should save bandwidth in some scenarios, but I'm willing to bet a dozen KK donuts that it will leave most users with heftier download numbers than they had previously. At least Google will probably eat its own dogfood with Gmail as one of the obvious first apps to apply Gears to (Google Reader actually looks like the very first one to offer this functionality).

Sunday, May 27, 2007

RubyWorks announced by ThoughtWorks Studios

ThoughtWorks Studios have announced the July 2007 release of RubyWorks, which is intended to be “a new products and support service for Ruby ... to help enterprises implement and use Ruby more effectively”.

It looks like the bundling of some material they've already used in-house (like JRuby) with Mingle, with products they've worked extensively on themselves, such as CruiseControl.rb.

Of course the payoff is the consulting services they hope to sell from this, and increased willingness by larger enterprises to adopt Ruby and Ruby on Rails.

Which OS for Ruby on Rails development?

I recently acquired a second hand laptop to allow me to play more with Ruby on Rails without ignoring the family - I spend over an hour a day on trains, so it makes sense to do more than just read during that time.

“My first instinct was to whip out the spare Windows XP Pro CD”
My first instinct was to whip out the spare Windows XP Pro CD I've got at home, but then I figured I should really poke around and see what others had to say about developing on Linux. ThoughtWorker Jake Scruggs has an interesting post comparing Windows vs OSX vs Ubuntu for Ruby/Rails Development. He makes some good points and basically kiboshed the idea of using Windows:
“I’m not going to mince words here -- try to avoid developing in Windows if at all possible ...”
Now most Rails developers I know of use Apple Macs running OSX; for example that was by far the most common laptop at the Ruby on Rails Oceania meeting I attended recently. So it was unsurprising to have Jake sing its praises, especially using TextMate, however I was surprised by this summation:
“Really the choice between OSX and Linux is mostly the choice between TextMate and IntelliJ (or Eclipse/RadRails). And, for now, I think TextMate has a slight edge. TextMate’s auto complete is a joy to work with while IntelliJ’s indexing makes for crazy fast searching.”
I've been using RadRails for Windows, so this got me interested. A couple of weeks later and I've settled in to using RadRails on Xubuntu 7.0.4 (Feisty Fawn).

Xubuntu is my first real attempt at personally using a Linux distribution as a primary desktop OS. I've had experience using Linux servers (no GUIs), so I figured I could always drop back to the command line if something broke and I've had to once or twice during installations. But overall I have been pleasantly surprised at how civil an experience it has been.

“But overall I have been pleasantly surprised at how civil an experience it has been.”
My main hurdle was getting the new Aptana + Rails IDE setup. That proved to be difficult, with few helpful instructions online. At the end of the day I fell back to the tried and true RadRails 0.7.2 release.

One of the nice things is that with Xubuntu I can run MySQL server, a WebBRICK web server, RadRails, a PDF viewer (with AWDWR open) and Firefox without using more than half of my 512 MB RAM and only occasionally pushing the 1.8 GHz CPU above 25%.

The hardest thing to get used to is the compartmentalisation of functionality between applications. Sometimes that's a minor delay as I find where I need to do something, like the hassle I go through to change my desktop, screensaver and power settings. It's one application in Windows, but three (or four!) in Linux. Other times it's a royal pain, for example when I find that I haven't (yet) installed the right application to do something - but it's not clear what I should install to fix the issue.

My recommendation? The Windows experience is a great one if you have background in it, the Linux one is smoother in some ways (installing gems, finding online help) but in other ways (application interoperability) is more jarring. I am enjoying the experience of Xubuntu on my little old laptop, but I would hesitate before setting up my main work machine the same way.

I have no opinion on the OSX option, but my experiences with Apple Macs have not been universally wonderful - others have compared OSX and Windows XP more graphically and with greater detail than I ever will ...

Friday, May 25, 2007

Currency formatting stuck in Rails' Views

I've been re-doing the Depot application tutorial from the excellent Agile Web Development with Rails book as I've updated it for the latest version of Rails in order to get a better handle on REST and other changes in Rails 1.2.3. I'm mostly doing it on the train in the morning and evening.

Anyway, as I go I'm challenging the approach given in the book to validate my own Rails/OO design knowledge. One area where I thought I could see a better way of doing things was with the formatting of the prices in the store view. Previously I had used sprintf() to give me a display_price facade attribute in the Product model that I could use for pretty (i.e. currency specific) versions of prices.

The number_to_currency helper method seemed to offer a great way of doing the currency formatting, especially given the helpful options it has for setting all sorts of specific details like currency symbol, separators for thousands etc. The tutorial showed it being added into the Store view, which is nice, but potentially could leave me with a whole lot of places to make changes if I wanted to internationalise the application (although the elements could be stored in constants). However when I plugged it into my Product model it threw a nasty error:
undefined method 'number_to_currency'
It turns out that this helper method is part of ActionView and so can't be used in models or controllers (the documentation I link to above has comments about that under it). The workaround is to use sprintf() within models or controllers. At least the database column is now automatically detected as a BigDecimal rather than a Float so my previous hack is no longer required.

So is there a problem with this? On the one hand, I can see that number_to_currency is all about creating a string representation of a number, and thus sits squarely within the world of views. On the other hand the DRY principle militates that we should have a single authoritative source of this information, without creating larger issues. In theory this means the model layer, although it is unclear whether you would restrict yourself to the Rails models or the underlying database objects.

My rule of thumb is to KISS it and use the Rails model when you know everything you write will be in Rails. If you expected to have non-Rails applications accessing the data (e.g. legacy .NET or Java code) then I would look at creating a view (less flexible currency styling) or stored procedure to act as the database source object for my Rails and .NET models.

Thursday, May 17, 2007

Rails Envy: Java meets Rails

The Rails Envy guys ("It's not the size of the app that matters, it's how you code it") have got some great mock ads on Rails vs Java and Rails vs PHP in the same vein as those Apple ads. Here is the first of their offerings:

Wednesday, May 09, 2007

Agile and Ruby on Rails thinking

I attended the Ruby on Rails Oceania meetup tonight and learned some interesting things about RDoc (PDF) from Tim Lucas, got some good pointers on how to involve customers in Agile projects (PDF) from Max Muerrman and lastly some great tips on geocoding in Rails (PDF) from Cameron Barrie.

[UPDATE: Got more details (like full names) from Tim's blog. Also Tim's got his slides up on SlideShare.]

I've been playing with Ruby on Rails to broaden my understanding of Agile development concepts and practices, and it's going well. The principles of the Agile Manifesto sounded good when I first read them over a year ago, but since listening to Jason Yip from ThoughtWorks talk about them they've come to life for me, so I will be doing a series of posts about them and how they relate to my experience in over 13 years of IT consulting and contracting.

It's also been nice to read about how Rails is finally getting some traction in the Enterprise arena, firstly through Thoughtworks delivering their project management application, Mingle on JRuby, which basically re-writes Ruby in Java. This means that we now have applications written in Ruby on Rails, but deployed on Java in the enterprise. Very nice.

Secondly we have Microsoft announcing the Dynamic Language Runtime, which allows projects like their IronRuby (a different beastie than Wilco Bauwer's). In an interview with eWeek one of the developers behind the DLR, Jim Hugunin explains how they developed the DLR:
Hugunin: Where this all came from is I joined Microsoft with IronPython, but I joined to make the CLR [Common Language Runtime] a better platform for dynamic languages. In some ways this is what we've been working on for the past two and a half years. The way that we did that is we started by building one real high-quality production implementation of a language, which was IronPython, and getting a lot of users to beat on it and make sure that we could do it well. Now that we have that one quality implementation we started saying, 'Well, how can we make more languages run well on the platform and make them run even better?'”

Monday, May 07, 2007

SQL Server: Is that Linked Server really up?

Recently I needed to fix a SQL Server 2000 stored procedure that called various stored procedures on remote database servers (again using SQL Server 2000). In this case it was splitting a centralised queue of tasks across the database servers that needed to handle each request. For centralised management of remote sites this makes a lot of sense. To do this it relied upon declaring each of these servers as a Linked Server (an entry in the sysservers table).

The problem we had was that when one of those database servers was down it held up the rest of the process because the main stored procedure immediately died as soon as it could not see the Linked Server.

I found a nice explanation of why this happens on the SQL Server Engine Tips blog. They mentioned this was a problem with SQL Server 2000:
“Due to lack of exception handling and implementation of OPENQUERY/OPENROWSET/OPENDATASOURCE interfaces it is not possible to do it cleanly.”
However, there is a new stored procedure in SQL Server 2005 called sp_testlinkedserver that will solve the problem. Wonderful!

Unfortunately SQL Server 2005 is not an available option, so I was pleased to see someone had left another solution to this in the comments section. SQLDBATips.com has a sample stored procedure called usp_serverup that gets rid of the problem by using SQL-DMO to test the availability of the Linked Server. That gives us a tool we can use to test the connection prior to running the code that will down our SP. Now that is cool.

[UPDATE: The usp_serverup solution utilises OLE Automation (which is why it avoids the aforementioned problem), which means that the account running it must have sa privileges within SQL Server. That creates a major security issue, so we're falling back to making the Windows service that calls the stored procedure chunk its calls by site, thus insulating each site from the failure of other sites.]

Saturday, May 05, 2007

Norton 360: Should we tell him?

I came across the latest viral marketing campaign from Symantec Australia today, it's promoting the new Norton 360 home security/recovery suite using a YouTube video:
The ad is quite funny for an IT geek like myself, especially the 'wall of fire' reference to the firewall function (which is actually named after the physical firewalls in buildings that limit a fire spreading).The ad micro-site includes a competition to see if you can spot the two places where 360 appears in images on the micro-site, but not in the ad. For what it's worth my money is on the tennis racket and the cup (although the tennis racket shows a white blob on the end in the video, you can't tell it's '360' as well as you can in the photo below).

Anyway, I can't say much about the product itself, except that I like the idea of stopping IM viruses and online backup and it seems to have a nice user-friendly console:

For over a year I've been using McAfee's SecurityCenter product suite (now VirusScan Plus) and frankly finding it damn annoying. At one stage it was prompting me 4-5 times a browsing session to confirm that I was a registered user on the McAfee website, because it had downloaded a new virus definition, or a firewall update. Surely this is something that could have been remembered, or taken on trust?

I've now downgraded to just the anti-virus (which I get free through work) and am back to using ZoneAlarm for my firewall needs and relying on Gmail to scour my email for spam. I typically use Mozilla Firefox, so I get anti-phishing tools built into the browser.

With Norton 360 it looks like Symantec are maintaining Norton's reputation for usable security software:
“Based on your constructive feedback, we made a number of usability and performance improvements through the course of the beta program. In addition, we are making available an optional add-on pack for Norton 360 for anti-spam, ad blocking, parental controls and confidential information blocking. The optional add-on pack will be available for download by the end of March.”
For what it's worth, I would love to win this one and see if Norton 360 can sort out my security and data backup needs wihtout constantly interrupting my web browsing ...

Friday, May 04, 2007

Rails slideshows

There are some great Rails slideshows on SlideShare, here are some of my favourites:

Scaling Twitter:
“It’s Easy, Really.
  1. Realize Your Site is Slow
  2. Optimize the Database
  3. Cache the Hell out of Everything
  4. Scale Messaging
  5. Deal With Abuse”

Introduction to Active Record:
“I have never seen an Active Record implementation as complete or as useful as rails.”
Martin Fowler

Ruby on Rails Resources (RESTful development):
“Constraints are liberating (a straight jacket for your mind)”

Monday, April 30, 2007

Authentication in Ruby on Rails

I've been getting sporadic time fragments to spend on Ruby on Rails, hardly throwing myself into it, but the best I can manage with my work and family commitments. One of the key items I'm wrestling with is user authentication.

This is an important area to me as any web app I am likely to write in Rails will need to authenticate users, at the very least site admins, but more likely regular users that have private data/functions they need to access.

Allow me to explain a crucial point here; when people look at application security there are two related, but different, concepts that are often confused. These are authentication and authorisation.
This is how you prove that you are who you claim to be. An authenticated user is one who we accept the identity of.

This is how we determine what you are allowed to do. The first step is always to authenticate that you are really who you claim to be, the next is to determine what authorisation you have been granted within our application.
I actually intend to implement both concepts in my breakable toy apps, but unless I can find a good answer to the first one, I won't be able to do the second.

Fortunately authentication systems can be easily shared, for example I could try to implement Google account authentication, which would allow users to login to my application using their Google account. The acts_as_google_account plugin might give me exactly what I need in this area. That places the burden of user administration on Google and leaves me just worrying about authorisation.

It is much harder to take on board someone else's authorisation system, as it is by necessity interwoven with the object model we are using, and may not meet anyone else's expectations about how to control user access. A truly orthogonal authorisation system may be possible, but I have yet to see one.

Anyway, my problem at the moment is that acts_as_google_account has minimal documentation, no test cases and a module called "Foo" ... hardly something that instils confidence in the code. I could look at the Acts as Authenticated plugin, which at least is documented (almost well documented) and widely used, and someone has already worked out how to install the plugins as generators (which is more what they are).

ModelSecurity is very nice as it implements at the model level, avoiding the potential loopholes that controller-based authorisation schemes provide (e.g. a new controller is built that exposes the models without implementing the right security scheme). However there are some concerns with its integration with auto-completing text fields. But at least some of the issues have been worked out for me.

I had read someone complain that ModelSecurity implements a single level of security, which would be less than useful for me, however a read of the ModelSecurity class reference shows that the security scheme allows you to specify any test you like, so you could implement user security groups or other funkiness as you will (e.g. allow access for users whose firstname begins with "A" and a date of birth in April for any even-numbered year).

Other possibilities are to look at ActiveRBAC (RBAC = Role-Based Access Control) and the Authorization plugin.

Of them all, ModelSecurity appeals to me the most as it secures at the lowest level possible. Hopefully the next time I write about this I will have implemented it in one of my toy apps.

Sunday, April 29, 2007

Managing badly against the grain

Bob Sutton (author of The No Asshole Rule) has an interesting article at Harvard Business Online on the discontinuity between the accepted wisdom regarding 'superstar' employees and the objective evidence about that wisdom. I've got family members in the HR consulting area, so I find this sort of thing interesting, but I came across this bit about the No Asshole Rule which seemed worth sharing:
“there were several CIOs who emphasized that such bosses and work climates not only drove people out, but they created environments were people devoted too much energy to avoiding blame and the wrath of others, and not enough time to actually doing their jobs”
Have you ever experienced an asshole boss or work climate? I have, at two different workplaces, and it took a terrible toll both times. Apart from the fact that it wears you down to deal with such dysfunctional people, it can influence your own attitudes, so that you find yourself exhibiting signs of being an asshole yourself, not to mention taking on full-time blame avoidance and wrath dodging.

It doesn't help that asshole behaviour usually comes from people you feel you should respect (they're senior, the cream of the crop, the respected director, the firm's rising star), which can hide the harm it does if you let it make you too self-critical (they're right, I'm not good enough, I screwed up, I don't deserve this job ...). But the truth is that if a manager criticises your performance, does nothing to help you improve it, and yet expects improvement - then they are acting like an asshole.

When it comes to looking at what managers should do, Bob Sutton suggests we look at evidence-based management. Jeffrey Pfeffer runs a website about evidence-based management and recently testified to Congress about it. He summarised his testimony into five points (re-formatted by me):
“First, organizations in both the public and private sector ought to base policies not on casual benchmarking, on ideology or belief, on what they have done in the past or what they are comfortable with doing, but instead should implement evidence-based management.

Second, the mere prevalence or persistence of some management practice is not evidence that it works -- there are numerous examples of widely diffused and quite persistent management practices, strongly advocated by practicing executives and consultants, where the systematic empirical evidence for their ineffectiveness is just overwhelming.

Third, the idea that individual pay for performance will enhance organizational operations rests on a set of assumptions. Once those assumptions are spelled out and confronted with the evidence, it is clear that many -- maybe all -- do not hold in most organizations.

Fourth, the evidence for the effectiveness of individual pay for performance is mixed, at best -- not because pay systems don't motivate behavior, but more frequently, because such systems effectively motivate the wrong behavior.

And finally, the best way to encourage performance is to build a high performance culture. We know the components of such a system, and we ought to pay attention to this research and implement its findings.”
The assertion that organisations are sending their managers to courses and drafting their policies based on what is essentially made up rules is scary. Just because we wish something were true, doesn't mean it is, and acting otherwise is plain stupid.

Bringing that back to project management, which is my personal sphere of management experience, and Ross Pettit at The Agile Manager blog just posted on Patterns and Anti-Patterns in Project Portfolio Management. The anti-patterns he mentions are worth noting, although I'm not sure I buy the conclusion that Agile Management is the answer.

A good analogy for this stuff is the carpenter that stubbornly tries to plane against the grain and is unhappy with the resulting jagged finish. It is fair enough to say that in our personal experience we may not experience a particular situation often enough to be able to derive statistically relevant rules from it, but when others have done it for us, it behoves us to educate ourselves before we act.

[UPDATE: Another carpentry analogy is that we need to learn the trade and the tricks will follow. Too often we look for management shortcuts (the tricks) rather than getting the basics (the trade) right.]

Thinking of self-education, I'm in a place right now where I'm wondering whether I'm a software developer or a project manager. I find myself reading things like The Pragmatic Programmer and dis.cipul.us and tinkering with Ruby on Rails apps at home (my breakable toys) which clearly is part of my developer persona, but I also am interested in management and love the challenge of tackling projects at a level well above worrying about my daily tasks.

Articles found via Thoughtworks' Jason Yip here and again here.