January 2011 Blog Posts
The act of writing code in software development…

…occurs on but one card occupying a single position on the Kanban board.

posted @ Sunday, January 16, 2011 4:15 PM | Feedback (0)
The kind of analysis that makes ESPN the journalistic juggernaut it is

“Real football playoff games are what real football playoff games are.”

posted @ Saturday, January 15, 2011 6:27 PM | Feedback (1)
Dan North on Why Programming is not a Craft

Dan North has a post up about why programming is not a craft.  In general, +1.

He uses an analogy about masonry:

"There is a difference between the mindset of a master stonemason sculpting the expression on the face of a gargoyle and someone using the commodity blocks that make up a multi-storey car park. In the latter case the last thing I want is someone’s “personality” causing some of the blocks to be different sizes and no longer interchangeable, never mind the added expense of having someone manually hew the stone rather than using machine tools. In the former the stonemason’s attitude is indulgent. He is putting his signature (and his ego, and his reputation) into this magnificent representation of Hell’s best. If you just wanted an oil-pouring spout you could get one from a DIY store. Software practitioners – especially, ironically, the good ones – often lose sight of this. They fall in love with the software itself and start thinking of themselves as craftsmen of software."

I made a similar analogy using painters a while back

"When the ‘development of a developer’ pushes from Craftsman to Artist, you have problems. And it is an interesting problem. If you abstract the context as much as possible, wouldn’t you want to have Michelangelo instead of just some competent painter? Seemingly, the answer is obviously yes. But in the real world of business, the answer is no."

Anyway, read the post and the comments.  Good stuff (and some of it unintentionally hilarious).

posted @ Wednesday, January 12, 2011 1:45 PM | Feedback (0)
pmk–start with what you have

What does or does not count as Kanban varies over time.  It is what it is.

But, there are two principles that make a lot of sense.

1) Start with what you have

Though I’m sure Scrum professionals would disagree with this, from my perspective, a lot of Agile seems to imply that you need to have a company re-org to implement Agile practices.  Understandably, this scares off a lot of people. 

With Kanban, you start with what you have.  What is the current value stream?  Map it out.  Then, start from that.

2) Respect current roles

With Kanban, as I understand it, you don’t have to create new roles, eliminate old roles, or any of that.  You don’t have to nominate anyone as a ‘coach’ or any of that stuff.

Everyone gets to keep their current job and their current role.  You start with what you have, then improve.  That may end up changing roles and jobs.  Or it may not.  But, you don’t start by sending people to the unemployment line, or thinking that they will have to.  This is pretty important.


Kanban allows you to introduce change that doesn’t require massive initial changes.  In the end, you may end up with massive changes to your organization, but you don’t have to start with that.  You start with your current crappy organization and your current crappy processes.  You then try to make them less crappy (nothing about Kanban or anything else will guarantee that the less crappy desire actually works…you have to work at it).

But what this approach does allow is that you don’t have to make people worry that their current roles will be eliminated.  That’s pretty important.

posted @ Tuesday, January 11, 2011 8:48 PM | Feedback (0)
Fun Link: Never said about restaurant websites

Have you ever noticed how bad some restaurant web sites are?  The overuse of Flash, the occasional difficult in finding somewhat important items like, oh, directions, menus, operating hours, little things like that?

Apparently I’m not the only one.  Courtesy of John Gruber, the site Never said about restaurant websites tracks some of the more idiotic, not to mention humorous, aspects you can come across.  A current favorite:

“I love downloading PDFs. Even if the menu is totally out of date, it’s worth the thrill.”


posted @ Thursday, January 06, 2011 1:22 PM | Feedback (0)
Software Development for Children aka Paging is an option

The title of this post, even for me, is pretty obnoxious, but I also feel pretty strongly about this, so here goes.

Ayende posted about code that “should never hit production” in one of his usual code challenge blog postings.  I know that some people complain when he does this, but a) it’s his blog, he can post whatever he wants to, you don’t have to read it, and b) even if these challenge posts don’t touch something you happen to be facing yourself at any point in time, they tend to be pretty interesting, and c) if like me, you don’t always get what the challenge is, it’s a “teaching moment” so you should take it as it is.

Anyway, in this post, he posted “what is wrong with this code” (I’m not going to reproduce, hit the link to see it) and the answer was “this code doesn’t have any paging available”.  Furthermore, he stated “this is not optional.”  From the title of this post, you can tell that I don’t agree with this.

The “solution” that he posted (again, hit the link to see it) basically made the method that returned the potential result set break if it got above a preset page size limit.  Though it is slightly (though not really) unfair, my analogy is something like this:

