Tuesday, June 30, 2009

Leadership styles

As a person who ends up being a de-facto leader on any team I'm on, I often am stuck trying to subtly nudge the "real" leaders into thinking about the act of leadership. I have the advantage in this regard in that I've participated in hundreds of hours of leadership training over the years and have had a lot of experience working with teams to get things going. A quick primer that I think is very instructive can be found here.

So if you're a leader and your team is doing CRAZY things and they aren't happy and you aren't happy and you aren't getting the results for the organization that you require....

My first statement is "yes it's YOUR fault"
My second statement is read this again
My third statement is: adjust your leadership style to fit the situation. Do NOT treat 30 year old software developers like children, because they will begin to act like them. This should be no surprise.

In addition, make sure you attend any leadership training made available to you, it certainly cannot hurt... Certainly if your organisation is making leadership training available to you free of charge, it would be a really good idea to attend.

Sharpening the saw

I follow coding horror and recent read an interesting piece titled "sharpening the saw". This resonated with me and I felt compelled to expound on the concept a little.

In brief, sharpening the saw refers to the notion that working harder with a dull saw is not as effective as sharpening the saw, then cutting the wood. Obviously this is a generalization, but it alludes to a problem I see all the time and I honestly like the metaphor.

Leaders in software development organizations need to build an understanding about the importance of keeping their developers on the cutting edge. A developer using vi or notepad to write software is wasting quite a few brain cells on things that a modern IDE can do. In addition, a developer who only uses COBOL and has done so for 20 years is having their brain turned into a solid rock that will eventually be unable to produce anything helpful (note to COBOL programmers, this applies to java, fortran, ANY development language/tool)

I know, I know, there are a number of alpha geeks out there who code everything in vi, as a matter of fact, there are probably a few folks who actually write bytecode by hand. They will also all say "and I'm still faster than (name crappy programmer they've compared themself too)". In addition, someone will probably also send a link to a web server/3d rendering too written COBOL. What they're missing is that they're not as fast or effective as they could be.

The important point, however, is that a technology leader needs to help build an understanding among all the players about the importance keeping the saw sharp. Programmers know what they are doing and what the state of the art is. They also need to be given the best tools that are economically feasible so that they aren't wasting energy because of the tools they've been given.

If the excuse you use is "there's no TIME to do any of that" then you either #1 aren't fit to be a tech leader or #2 your leader is crushing your team. Either way I would encourage you to take personal responsibility for keeping your saw sharp.

Some specific examples of dullness:

#1 Do you have web developers with 13" monitors that flicker ? - Compared to the annual salary of even an entry level software developer, the cost of a 22-24" widescreen is trivial. Having workmen's comp claims from blind developers with migranes is going to be a fruitful legal area in a few years....mark my words.

#2 Do your developers go to the same tool for EVERY solution (java, C#, COBOL, whatever)? This is closely related to the Golden Hammer problem, but is really a symptom of developers not being exposed to new ways of doing things.

#3 Do you routinely hear things like "that's impossible, because {insert some problem that is highly technical, but irrelevant}"?

Monday, June 29, 2009

The ulitmate software development tool

I find it amazing that I work for a company that sells thousands of different hand tools, but we still seem to thing there is "one ultimate software development tool" and waste time trying to force professional developers to use a single tool to develop software.

Why is this? What is it about developing software that makes people think you really only need one tool to do it? Why is it obvious to everyone EXCEPT the software developers that Rational Application Developer is the "ultimate tool" for the job and is all anyone would ever need?

I'm to the point where I want to suggest a solution used by many auto repair shops.... Give all the developers an annual stipend to purchase the tools they think they want to use and be done with trying to figure out and enforce the "standard" tool.

Thursday, June 25, 2009

The journey is the destination

The other day someone was asking me a bunch of questions and they where getting exasperated because they didn't know ANYTHING about what I was talking about.
They asked something like: What's JSON? HTTP? Grails? Bytecode? JVM? How do I know how to find out what I need to know? How do YOU know all this stuff? Did you document any of this? What class should I take?

I responded with a link to http://google.com and http://www.wikipedia.org (which, BTW was not well received).

The fact of the matter is, I know a lot of people who think they really want to know things, but they have poor learning skills. They are of the mindset that they can learn something and then be done learning it. In today's world more than ever this is really just not practical.

For example, if you knew everything there was to know about web development two years ago and stopped there, by most measures you are pretty out of date (I'd say you were a dinosaur, but I'm an extremest). The rate at which new things to know are being generated is momentous, and you cannot hope to learn and be "done" because your knowledge is getting outdated faster than you can acquire it.

The key is that you need to constantly be learning... every day, every thing you do should be different and you should learn something from it. If you just do the same thing over and over because you've acquired some proficiency with it, you should push yourself to try new and innovative techniques that will teach you something along the way. If you keep doing the same old thing, you will fall hopelessly behind and never be able to catch up.

