arei.net - business
Developer Drift

Lately I’ve been the subject of what I call developer drift.

Developer Drift is the process by which an unchallenged developer slowly moves from one project to the next. The project may be in house or external or something completely fabricatec by the developer’s mind, but it basically means a developer is less interested in the current project than the project over the horizon. It’s the “Grass is always greener” truism made concrete in software engineering.

For me, this has taken the form of the fact that our customer wants really boring user interfaces which I can crank out like they are nothing. Problem is, I almost never crank them out, because they are meaningless and I never feel challenged/creative by them. (For me challenged=creative.) So I take forever to implement them and tend to make a lot of excuses on why this is taking so long. I feel justified in why it takes so long in the fact that when I am challenged, I really do crank out the code at an extraodinary rate which borders on the obscene when compared to average developers. I’m very prolific when I want to be.

The same thing was true when I was back in college studying English Literature. I could crank out a paper that I found interesting in no time flat, but assign me something that was pedantic and I’d sooner rip my own teeth out with a spoon (”because it will hurt more”).

So the real question I’m trying to find an answer to is “How do you deal with developer drift?” How do you stop people from losing interest when they are bored because the project has become boring? A project I used to work on is suffering from this very problem… they want to keep the team together, but the more boring stuff they do, the less likely they are to be able to keep the team together? Is there a way for this project to challenge it’s developers at the same time as doing boring things? Would contests or “feats of skill” help keep things from getting stale? Or should they just accept this as the life cycle of the developer, assume that people are going to drift away, and prepare for the next generation?

You tell me… how does your project deal with developer drift?

comment on this post
The 2.8% Raise

So, I’m due to have yet another annual review this week. If you read my earlier post “Deciphering What your Annual Review Means” you might recall I’m not really that excited by annual reviews or their results.

But, in preparation today I went out and did a little math. According to the Consumer Price Index (CPI-U) which measures how much things costs for the average person, the costs of things has increased an average 2.8% every year for the last 10 years. That means, any merit increase I see that is less than 2.8% means I’m losing money. And a raise of 3% means I’ll see .2% more money a paycheck! Hold me back I’m going on a spending spree. (That was sarcasm in case you missed it.)

Honestly, I expect 4% though and I’ll have to start lining up some interviews after the holidays.

comment on this post
Google Wave

Google announced yesterday a new offering called Google Wave.  There is an excellent article at TechChrunch that gives a complete overview.  All I can say is: THIS IS HUGE PEOPLE. The concept of Google Wave, the underlying idea is exactly the right step that the web and the internet needs to take. It’s a combination of Email, Instant Messaging, Twitter, Transparency, Collaboration, Wiki, Media sharing, and so much more.  Oh, and it’s an Open API and Open Source to boot.

If you’ve ever talked tech with me in the last three years and we’ve had the discussion about what is next in technology, then we’ve had a very similar discussion about the concepts behind Google Wave.  I’m not claiming Google has once again stolen my idea, but what I will claim is that there clearly is a need for this type of product that I saw and google saw and others saw as well.

Two things in particular I want to call your attention to that make Google Wave a huge idea:

1). Adhoc groups… What adhoc grouping really does for you is to let people create internet groups as easily as they create real world groups.  Think of it this way… when you walk into your work place break room and two other people walk in and the three of you start talking, you have created a group.  It’s fast in the real world, why can it not be like that in the internet world? For most of the internet when you want to form a group and start working together there’s a fairly large investment in creating the meta systems the group needs: setting up a mailing list, setting up forums, setting up a media store, setting up a user database, etc etc.  It’s a pain in the ass really, and it make setting up a group fairly non-trivial.  To some degree, Yahoo Groups and Google Groups automates a lot of that, but then you still have to go through the effort of getting people to join etc.

What Google Wave does is to make group creation simple and almost instantaneous.  Basically, you create a group by dragging a bunch of contacts together and off you go.  You can immediately begin discussion, expand the group, whatever.  Additionally, if you need other tools for that group like a map or a document or some other thing, you can add a widget or a robot to participate in that  group and boom, you have more functionality to fill the groups need.

2) The second feature that is huge for me is transparency.  Transparency is the notion behind Twitter in that you broadcast snippets of your activities out to the world and everyone can see what you are doing.  This is the beginning of transparency though.  To take it further you need to automate transparency such that as you do things, they automatically are published.  Of course, this brings up privacy concerns, but I think there are simple ways to solve this.

I know that Wave has some level of transparency, but it’s still to early to tell how much.  I suspect that even if this is an opt in version of transparency, like Twitter, that soon there will be robots and widgets (the extensions to Wave) that will automate a lot of this functionality.

