The amazing adventures of Doug Hughes

Archive for July, 2010

Ant4CFs Documentation and Ant 1.8

Ive been notified twice now that there are problems running Ant4CF on Ant 1.8 or later. I wanted to let those users of Ant4CF know that Im aware of these problems and will eventually update the project to work with Ant 1.8. My guess is that the project is being compiled against an older Ant API that isnt compatible with Ant 1.8. That said, a quick Google search on this didnt turn up any details. Ill take care of this before too long and let everyone know about it!

Also, a few people have had issues getting Ant4CF up and running. The usual culprit here is the config.properties file that users need to edit to point to the local installation of Ant. On Windows in particular this can be confusing. The cause of this is that the default path to Ant is /usr/bin/ant. On *nix OSes this is a path to an executable. But to a Windows user this looks like it might be a path to a directory. Ive updated the documentation to explain that on Windows this path is likely to be something more like c:/program files/ant/bin/ant.bat. Also, because there are spaces in the path, the path needs to be surrounded in quotes in the configuration file.

And thats it for Ant4CF news. But, let me ask you, do you use Ant4CF? What do you think of it? Any suggestions on what I could do with it next?

Ill Be At CFUnited After All!

It looks like the stars have aligned for me, after all and I will be attending this years (and the last ever) CFUnited. I managed to schedule a couple client meetings at the same time and that really helps justify the expense.

If youre going to be there too, please look me up! Why? Well, theres no exciting reason, honestly. Unlike past years, Im not giving anything away. Honestly, I just want to meet as many people as I can, hear what theyre working on, and learn as much has I possibly can. And, if Im lucky maybe Ill find a business opportunity or two.

Also, because I waited until the last moment, it seems that the Landsdown resort is booked up for Wednesday night. If anyone has some spare floor space or a couch I could crash on for one night, Id be greatly indebted to you! Thanks!

An Introduction To NodeJS, A JavaScript-Based Server

Recently, Ive been dipping my toes into languages and technologies I might not previously have. For the last ten years or so ColdFusion has been my bread and butter. Yes, Ive tinkered with other languages like Groovy, but now Im trying to make a more concerted effort to learn more about things I otherwise might not.

Recently Ive been teaching myself a little Ruby and Rails. A local buddy of mine, Bucky Schwarz brought the The Raleigh-area Ruby Brigade to my attention. Last night I attended one of their meetings anticipating learning more about Ruby. However, the topic was not on Ruby, but on NodeJS. The talk was given by Aaron Heckmann.

I recently heard about some developments around JavaScript based servers. Some people are making use of them because they can apparently handle insane loads. Ive heard of some applications handling thousands of connections a second. Last week I tried to Google around and see what I could find, with no luck. So, imagine my surprise when the Ruby meetup topic was about NodeJS, a JavaScript server.

Node JSNodeJS is the brainchild of Ryan Dahl and makes use of Googles open source V8 JavaScript engine. Because of this, NodeJS benefits from the recent competition between Firefox, Google, IE, and Opera on JavaScript engine performance. In other words, NodeJS is very fast.

Installing NodeJS was very simple for me, since Im on OS X. I cant say it will be quite that simple for those in the Windows world since you have to download and build the source code. This was as simple as running ./configure, make, make install. Once NodeJS was installed I was able to run a couple of simple sample applications without any problems.

Much to my surprise, I was able to make small changes to these sample applications because I know JavaScript! I was able to take the HTTP hello world application and change it slightly. The same was true for the network socket sample. Cool!

My initial impression with both of these samples were two-fold:

  1. Wow, that starts up fast! For the simple hello world-style applications there was literally no wait to start NodeJS.
  2. The basic sytax was simple and easy to read. All you need to do to start listening for HTTP requests is this:
var http = require('http');
http.createServer(function (req, res) {}

Now, there are some challenges with Node. In particular, its intended to be pretty low-level. Those of us more comfortable working with higher-level languages might find Node, perhaps, a bit cumbersome.

Thankfully there are a lot of handy modules available for Node. One of these is Express. Express is a small server-side JavaScript web development framework for NodeJS.

To install Express I had to first install Kiwi, which is yet another package management system. To install Kiwi, I simply cloned the Git repository locally using:

git clone http://github.com/visionmedia/kiwi.git

Next, I ran make install in the newly downloaded kiwi directory. For me, this just worked.

Once I had Kiwi I was able to install express by simply running:

kiwi -v install express

Now that I have everything I needed I was able to create copy and paste a quick Express hello world application:

var sys = require("sys"),
kiwi = require("kiwi"),
express = kiwi.require('express')

get('/', function(){
     this.redirect('/hello/world')
})

get('/hello/world', function(){
     return 'Hello World'
})

get('/goodbye/world', function(){
     return 'Goodbye World'
})

run()

In the example above, once you start node running this application, you can hit this application at http://localhost:3000. The default request will redirect you to /hello/world. You can also go to /goodbye/world.

The Express module has a range of other features for routing requests, rendering views, and more. Frankly, I havent taken it much beyond whats in this article yet.

Despite the relative youth of the NodeJS project, it seems to me like theres a lot of energy and excitement behind it. You only need to look at the Module list to realize there are a lot of people working very hard on this project. Just to highlight a few, there are modules to connect to various databases, including MySQL and MongoDB, and many others. There are also modules for logging, templating, testing, and much, much more.

Overall, NodeJS really seems worth trying out and experimenting with.

Dan Wilson Will Kick Ass at CFUnited

Last Thursday the local Triangle Area ColdFusion User Group (TACFUG) held a meeting where our very own Dan Wilson gave preview presentations of two of the four presentations hell be giving at CFUnited in the next week.

Dan Wilson Kicks AssThe first presentation he gave was Get the Lead Out – Practical Optimization. As with everything Dan does, this was a very good presentation. Dan started out the presentation with a set of slides asking which was faster between two sets of similar code. For example, he compared using cfif to cfswitch. I was really surprised by this, but it turned out this was a red herring and wasnt the real meat of the presentation. Dan gets into a lot of detail about holistically testing applications. In fact, he even taught me a few things I didnt know, and I like to think I know a thing or two about this stuff.

The second presentation has what may well be the best title Ive ever seen at a tech conference, Cache Me if You Can. Of course, that title doesnt make any sense to our Australian friend, Mark Mandel, but well just have to deal with that. In this presentation Dan talked about a whole range of assumptions many developers make about caching. He also makes some very interesting points about being sure that you know what youre caching and why. As usual, this was an excellent presentation as well.

Dan has a really easy and relaxed style of presentation that I really admire. If youve not heard him talk and youll be at CFUnited, then I highly recommend you catch his talks!

CFUnited 2010 This Is Your Last Chance!

I wanted to take a moment and let those developers in the ColdFusion community who havent already heard know that this is the last year for CFUnited. Sadly, Ive heard that its lost money the last few years and apparently its being shelved. Who knows if this will be a permanent thing or not, but its safe to assume it is.

CFUnited Conference What does this mean? Well, it means that if you havent gone before, that this is the last chance for you to come to the largest and most focused ColdFusion conference in the world (at least that I know of). Not only that, but there are also always presentations about related technologies like Flex, JQuery, and more.

Here are some of the reasons I think you should go:

  • I know most of the speakers and I can tell you that theyre all freakin smart. Some of them are downright prolific in their talent. All they want to do is share that information with you, the attendee. Furthermore, all of these people are very approachable and love to talk about ideas, problems, concepts, and more. Buy them a beer and youll have a smart friend for life! Could you ask for a better resource?
  • The networking opportunities are very good as well. For the last few years Alagad has sponsored CFUnited and I think weve done well meeting new potential clients and making our name and our development services known to the community. Clearly this is valuable for businesses. However, for the individual it can be even more valuable. We all know the market is very shaky right now. I assure you that the more people you know in the business the better your prospects are for finding new work, should you need to.
  • The reverse is true too. That is to say that if youre looking for ColdFusion talent, this is where to find them. The conference attendees are all passionate enough about ColdFusion to either convince there employers to send them or to pony up their own hard earned cash.
  • Theres no better place to find out about the latest and greatest news from the ColdFusion community. CFUnited is historically where Adobe makes major announcements or demos new and exciting technology. Go and get ahead of the curve.

You should also know that today, July 15th is the last day for early bird pricing. There are also special offers for those who are unemployed. Find more information about this here.

So, why am I writing this entry? Some of you in the community already know that I wont be at this CFUnited. Sadly, thats true. I simply cant make it this year. I really wish I could, but the stars are not aligned in my favor. I suppose Im hoping someone else will go in my place and get all the benefits Im sadly going to miss.

A Technical Pecha Kucha Con?

This year I was introduced to the Pecha Kucha presentation format. For those not familiar with it, Pecha Kucha (pronounced peh-cha koo-cha) originated in Japan and translates as the sound of conversation or chit-chat. A Pecha Kucha presentation lasts only 6 minutes and 40 seconds and is made up of 20 slides that automatically advance every 20 seconds.

I became aware of the Pecha Kucha format when Bob Silverberg, everyones favorite Canadian ColdFusion developer, volunteered to put on a Pecha Kucha BOF session at the CF.Objective() conference. Typically, Pecha Kucha sessions are about something the presenter is passionate about or deeply involved in. Ben Nadel talked about people-centric software design. Steve Withington talked about beer. There were a few other topics, though unsurprisingly, most were technical in nature. At the time, I was under quite a bit of stress and so I wrote my presentation on stress and how I manage it.

Personally, I thought the format was excellent. The crowd was really into the presentations and energetic, laughing and cheering at all the right places. Since then Ive given the presentation two other times with a similar feeling.

One of the things I like about the format is that it forces the presenter to be concise and get their point across as quickly, clearly, and efficiently as possible. Additionally, if I’m uninterested in a presentation I only have to wait about five minutes for it to be over.

Since giving these presentations Ive pondered what would happen if you crossed a technical conference with Pecha Kucha? Lets face it, theres way too much new information in the technology world to keep up with effectively. You could read blogs all day long and still not be up to date on the majority of whats new.

Consider that over the last few years weve had a renaissance of dynamic languages, new frameworks have emerged, software development approaches have changed, and more. In a nutshell, things are changing, and fast! As an example, I recently heard about the reemergence of server side JavaScript. Who would have thought?!

If we dont know whats new then were stagnating. For this reason Im seriously thinking about putting on a language agnostic tech conference. Ive loosely titled this Pecha Kucha Con. The idea is that the conference would be either one or two days with only one track. Each presentation would be 6 minutes and 40 seconds long on a topic that no other speaker would be talking about. The purpose of these talks would be to give the audience a small slice of information about this topic and just enough to get started researching it, if theyre interested.

Im thinking that in one day you would have approximately 27 presentations grouped in fours. So, for example, from 10:00 am to 10:30 youd have four presentations. There would be fifteen-minute breaks every 30 minutes for refreshments and networking. Add in a long lunch and morning and evening networking events and youve got a lot of opportunity to get introduced to a lot of things you wouldnt otherwise find out about. Furthermore, the technology agnostic aspect would hopefully create an opportunity for cross-pollination where maybe there isnt typically (like between, say, .NET and Erlang programmers).

I think theres a lot more that could go with this as well. For example, make it a multi-day conference. Or have multiple tracks perhaps for programming, management, design, etc. Perhaps this conference could be held both online and offline. For example, maybe there would be a venue in RTP, NC, Washington, DC, and Los Angeles, CA. Each on of these events could broadcast through Adobe Connect to each other and to the general public who might not be close to one of these areas. This would allow for very wide audience involvement and unique conference experience.

So, on the surface, do you think this sounds like an interesting idea? Do you have any additional ideas that might go along with this? Ive purchased the domain name pechakuchacon.com I suppose Ill see what sort of interest there is and decide if its worth the effort or not.

A Quick Overview of Graphing Databases

I recently started work on a new project which, to avoid getting into too many details, is a social media application with similarities to Twitter, Facebook, and FourSquare though it is not a clone of any of these!

This is currently a hobby project of mine that I think may have some future potential. As a result, Im allowing myself the freedom to experiment with technologies outside of what Id normally work with. On this specific project I plan to use Ruby On Rails 3 (currently in Beta) and deploy the final application to Heroku. (Side note: we really need something like Heroku in the ColdFusion world.)

Because this is a social application and many social applications make use of so-called NoSQL databases, I started researching these. My research began by talking to John Paul Ashenfelter at this years CF.objective(). John gave a talk entitled Say NO to SQL. Sadly, I missed this talk, but I sat down with John after the fact and talked about the various types of NoSQL databases and where they fit in.

It turns out that there are several types of NoSQL databases. These include column stores, key value stores, document stores, and graph databases. For this article Im going to ignore all except for graph databases.

So, what exactly is a graph database?

Lets start exploring this by looking at standard relational database systems. There are a number of well-established RDBMS such as MySQL, PostgreSQL, MSSQL, Oracle, etc. Chances are youre familiar with at least one of these. These types of systems store data in tables that are made up of columns. Each record in the database provides values for these columns. For referential integrity, some columns may reference a column in another table via a foreign key.

These foreign keys are the only way to relate data in a relational database. And, for the most part, through normalization, these systems can model essentially any data.

The problem isnt really in the modeling however, the problem is in how you get data out of the database. Consider a situation where youre modeling a social network. In this network I may have dozens of friends and you may have dozens of friends, and each of our friends may have their own dozens of friends. Invariably, some of these will be the same people.

Now, I ask you, how would you find out how I know you using SQL? How would you be able to figure out how I know Keven Bacon in SQL? Furthermore, how would you do this in any efficient manner? The answer is: not easily.

The fact of the matter is that despite the fact that you can model this data in relational databases, these systems are simply not optimized to query this type of information back out.

There are, however, alternatives. You guessed it, graph databases.

A graph database is a system that stores data in nodes that are connected to other nodes via edges. In most graph databases nodes and edges can have associated properties. Most graph databases allow for traversals between related nodes.

This image shows how you might model the information used in a social network.

Example of Graph Relationships

In the example above I have created five nodes to represent people in a social network. Ive also created relationships between them. The relationships would be the edges referenced above. Note that each node and reference has various properties. For example, you can see that I (Doug Hughes) am 32. You can also see that I know Joe Blow and Jim Bob. Of course, the graphing database can also store different types of objects such as products, etc.

One of what is supposed to be a defining characteristic of a graph is the ability to quickly traverse nodes. So, using an API provided by the graph database system I can quickly find out how I know John Doe. The answer is through our mutual friendships with Jim Bob (or through Jim and Belva). This is also useful for situations where you want to find common themes. For example, Amazon has a feature that shows what other customers that purchased a specific product also purchased.

There are variations between graph databases as well. For example, some use directional relationships and others use bidirectional relationships. The difference is that a directional relationship may not necessarily be reciprocal. For example, on twitter, I could follow you, but maybe you dont follow me. Bidirectional relationships are more like Facebook where if Im your friend, youre my friend. The example above would be bidirectional.

Because of the nature of graph databases, they are very fast for traversing nodes and finding related data. Im not entirely sure at this point where they break down. Ive read that theyre not as efficient for large-scale updates where you may be updating a lot of records at one time. Beyond this, your mileage may vary.

Ive done a lot of reading up on different graph database. The ones that stuck out to me were these:

Neo4J

Neo4J appears to be the most widely used graph database and is the one Ive spent the most time researching. Its available through a very restrictive AGPL license or commercially. It strikes me as very expensive to license.

Neo4J is an embedded directional graphing database written in Java. The FOSS version provides a JAR that you download and make use of in your application. Alternatively, there is also a stand-alone version that exposes a RESTful API.

There are a number of language bindings available, most of which use the REST API. There are however native JRuby bindings. Id be interested in this, expect for the fact that Heroku doesnt support JRuby.

Its my interpretation that Neo4J still needs a little baking to really be a good solution. For example, the REST API has no security built in. Anyone who can connect to the port that is exposed can add, update, or delete information in the database.

Neo4J handles scaling and redundancy similarly to other RDBMS. Specifically, the paid version allows you to somehow replicate data to hot-spare servers. If you need to shard your data across multiple servers you must manage it manually within your application.

From everything Ive read, Neo4J really seems to be the strongest graphing database. However, it has negatives in that Im not sure if the paid version differs any from the FOSS version. Documentation is pretty good, but seems to be lacking in some areas (specifically related to high availability).

Oh, its also apparently blindingly fast. However, I cant find any information on how the use of the REST API impacts performance.

If youre interested in experimenting with Neo4J in ColdFusion, I suggest you check out Brian Panullas blog entry entitled Using Neo4j Graph Databases With ColdFusion.

InfiniteGraph

InfiniteGraph describes itself as distributed database for web-scale systems. Currently in public beta, it is slated for release in late July 2010 (any time now, really).

This system is written in Java and supports server based, cloud based, and embedded use. The basis of this InfiniteGraph is that it can apparently see nearly linear performance scaling by the addition of additional servers.

I cant find where I read this, but my memory is telling me that InfiniteGraph uses bidirectional relationships.

InfiniteGraph will be a closed source, proprietary, for-fee product when it is released. They do have programs for free usage, but they seem to tie you to a specific hosting provider. It even looks like you need to pay for developer licenses.

This bears watching, but Im concerned about the licensing details and pricing. Furthermore, it might not be terribly easy to connect to from non-Java languages. A C# API is due in the next major release.

FlockDB

FlockDB is Twitters own graphing database. However, this is not quite what it seems to be. As the Twitter developer blog explains in the provided link, FlockDB was engineered as a specific solution to scalability problems Twitter was experiencing.

Behind the scenes FlockDB actually just uses MySQL. Additionally, despite the fact that it FlockDB is a graphing database, its not actually optimized for graph traversal. Instead, its very good at adjacency lists (whos following whom). Flock also allows for horizontal scaling, though this appears to be somewhat manual.

In the end, I honestly havent done much reading on this tool since it didnt really match what I was looking for in a graphing database.

Other Options

There are a number of other graphing database engines available, but most of them are fairly specialized or are pretty esoteric. Im not sure I would want to deploy a large scale system on any of the alternatives.

What am I Doing With My Social Application?

After doing quite a bit of research in this area and briefly experimenting with Neo4J, Ive actually elected not to go the route of using a graphing database for my project. The reason I made this decision is that all of the graphing database implementations I looked at were either immature, lacking in documentation, or were difficult to talk to from my chosen language.

Furthermore, you may remember that my hosting platform of choice is Heroku. Heroku actually runs in Amazons EC2 service that makes it easy for me to run my own EC2 servers to host my database server instances. However, in the end, Ive decided to simply use PostgreSQL which Heroku already supports.

I have to keep in mind that what Im building right now is really just a hobby application. I cant justify spending a ton of money experimenting with a database offering that isnt really required at this point. If, in the future I do reach a point where I need really, really, fast access to related data I may port over to using Neo4J. Only time will tell!

Don't be Scared of Hiring out of State Employees – Here's how Alagad Did It

Anyone whos ever hired employees for their business knows that it can be an intimidating hurdle to get past. Beyond the difficulty of picking the right person, youve also got a lot of details to take care of. Youll need to make sure you have workers comp insurance, that youre paying unemployment taxes, that youre withholding taxes, that youre doing everything legally within your state, and more. And, when you get into the reality of offering benefits like health insurance, it gets real expensive and difficult to manage very fast.

When Liz (Alagads reclusive VP and my wife) and I decided it was time to start hiring employees we were extremely constrained in what we could do. We knew we needed to offer a competitive salary and benefits. We also knew that we didnt want to have any physical offices. There were several reasons for this, but primarily its because we didnt really have any money.

I also knew that I didnt want to restrict the talent pool to my geographic area. Dont get me wrong; the Triangle area in North Carolina is home to some serious talent. But that doesnt mean everyone here would want to work for me or that Id want to work with them. By not having offices and allowing telecommute workers I could theoretically hire the best talent I could afford, no mater where they lived or worked.

But how to do this?

Our strategy at first was simply to muddle through it. Our first employee was hired in Texas. What we (meaning Liz) did at this time was to go to government websites in Texas and research what we need to do to hire people in Texas and learn what taxes we needed to pay, etc. At this point we also made use of QuickBooks payroll service and, collectively, it worked well enough.

We also used a little known tax strategy to offer benefits. Alagad wasnt big enough to offer a group plan that was affordable so we encouraged our employees to purchase their own health insurance. The company was able to offer a stipend towards this insurance pre-tax.

This approach worked well enough when we were very small, but broke down as we hired more employees in different states. The problem is that each state has different requirements and laws. These quickly became stressful and difficult to manage. For example, we once hired an employee in California. To the best of our research, we determined that to hire someone in California you had to register as a franchise with the state and have a physical address in the state. In all honestly, Im not sure that we ever did get this sorted out correctly.

Around this time we began a good friend of mine was struggling with the same challenges and mentioned that theyd been talking to a company called Administaff. A little research into Adminstaff taught me that they are a class of company known as a Professional Employer Organization, or PEO. A PEO is a class of company that essentially hires your employees for you and leases them back to you.

Administaff already has the ability to hire employees in all 50 states. They also already have thousands of employees. This give them economies of scale that I cant hope to match with only a handful of employees. They can get the best rates for group health insurance, workers comp, and other expenses. Additionally, they have people specializing in all sorts of HR-related details. For example, they can give you guidance through difficult employee situations like hiring and firing to help insure that youre following the letter of the law.

Additionally, they have all sorts of online services to help you find information and manage your employees. They also many optional employee benefits like 401K plans, college savings plans, adoption assistance, and more. Beyond that, they offer their clients all sorts of free value-added services like recruiting. This is really useful if youre trying to hire someone for a job thats outside of your network. To explain, I know a lot of programmers and its easy for me to hire them. But, if I need a good sales person or user experience person its a lot harder for me to find them. Administaff recruiters will do a lot of the grunt work in this area for you.

So, imagine how stunned I was when we asked them what the costs would be to hire on my entire staff. At the time, I think we had maybe six or so people for a total annual salary of more than a half million dollars. I figured the service would be really expensive. I was wrong. Because of the relatively small size of my staff combined with their relatively high annual pay, Administaff could give us a really good rate.

The way Administaff works is they will propose to you a percentage that gets tacked on to your payroll. This rate is somewhat negotiable. I cant remember our final rate, but lets say for the sake of argument it was 17%. We quickly realized in what a fantastic deal this was! When we added up just our hard costs of hiring employees on our own it cost way more than just hiring Administaff. This was true without even adding in the cost of Lizs time.

Thats right. It cost less to get the vastly superior services of Administaff and all of the benefits they offer. And it was a lot easier.

Now there were some challenges to working with firms like Administaff. First off, no mater what, youve got to pay your taxes. Small businesses are tempted sometimes to skip paying taxes so that they can make their payroll payments. The logic is pretty easy: If I dont pay employees they walk. If I dont pay the government Ill get spanked later. Its not really a hard decision to make. Personally, I did that early on when we were handling employees manually, but you cant get away with that with Administaff.

Administaff isnt the only PEO in town. There are lots of other PEOs out there. In my research it seems that a few years ago there was a real boom in this space and many companies came onto the scene very quickly. But, not all PEOs are made equal. Apparently there are a fairly large number of PEOs that charge a smaller percentage than Administaff. However, these cheaper PEOs may not offer the full range of services that Administaff does and they may not be as stable either. There were a number of PEOs that went belly-up back around 2008 leaving their clients high and dry.

So, if youre struggling to figure out how to manage hiring employees in your state or any state, how to offer competitive benefits, and making sure youre doing it all legally, you should really talk to a PEOs. I cant personally speak for any other PEO, but I can say that Administaff has been central to Alagads success.

If youd like to talk with someone at Administaff please let me know and Ill connect you. I do get some sort of referral benefits when I send clients to Administaff, but I assure you I didnt write this article for that purpose. But what the heck, if theyre offering it, Ill take it.

Alagad Business Book Reviews: Drive by Daniel H. Pink

I recently read the book Drive: The Surprising Truth About What Motivates Us by Daniel H. Pink. This book is a review of what truly motivates people. Apparently, our society as a whole pretty much takes the wrong approach at motivating people.

Drive by Daniel H. Pink The book explains that for a long time humans have been using the “carrot and stick” approach to motivation. For example, an employee’s compensation is often tied to specific metrics like hitting a targeted release date, or reaching certain sales goals. The better the metric, the better the pay. The worse the metric, the worse the pay.

However, this is apparently a recipe for underperformance. The author sites a number studies that show that, yes, tying performance to compensation does focus their attention on a task. The problem is, people focused their attention on the wrong places and creativity suffered. It turns out that, with the exception of unskilled labor tasks such as a repetitive factory work, that the greater the carrot, the worse performance actually gets.

As an example, in one of the studies the author cites, participants were given a candle, a box of tacks, and matches. They were asked to find a way to affix the candle to the wall in a way that would prevent wax from dripping on a table’s surface. Some participants were offered a cash reward for completing the problem quickly while others were simply told they were being observed to see how long it took them to solve the problem. The result was that the second group, the ones who were not offered the cash incentive, completed the problem more quickly.

Take a moment and think about how you’d solve this specific problem. Go ahead, I’ll wait.

Now that you’re back, I’ll tell you the solution. If you were to dump the box of tacks out you could then use the tacks to stick the box to the wall. You can then place the candle upright in the box and it won’t drip wax onto the table when burnt. It seems that the added incentive of extra money focused people too much in the specifics of a given problem and blinded them from thinking, quite literally, outside the box.

Ultimately, the author breaks motivation down into three things that people want out of work:

Mastery workers want to improve their skills
Autonomy workers want to control how they work
Purpose workers want to feel like they’re doing something important

Of course, when it comes down to it, everyone needs to eat and money is a rather central component of that. So we’ve got to be paid for our work to achieve some baseline.

To the tech community this may all be fairly obvious. This explains why so many programmers a “real” job, but spend their nights and weekends contributing to open source projects. Namely, the open source work gives them practice and challenges them in new and interesting ways. This is more satisfying than the dry work at the office. They also get to control how and when they work. And lastly, they feel like they’re contributing to a greater good. This really epitomizes another key concept in the book, intrinsic vs. extrinsic motivation. Intrinsic motivation drives you to do work because you want to. Extrinsic motivation drives you because you need to.

And, according to the author, apparently, all of this can be boiled down to a simple strategy that companies can apply to motivate their employees. Essentially, you need to pay them enough to take the issue of money off the table. After that, empower them to do their best work. What you’re doing is moving their focus off from the money and onto the work.

After reading this book I was left thinking about how this book applied to Alagad. Honestly, I think it has some pretty interesting and direct applications.

It’s reasonably well known that Alagad currently pays its employees hourly. I established this because, in my previous life as a salaried worker I felt like salary was theft. All of the companies I worked for previously paid a low salary and frequently demanded long hours in the office, effectively lowering what I’m being paid per hour. Additionally, Alagad has historically billed clients on a Time and Materials basis. So, if Alagad is billing for an employee who’s putting in 50 hours in a week, shouldn’t Alagad pay that employee proportionately?

Now, with the benefit of hindsight, I think that may have been a mistake. There have always been some employees who would happily work 50 or 60 hours a week on average. This was great for Alagad, which could bill for this time. However, I think there may have been unintended consequences of this policy. For example, just because a programmer worked 50 or 60 hours doesn’t mean they did quality work during that period. That’s not to say my employees ever didn’t give me quality work, but I know that part of the incentive to putting in those long hours was simply to make more money.

So, at this point, Drive has me thinking about changing our compensation system at Alagad. We’ve been seriously considering simply paying a generous salary and leaving it at that. Other aspects I think we need to consider are the matters of time off. For example, who cares how often someone’s in the office? Doesn’t it matter more that the work is well, and on-time? Isn’t PTO simply another aspect of Carrot and Stick motivation? “If you’re not in the office enough you’re fired!!” I think this bears more thought. I could go into this for quite a while and hash it out in some sort of personal stream of thought drivel, but I’ll spare you.

In the end, my recommendation on Drive is to read it. It’s an interesting read that will have you thinking about how people see the world and what motivates them on a day to day basis.

My Changing Role At Alagad

I founded Alagad one afternoon in 1996. Since then, Ive been the president and “face” of Alagad. When people think of Alagad they probably think of me, not to mention the stellar team I managed to assemble.

However, with all of the drama the companys had to endure over the last few weeks and months, Ive slowly begun to learn that Im effective at some parts of running a business and not so effective at others.

Specifically, Im pretty good at coming up with ideas. For example, the Image Component was my first real breakthrough idea. I also had the idea to turn Alagad into a larger consulting company. More recently, Alagad announced TaskForce, our prepaid, on-demand, development service. And this just scratches the surface of the ideas that I have floating around in my head.

However, when it comes down to the day-to-day operations of a company, I couldnt be less interested. Im not the kind of person who enjoys looking at spreadsheets, projecting financials, or handling conflict.

With that in mind, the Alagad management team has decided to move Randy Miller, our program manager, into the CEO role at Alagad. So, moving forward it will be Randys job to execute against Alagads business and strategic plans. He thrives on spreadsheets and is much more suited to that role than I am.

For now, Im going to be holding onto my title of president. However, Im moving towards a new role of Chief Evangelist. What this means for me is that Ill have a lot more focus on communicating with developers and businesses. As a part of this Ill hopefully be blogging a lot more frequently, attending more conferences, and experimenting with a variety of technologies to create demos, useful tools, and anything else thats relevant to my job of communicating with the world.

Im really not sure what to expect out of this change yet. Im already working on an interesting social application created in Ruby and Rails. Well see what else I can find to write about as we go along!

Meanwhile, if you happen to need any help on a ColdFusion project please be sure to send me an email. Im actively looking for consulting and development work both for Chris Peterson (who is back with Alagad!) and myself. Chris is unparalleled in his knowledge and skill at finding and resolving performance problems in web applications. Were offering a great rate on his time right now, so be sure to check with us if you need this type of help.

Tag Cloud