Suppose you queried a database with the query “Select * from TableA”.  Ayende’s solution is to “cripple” the select statement so that it only returns some pre-defined page limit. (say, the first 1000 rows)  You can see the history of our debate about this here, where he cripples RavenDB similarly.  Since RavenDB is his product, he can obviously do whatever he wants to do, and, to the extent that I can stretch my mind to figure out why he has done this, I kind of, sort of, in a semi-intelligent way, get why he has done it.

Let me further explain why I think this is hideously stupid (technical term).

Code should do what you tell it to do

If you are in Query Analyzer or Management Studio (as it relates to SQL Server), if you issue a “select * from TableA” command, it should do just that.  The end.  The issuer of the command should know what they are doing when issuing such a command, and know any negative ramifications in doing so, but if I want to return a million rows from a table that has a million rows in it, then a command to return a million rows should do just that.  Crippling a select to return only a subset is simply idiotic.

Obviously, Ayende doesn’t think it is idiotic, and he explains his rationale (somewhat) through what he calls “safe by default” and which he explains in detail here as it relates to RavenDB.

As far as I can tell from our conversations, and how he has explained it elsewhere, the rationale is something like this: even smart developers make mistakes.  A very typical mistake that even smart developers make is in writing code that produces an unbounded result set which ends up producing production failures.  To prevent these mistakes, “safe by default” limits result sets.

Furthermore, as the owner/producer/grand poobah of RavenDB, he doesn’t want RavenDB to get a bad reputation of bad performance from producing unbounded result sets.  Thus, “safe by default.”  You can see this in his response to one of my comments:

I have seen too many systems where unbounded result sets brought the system to its knees.
Not on my watch

Don’t hinder competent developers due to what incompetent developers tend to do

For whatever reason, I have a reputation as someone who knows a bit about databases, especially (well, only) as it relates to SQL Server.  It is definitely an unfortunate fact that the vast majority of developers that I have worked with don’t really get databases as much as maybe they should (this is one of the reasons why they tend to like NoSQL solutions so much), and so they tend to sometimes do things like issue database commands that return unbounded result sets on large result sets when maybe they shouldn’t.  Concepts like “READ UNCOMMITTED” seem beyond them sometimes, even when they think that the discovery of the concept of a LEFT JOIN makes them think they are database gurus. 

Ayende’s “safe by default” concept basically preaches that they shouldn’t learn database fundamentals.  Let’s just “safe by default” their ignorance.  Instead of teaching people who don’t know database fundamentals some, well, database fundamentals, let’s go ahead and cripple the software, unless the competent developers know what built-in hidden crippling limits are set.

Paging might not be an option if you are building blog software

If you are building some sort of simple software that has a UI that lists a list of, well, stuff, then paging is pretty important.  If I want to see the last 50 comments posted to my blog, then I want to build a UI that only lists the last 50, and doesn’t do so by returning all 57,000 (or whatever) comments and then pages off of that.  We all know applications that do that, and we all know that those applications that do that, well, suck.  And the developers that build those applications should know better.

RavenDB, and all similar software, should be “Enterprise by Default” not “Safe By Default”

Perhaps I’ve completely misunderstood the potential of RavenDB, but, in my mind, it is a product/technology that is suitable to the enterprise, not just for blog software.  As such, I think it should be something that you could use in developing, for instance, trading applications, where you might have a huge amount of orders that you need to query, for instance.  You shouldn’t have to know “well, this software is designed to protect incompetent developers, so I have to do something different” in order to write code that does what you think it should do, because Papa Ayende crippled it.

Software for Children

Paging is an option.  If you are building simplistic software with simplistic UI requirements, then you do need to take paging into consideration but at the application level.  In any event, if you are pulling data from any sort of data source (database, flat files, etc.), you should probably spend a few minutes or so thinking about the amount of data you are pulling, and if it will affect your application.

Or you can use RavenDB and have production outages because no one knows why you aren’t getting all of the data you need to do your job, because Ayende says “Not on my watch.”

posted @ Thursday, January 06, 2011 12:05 AM | Feedback (2)
How to become a Thought Leader Online

One of the clients I work for is in a building whose elevators have those Captivate thingies (technical term) where they display news headlines, sports scores, weather updates, and various advertisements.  I have no idea if these things work or not from a marketing standpoint, but I guess they help pass the 45 seconds or whatever it takes to get to my floor.

One of the ‘brilliant’ advertisers is Harvard School of Business Management (or whatever they are called).  They tend to have ‘brilliant’ advice that really makes me want to go there.  Right.  Anyway, today they had something like the following on how to become a thought leader online (paraphrasing):

Become a thought leader online by showcasing your personality through posting your thoughts on your blog and in comments on other people’s blog posts.


I thought it was funny.

posted @ Monday, January 03, 2011 7:54 PM | Feedback (3)