The point is, though, that transparecny can be a huge social tool… but more importantly it could be a huge business tool.  And the company that sees this is going to get a huge edge over the company that does not.

Anyways, that’s my thoughts on Google Wave.  You should efinately check it out.

comment on this post
Do They Flow?

Lately I’ve been having a lot of conversations with people about what environmental factors go into creating the perfect work/space environment for a person.  This in part may have been introduced by Eric Spiegel over at Datamation posting a couple of articles recently asking Where’s Your Coding Happy Place and Finding The Coding Zone: Your Perfect Trifecta.  In the articles he discusses where is the best place for him to code and what external stimuli facilitates that.

In User Interface design there is a concept called Flow.  Flow represents that “in the zone” state about which Spiegel talks.  It is this perfect state of unity with ones work.  It’s a wonderful place to be and when we can achieve it we are at our most productive and do our best work. The problem with Flow or “being in the zone” is that it is amazingly easy to interrupt.  A ringing phone, a coworker asking a question, or piece of email can all break you ot of your Flow and completely disrupt the brialliant work you’ve been doing.  And once Flow is interrupted it is fairly hard to recover again.

Breaking flow is really easy to do and there are a number of pieces written about things that do this.  Just about any kind of interruption or distraction will do it.  In a User Interface, for example, a popup dialog box or an animated paper clip can be enough to completely destroy the user’s Flow.  It’s considered bad UI Design to create activities that break flow.

What is much harder to quantify is what exactly does it take to achieve flow?  This is ultimately the question that Spiegel is asking in his article about “The Coding Zone.” A lot of people go about achieving Flow in different ways: turn off the phone, close the email application, close the door, blast the music, have food and drinks at hand, turn the light on, turn the lights off, work at 3am in the morning, whatever it takes.  And a lot of people know what it takes for them to find Flow.

For me, Flow is about comfort and ignoring the rest of the world.

First and foremost I need to be comfortable.  A good chair, appropriate lighting, keyboard perfectly position in relation to seat.  All these things factor into comfort for me.  In particular, lighting is very important.  I’m one of those “likes to program in a cave of darkness” person.  Unfortunately, I’m also one of those people forced to work in a cubicle with overhead florescent lights.  I have managed to convince my fellow cube mates to keep the overhead lights off and rely on the personal cubicle light, but sometimes this takes a little arm twisting.

As to ignoring the rest of the world, well that’s fairly easy: turn up the music so you don’t hear outside sounds, don’t answer the phone (unplug it if necessary), and turn off the interrupting applications.  I’m pretty adepts at just ignoring the Instant Messages, Emails and Phone Calls that cross my desk.  I’ve also minimized the interruptions that they present… for example, email plays a simple low volume sound for me, but nothing else.  It lets me know it’s there, but does not draw me away from what I am doing.

Flow allows us to work at our highest, most efficient levels.  So why do our employers fail to set us up to achieve flow?  Instead of helping us to find our “zone” they do everything in the power to surround us with distractions.  In my workplace I have to dress a certain way, I have to be there at a certain time, I have to work in a cubicle listening the the minutia of my coworkers.  None of these things is helping me find my Flow.  In fact, all of these things are actively hindering me from doing my best work.

Let me repeat that: My company is actively hindering me from doing my best work.

Kind of scary when you think about it.  You would think that for a company, quality is the most important thing.  Yet from the actions of most companies, that’s hardly apparent.  In my workplace, quality is second to how the company appears to the outside world.  Perhaps that’s the nature of business, but it really just speaks to a lack of quality.  That makes me sad.

So, let me leave you with a question… but instead of asking how you find the best Flow like Spiegel does, I’m going to ask you this: Is your company intersted in quality or something else? Do they encourage flow, or do they discourage it?  Do they Flow?

1 comment, add yours now
Abstracted Fear in Software Engineering

Why am I never amazed when a software engineer wants to add complexity?  By this I am talking about all these abstraction layers of tools and frameworks and engines.  These tools/frameworks/engines are supposedly designed to save developers time, but really just add complexity to the stack and in the end don’t end up saving time at all.   Now, instead of just knowing programming language X I need to know Programing Language X and Abstraction Layer Y. How is working in two technologies easier than working in one?

I know some will argue that “Well you only really need to work in Abstraction Layer Y.”  Except that is never just the case.  Abstraction Layer Y is great until you have to do something that is outside the basic cases of Abstraction Layer Y.  Then you have to go back to working in Programming Language X.  Suddenly you’re working in both.

