John Nunemaker has no talent, I agree (and don’t either!)

Love this post by John Nunemaker and programming: “I Have No Talent”:

It is true. I have no talent. What I do have is a lot of practice. And I am not talking about occasionally dabbling in Ruby on the weekends. I am talking about the kind of practice where I beat code that isn’t working into submission (though often times the code wins).

Rafe Colburn’s vote for Software Engineering’s “Trend of the Decade”

Check out Rafe’s thoughts on what he considers software engineering’s “Trend of the Decade”, Decentralized Process: More work done in public, public discussion of that work, and the introduction of new best practices have defined the trend of the decade — developers owning the processes under which they work. Hopefully it will continue in the next decade.

My perspective and experience says he’s right. And I gotta agree with his wish. Read the full post.

What is ETL and CMS?

You’re a programmer with a task to retrieve information from some source, manipulate and message it, and to deploy it somewhere.

Like all things in programming, there is an acronym for that: “ETL”.

ETL stands for Extract, Transform, and Load. The Wikipedia page is pretty thorough in its summary of the topic and reviews many of the typical functions an ETL process needs to take to accomplish its task.

The problem is ETL doesn’t roll off the tongue so easy. The acronym provides a weak set of metaphors for programmers to map familiar concepts to.

Rafe Colburn provides a great mental model to apply when developing ETL scripts and applications. It’s one I follow, but have lacked the words to describe. Go read his post.

Here’s a thought to challenge you if you are a CMS developer, now that you have read the above – are whatever forms you build to enable people to contribute and manage content in a CMS a kind of ETL process? Does the Wikipedia description for “Extract, Transform, and Load” contain functions there that you would expect a CMS to encompass?

And speaking of CMS, Gadgetopia has a terrific article on what a CMS system is. It is difficult to be clarifying in a world where hype and acronyms get thrown about so much (like this very post!) – but the Gadgetopia piece certainly is. It helps outline the functionality you should expect from a CMS implementation.

Some light reading (and research) on non-functional requirements in Agile/Scrum

Agile Modeling: Introduction to User Stories

Mike Cohn’s Blog: Non-functional Requirements as User Stories

aqris: Representing non-functional requirements with user stories

wikiwiki: Non Functional Requirements

Agile Coaching: Non-Functional Requirements: are user stories useful?

Artima: Johan Peeters: Dreams and Nightmares

Representing non-functional requirements is tricky. There are two kinds of non-functional requirement as mentioned in the aquis piece: independent, and distributed. When faced with a distributed non-functional requirement, adding it to your ‘definition of done‘ is called for. As you can tell by the links, there seems to be some difference in opinion in handling ‘independent’ non-functional requirements.

If you have pointers, please share in my comments. And thanks for the input in advance.

A solution to software maintenance from long ago?

Communications of the ACM: You Don’t Know Jack About Software Maintenance:

Software maintenance is not like hardware maintenance, which is the return of the item to its original state. Software maintenance involves moving an item away from its original state. It encompasses all activities associated with the process of changing software. That includes everything associated with “bug fixes,” functional and performance enhancements, providing backward compatibility, updating its algorithm, covering up hardware errors, creating user-interface access methods, and other cosmetic changes.

In software, adding a six-lane automobile expressway to a railroad bridge is considered maintenance–and it would be particularly valuable if you could do it without stopping the train traffic.

Related: Slashdot thread