This poses interesting problems for, if the body of knowledge is growing at an exponential rate (it's certainly greater than linear), when are you "finished" with your education? What's the point of a 2 week class on a particular software package (or a 4 year degree in comp sci) if you only can ever do or know what you where exposed to during that time? If that is the case, you will never get better and be hopelessly out of date almost immediately (even with a PhD or postdoc credentials).

Learning isn't really a destination, it's a journey. It is a never ending journey, so accept this, and stop thinking you know everything because you learned it last year... you're out of date, hit the books, hit the internet, talk to your peers...

Sunday, June 21, 2009

Lazy Man's web hosting

I recently took over as the "IT Guy" for a local organization I volunteer for. As a guy who spends a lot of time working on web development, I seemed to be a good fit for the job. The website was basically a bunch of static files with a little bit of javascripty rollovers thrown in for good measure.

My mandate was to try and bring the site into the 21st century with things like: blogging, email notification, user forums, group calendar, and other features that would make things more interactive. At first I figured I'd just write some stuff myself, but then I started looking around. Twitter (microblog + sms notification), Google (calendar, online word processing), and Facebook (just about everything else) provide a bunch of these things for free. When put together, these give a lot of functionality for little more than the time to set up a few accounts and link the various pages together.

Now the site is MUCH more interactive, and we actually have no real "code". I sense a place for this sort of expertise in the market that I'm going to start exploring. Maybe I'll call myself a "social networking application professional" (SNAP).

Friday, June 19, 2009

Cultural regression

I work on a development team that for the last year or so was making a lot of progress toward being effective at #1 delivering useful software, but #2 responding to stimulus with the appropriate level of response.

At this point, however, we've fully regressed to our previous state of overreacting to very small stimuli. A small configuration change to a server and we act as if we've discovered the Russians (no offense to anyone from there) have launched their entire nuclear arsenal at our office building. Any small hiccup results in finger pointing, conference calls, and multiple teams running off to the excuse factory to build something to explain why something went wrong.

Heaven help the poor sap who tries to actually fix or avoid the problem, he will be beaten down with a litany of things that SOUND really bad and scary, but in fact have little or no real impact. I believe this is happening because folks are fearful of their jobs and want to give the impression that they are hard workers who are dedicated to getting things done. It seems that in this case, there is little interest in solving the real problem, because reacting the the problem of the day comes with reward for "lot's of hard work" and of course appreciation for the "countless nights and weekends by dedicated associates".

The cynical side of me thinks that many people are over-blowing the real problems in order to make sure everyone understands how IMPORTANT they are. One perennial problem that impacts me personally is an age old ( in our organisation) debate about source code control. For one, I am stunned by, and somewhat ashamed of, the sheer number of hours we have wasted on this debate.

At one point we gave up and just used Clearcase, but the sheer effort required to keep this tool afloat caused us to go underground and begin using SVN again. We then ended up formalising SVN within the organisation, but this ironically has caused MORE problems. More problems stem from the fact that the change management team, because they don't understand or WANT to understand the developers, just tells people to "do whatever they want" with SVN instead of having them follow good practices. This has the predictable effect of causing inexperienced developers to fall into obvious and predictable traps that could easily have been avoided had the change management team spent some time helping craft good practices using the tool.

Right now, we're busy attributing problems in the development process to SVN, RAD, Eclipse, Groovy, and a million other tools. The problem is, as far as I can see, all of the problems are really being caused by PEOPLE not tools. The tools are just convenient excuses and witless pawns in the game of "it's not MY fault".

Friday, June 5, 2009

Agile Enterprise Architecture

I've been reading with great interest many things about enterprise architecture. It seems that in our organisation, traditionally at least, there is little thought about the structure of the business as it relates to information management. While it appears there has been great thought in restructuring the organisation around strategic objectives, we seem to always forget that the information needed to obtain these objectives is critically important and the technology teams to manage that information should be structured and aligned in the same or similar way.

This is really interesting to me because it seems to reflect a profound ignorance of the value that a technology organisation can provide.

http://www.agilearchitect.org/agile/index.asp
http://www.agilearchitect.org/agile/principles.htm

Wednesday, June 3, 2009

Top Down Management

Simply doing what the boss says even though you know it's stupid is irresponsible. I know many people who do a lot of stupid stuff at work and am constantly amazed at how often completely competent and intelligent people will do insane things just because the boss said so. It probably shouldn't surprise me, after all, history is replete with examples where a charismatic leader inspired millions of people to do really, REALLY bad things. It just stuns me that, in a corporate environment, people will wander off and do really stupid things without even letting the boss know it's stupid.

I think this is, in part, a problem in technology organizations because it is not necessarily a meritocracy, but the the people "in the trenches" like to think that it is. After all, how inspired are you going to be if, after 23 years on the job, you're at the top technical position in the company, and the are still 5 layers of managers between you and the top.

It's as if we are still trying to pretend that technology jobs are the same as factory jobs: You've got "management" who are college educated folks, and the "workers" who simple do what their told. Somehow this culture, in large organizations, still persists and causes no end to chaos.

We really need to come to grips with reality and realise that technology is a skilled trade and the masters of that trade and the ones who should be in charge. How quickly would the medical community disintegrate if the "head of surgery" was a communications major who never once performed and actual surgery. What would happen if the person in charge of plumbing for a huge skyscraper was actually an English major. Obviously, if these folks are skilled leaders they could be successful, but not nearly as much as if they where also masters in the trade.

Tuesday, June 2, 2009

Right to privacy

First off, I am not a lawyer (IANAL) so this is not legal advice and hell, it might even be wrong.
I recently got involved (read opened my big mouth) in a discussion about RFID in the context of providing extra security for individual financial transactions. A point was made that the security of this scheme is suspect because, after all, they make wallets that block RFID scanners. My response was that I wasn't sure this was a real threat to security or privacy, or a perceived one. I was attempting to illustrate these "RFID proof" wallets could likely be a gimmick by some huckster playing up the fears of the populace.

The response I got quoted the fourth amendment and I promptly got a little confused. I'm always a little uneasy when people mistakenly think the constitution grants them some explicit right to privacy. From my limited perspective, the point of the constitution is to limit the powers of government over the people, not to dictate what an individual can or can't do.

I would argue that it is probably unconstitutional for the government to outfit patrol cars with RFID scanners and then patrol the neighbourhood for stolen merchandise (in your house) or to set up checkpoints along the highway to search for contraband...

But is it is certainly not unconstitutional for a private business to engage in activities to determine what customers do while in their place of business. After all, it's private property, there is nothing compelling you to be there... I didn't sent my thugs to your house the grab you and force to to buy things in my store (website). You voluntarily left your home, drove to my store and gave up a great many rights to privacy by doing so.

All of this is ancillary to my original point which is... who is outfitted to track RFID tags to that level of detail right now? I recently did the math and a 64 bit tag has enough unique combinations to store 10 million unique codes for every human who has ever ever lived... EVER. I'm sorry, but I know for a fact we have a VERY hard time tracking and infinitesimally smaller number of things through our supply chain, tracking that number of unique tags is going to be a lot of work (not impossible).

Monday, June 1, 2009

The Human Factor

Jeff Atwood in Coding Horror mentions in his blog that:

The key word here is "fun".

When you interact with other people online ..

* sending an email to a mailing list
* posting on a discussion forum
* chatting on IRC
* revising a Wiki entry
* entering a blog comment

.. like it or not, you're participating in the world's largest MMORPG. Lurking is always free. Those that choose to go beyond lurking, to add some tiny bit of content to the web, do it because they find it enjoyable. On some level, they're having fun

Enjoyability of a user experience, even for a back office application is important. More than that, most people do what they do because at some level they enjoy it. If you structure your applications internally so that "doing the best thing for the business" increases the level of enjoyment at work, you're on the road to success.

Obviously, this can be taken to an extreme, but let's take a recent example. We recently deployed and evangelized yammer at work and a great many people have taken to microblogging as a communication tool. I'm not sure exactly WHY we decided to start this, but if the intent was to begin to break down barriers and get functional stovepipes to begin communicating better, somebody deserves a handshake, pat on the back, and perhaps even a beer at the local drinking establishment.

I won't go much further on extolling the virtues of using a microblog at work, but I noticed an interesting side-effect. People are using this tool, embracing it, and... shock of shocks! talking about non-work related subjects! From my perspective, this is GREAT, they've not only begun to openly communicate, but they're comfortable enough to begin to connect intellectually and emotionally with people they would have otherwise never even met (we've got 250,000+ employees).