Don’t believe me?  Consider the case of Google Web Toolkit (GWT)… GWT lets you write web pages in GWT’s Java Toolkit.  It removes the need to work in HTML and Javascript and CSS.  Except, well, CSS is still use to provide your sites look and feel.  Oh, and you still use HTML inside the GWT code.  Oh, and you want to do something a little more complex than what GWT offers? Looks like you’re going to have to embed Javascript into your GWT code as well. So, instead of just having to work with HTML, CSS, and Javascript, now I have to work with HTML, CSS, Javascript and GWT.

Seriously, it’s basic math.  X + Y > X where Y is greater than 0. Yet time and again engineers are all gung ho about Abstraction Layer Y and I suspect it’s for one reason: Fear.  They’re afraid that they will have to do work, they’re afraid that their incompetence will be visible, they’re afraid that their value to the company will be realized. Fear is an extremely strong emotion and it can lead to panic, chaos and distrust.  But underneath it all is pure cowardice.  Cowardice to get things done, cowardice to admit your shortcomings, and cowardice to realize your own mediocrity.

And the worst kind of cowards are the ones that want to do trade studies.  Let us spend all of the budget and time for the project on comparing Abstraction X to Abstraction Y to Abstraction Z before we choose one.  Don’t worry though, we’ll have plenty of time and money after we run out of time and money to build the software.  Shouldn’t take more than two weeks, right?  The engineers that want to do this are the ones with the most to fear.  I believe that they would rather do trade studies than write code.  If you don’t want to write code, if you don’t LOVE to write code, you’re not a software engineer… you’re middle management.  You need to realize your fate and go work for the federal government wasting tax payer resources.

So, is there ever a case where Abstraction Layer Y makes sense? Probably, but it’s far, far less frequently than one might imagine.  Sometimes an abstraction layer can actually achieve the nirvanic state that it set out to do.  It’s kind of this sweet spot between being overly simple and overly bloated.  And I suspect that of the thousands of Abstraction Layer Y’s out there, only 1 or 2 have actually succeeded in finding that spot.

And yes, this is a little bit of a rant against Abstraction Layers… but it’s not a rant against the people who write Abstraction Layers.  The people who write Abstraction Layers are freaking genius.  Basically they have identified the fears of software engineers and are exploiting it to make money or recognition or whatever their particular motivation is.  This is brilliant in my opinion and I seriously need to start working at one of these companies.

To conclude: Abstraction Layer Y sucks and is a waste of time.  Just write the code yourself.  It’s not that hard.  If you think it is that hard, you need to quit your job now and go manage the fast food restaurant you were always destined to manage.

1 comment, add yours now
Free is the new Black

So, being a Java guy I’m fairly religious to Sun as a company.  I invested in their stock a while back (for good or bad) and thus I always kind of keep an eye on the company.  Recently I came across a series of video blogs by Jonathan Schwartz, the CEO of Sun.  The one I want to share with you is his second video blog.  The blog talks about the Sun view of the technological market place, and how giving brands away for free (like Java and MySQL and others) drives adoption, which in turn can drive revenue. Now, I’m no corporate financial officer, just a code monkey, but I found the blog well thought out and I thought I would share it with you.

My own company is currently working on a new project with the goal of productizing it.  We’re still in the early development of this product and haven’t had the discussion about how to sell it to consumers yet.  However, as I go about building the User Interface for this site I cannot help but keep thinking to myself (even prior to reading Jonathan’s blog) that the value of the site can only be realized by driving users to the site (or as Schwartz put it: building adoption).  In order to achieve this, the site would need to be largely free to the masses and make its revenue either through some ancillary stream or by charging only for some specific “higher role” usage.  As I designed the front end and go about coding it, I keep telling myself that the site is meant to be used by millions of people freely and must scale accordingly.

Like I said, I’m not the business guy, just a code monkey, but I really can see this notion of giving something away and finding revenue beyond just usage.  I like to think of it as the Field of Dreams model… In the movie Ray, the main character, is told to “Build it and they will come” which is much like the philosophy Schwartz is espousing.  The existence of the Field of Dreams brings the people, and there is surely revenue to be made after the fact: selling popcorn or something; the method is not as important as getting the people, driving adoption.  If you have the people, selling them something they want beyond what you are offering should be easy.

Anyway, if you’d like to read/watch the video blog I am talking about, you can find it here: http://blogs.sun.com/jonathan/date/20090306

If you’d like to read/watch the entire video blog series (there are four of them), you can  find it here: http://blogs.sun.com/jonathan/date/20090302

If you’d like to follow Jonathan Schwartz’s blog, you can find it here: http://blogs.sun.com/jonathan/

comment on this post