On the other hand, folks in management can now see what people are talking about. This makes some folks very nervous, to the point that they refuse to use this tool. In fact, they approach me (one who perhaps spends TOO much time yammering) and say things, in hushed tones, like "do you know that the executives can SEE what you're writing?" "People might think you don't have any work to do and you'll get fired."

I won't go into my tirade about how water cooler conversations are as important as formal meetings at this point. I would, however, love to walk through the cafeteria, gym, coffee shop, or any of the other non "work" related areas of our headquarters and make these same statements. Somehow, there is a strange fear of "real time" awareness and communication that still hampers people's ability to know what they should or shouldn't share with their coworkers.

More importantly, one of the "channels" in yammer was about video gaming. On this channel, there was quite a bit of activity (especially by those in IT). I think this is GREAT! I think video gaming is the future of user centric software design. How much more output could we get from our people if we could get all our business applications as engaging and addictive as tetris or freecell. How much more of their free time would they be willing to donate to our cause if it they enjoyed their work as much as their video games? More importantly, how much more connected to each other are our employees and customers if we are personally engaged in conversations about things we care about?

What happened though, was that someone, somewhere was shocked! SHOCKED I say! that an employee who spends a mere 60 hours per week at the office has time to write a two line blog entry, three times per day about "video games". One of the participants in the "video game" crew yammered a chilling message to the group about how "we are being watched" and you should only talk about work related things.

The problem right now is where does work stop and fun begin? In the ideal world they completely overlap and you are not a split personality, but a whole person who get paid to do what they enjoy.