There is no friend like TV

Worthwhile comic for any goal setter to ponder. Often it isn’t a lack of time, talent, or inspiration that keeps us from meeting our goals. Our success may be determined by how well we say “No!” to the things keeping us from our goals.

New Server

Joe’s Goals has been down a lot lately. The problem isn’t entirely clear and I’ve done what I can to try and fix it on the software side. The issue appears to be with the server itself. I know this has been terribly irritating for you Joe’s Goals users and I apologize. I’m working with my hosting provider to setup a new server and migrate Joe’s Goals there. This will take a few days to complete and I’ll post an update before the final move date to let you know when to expect an outage.

Where’s Joe? He has a baby!

Filed under other stuff

Many of you have written in to ask what happened to Joe? Well here is the answer: a baby!

baby!

Our lovely little daughter was born late in October. She’s obviously been taking up a lot of time and attention. That isn’t going to change, but I am slowly getting back to my Joe duties. Stay tuned for updates.

Election Show

Filed under other stuff

HatTake politics and remove “the issues” and what you have is one of the funniest comedy shows in America.

Election Show let’s the audience follow and participate in a 90 minute improvised presidential election. The stipulation is that everything, including party platforms, needs to be improvised. VPs are picked from the audience, the candidates will attempt to scare “the old people”, attack ads distort the non-existent issues, and an unbiased (purple shirt and all) moderator will keep the train on its tracks.

No show is the same and each is a whole lot of fun, whether or not you follow politics.

Pay incentives in the tech industry

Developer paySlate recently posted an article about incentives in the fruit picking industry and how they can increase productivity. Naturally there is a big difference between fruit and scripting, but it begs the question: can we do more in the tech industry to link income to productivity? I think we can.

A hard problem to solve

In most organizations the developers are some of the highest paid employees. They get paid well because their skills are scarce and hard to reacquire. This leads to entrenched “senior” developers who produce little, but “know” (and therefore get paid) a whole lot. It also shifts the emphasis to stability and away from being quick, nimble, and adaptive. Over time this turns your development teams into an occupying force rather than a fighting force.

How can we shake things up?

Code Cookoff

Last spring our tech team (from my day job) engaged in a week long experiment to see how quickly we could clear out old code. We called it a Cash Code Cookoff.

The economics were pretty simple:

  1. Delete commented out code: $5
  2. Delete unused files/functionality: $10
  3. Re-write a bad section of code into a good one: $25
  4. Roll out a bug that someone else catches: -$20
  5. Track over 75 items as a team and everyone gets an extra: $100

We’re a small team in a small company. Two years of scramble coding had left us with a lot of dead wood to clear out. The whole project cost less than $1000 and reduced the file size of our code base by nearly 90%.

Being productive

The combination of the team goal, the encouragement from the business side, the payout, and the novelty of the program helped make the Code Cookoff hugely productive.

In an interesting twist, the guy who got the most done and therefore received the highest payout was our newest developer. Besides being really aggressive he took the idea seriously from the start and was immediately able to see how his effort contributed to his paycheck. It didn’t hurt that I let him wonder through my obese code base to make deletes :-)

Watching the money grow

When you are already valuable to the company there is little reason to move quickly with dev projects. But with a pay incentive this hierarchy turns on its ear and twice the work means twice the reward. While salary information is normally kept secret, work incentives are public. Employees are free to compare themselves with each other and to compete. They also have the satisfaction of being rewarded with each completed item.

You want team members thinking

“I could always do more today”

and not

“I’ve done enough for today”.

Quality as a business aim

In many companies it is difficult for the business folks to see developers as are much more than glorified copywriters. The difference being that they can’t read what we write and so they don’t care about code quality. They care about the next feature, bug fix, color change, etc. But not quality.

The Code Cookoff gave business incentives and overt permission to focus on quality. It let developers scratch that long neglected itch and go back into their code to make things better, cleaner, smarter, and slicker.

It also penalized developers for bugs in a very public way, increasing awareness of how changes impact the customers.

Base it on headcount?

The Code Cookoff was a wonderful success, but could it scale beyond a week? Let me suggest an idea: base it on headcount.

In this system you could offer an individual incentive for each item and a team incentive for each item. Complete an item and you get paid $20. At the end of the period everyone gets $10 for every item the team completed successfully. This encourages collaboration as every item completed matters to each team member.
To make it interesting, you should tie the individual rate to number of team members. Unable to keep up with the work? A new hire means that the individual rate for everyone falls by 50%. But you can make up for it by getting significantly more done as a team.

Example

Consider the following chart:

tech pay chart
So from the business side there would be a sweet spot where increased productivity would “pay for itself” by delaying the need to hire additional developers. Likewise developers would be rewarded for their efforts and would be more apt to keep an eye on each other to make sure “stuff was getting done.” Increased productivity at the team level would offset the drop in the individual rate over time because the team as a whole gets more productive.

A key aspect would need to be manager oversight to make sure payable “items” involved work and not just answering an email or support question.

Thoughts?

What do you think? How would you incentives your tech workers? What holes can you poke in this approach?

* Update:

As Dan pointed out, Joel Spolsky lambasted the whole idea of pay incentives in his own blog post. He makes some good points although I’m not sure I agree with the whole argument. In a small company where your dev team is your operations team it could easily make sense to reward people for driving their area of the product forward. Its hard to tell if that reward should just be your salary or some other kind of incentive to increase productivity/focus.

Yahoo Small Business vs iPhone Mail

Filed under tech bits

Yahoo Mail BetaIt had to happen. I’ve joined the masses, paid through the nose to AT&T, and purchased an iPhone. Two in fact. One for me and one for the wife. Only one problem, Yahoo Mail doesn’t work on the iPhone.

Alright, maybe that isn’t strickly true. In fact Yahoo has very nice support for the iPhone. Even incorperating a form of “push” mail to notify you of new messages. The problem is that I have a Yahoo Small Business account and on Yahoo Small Business you can’t send message from the iPhone. It will iMap your inbox fine, but shows an error when you try and send a message.

Note, this doesn’t happen with a normal Yahoo Mail Account

So how do you fix it? Well it is fixable but you have to jump through some hoops:

1. Delete your Yahoo Small Business email account from your iPhone (if you’ve already set one up).

2. Go to Settings > Mail and Add Account

3. At this step select Other (not Yahoo Mail)

4. Enter your Yahoo Small Business address along with your password. Touch Save.
5. Switch to POP for your mail settings and fill out the following information for your outgoing server:

Host Name: smtp.bizmail.yahoo.com

Username: (your small business email address)

Password: (Yahoo Password)

6. For your incoming server fill out some random false information such as pop.pop.com and fake username/password (will worry about viewing your mail in a moment).

7. Hit save. You’ll probably get an error that it couldn’t verify your information. Click save again and the iPhone will tell you that you may not be able to send and recieve mail. Go ahead and hit Save again.

8. Go into Settings > Mail again and click on your new account. Change the description line to Send Mail (for ease of reference). Also delete everything from the Incoming Mail server section (hostname, account, etc).
9.  Go to Settings > Mail and Add Account. This time select Yahoo Mail.

10. Enter your Yahoo Smaill Business email and password and touch Save.

11. Go to Settings > Mail and scroll down to where you see Default Account. Change it to Send Mail.

You should now be able to send messages! It should work for replies, sending photos, etc. Only side effect seems to be that it does not put those messages in your sent mail folder on Yahoo. But if you can live with that you should be good to go. Hope this is helpful to someone as I couldn’t find anything like it when I was trying to set up.

TaffyDB 1.5 and suggestions for 1.6

TaffyDB 1.5 is out with some big improvements and capabilities. To download and learn more you can go here.

I’m also looking for feedback on the feature list and suggestions for 1.6. You can see a quick summary of the proposed features on the mailing list and reply via the list or via the TaffyDB feedback form.

Taffy DB version 1.4

Taffy DB There as been a lot of improvements with Taffy DB since I first open sourced it on March 10th. Aside from being faster and smaller there are also a ton of new ways to search and use your data when you have it within a Taffy DB collection.

In case you missed it, Taffy DB is an open source JavaScript Database library that builds thin and very useful data layer into your Ajax apps. Taffy DB 1.4 introduces object and array comparison along with a host of data type comparisons. You can also filter based on length.

Consider the following JSON collection:

var people_collection = [

{name:”Bob”,friends:[”Dan”,”Sarah”]},

{name:”Sarah”,friends:[”Dan”]},

{name:”Dan”,friends:[”Bob”,”Sarah”]},

{name:”Kyle”,friends:[”Sarah”]}

];

Using regular JavaScript you would have to do something like this to find all the people who are friends with Dan.

var friendsOfDan = (function () {
var f = [];
for(var x = 0;x<people_collection.length;x++)
{
for(var y = 0;y<people_collection[x].friends.length;y++)
{
if (people_collection[x].friends[y] == “Dan”)
{
f[f.length] = people_collection[x].name;
}
}
}
return f;
} ());

But that is a pain. It also isn’t easily portable to other types of problems with your friends collection. Using this method how would you find friends of both Dan and Sarah? What if you want to modify those people records who are friends of Dan or access another variable in their object (gender or birthrate, for example). It would be a mess.

With Taffy DB all this becomes really easy. First you create a Taffy collection:

var people = new TAFFY(people_collection);

Then you find Dan’s friends:

people.find({friends:{contains:”Dan”}});

Then you find friends of both Dan and Sarah by nesting another call to find:

people.find({friends:{contains:”Dan”}},people.find({friends:{contains:”Sarah”}}));

Cool huh? How about if you want to introduce some grade school drama into the example and delete anyone who is friends were Sarah? Easy:

people.remove({friends:{contains:”Sarah”}});

You should probably also delete Sarah herself:

people.remove({name:”Sarah”});

Simple. Easy. Amazingly flexible. You can filter in over a dozen different ways as well as sort, run updates, apply functions, and more. If it isn’t part of your library you may want to take a serious peek.

16 Things I Wish They Had Taught Me in School

16 things I wish I they taught me in schoolThere are blog posts and then there are blog posts. Rarely does a blog post hit the nail on the head as cleanly as Henrik Edberg’s 16 things I wish they had taught me in school. Besides the obvious “I should have thought of that” factor, the article really sounds off on many of the things I’ve learned (and that I’m still learning) that would have been huge if someone had told me about them in when I was of highschool age. That said, they are tough lessons to learn without experience. All and all a great read.

Joe’s Goals Tips and Tricks

How to be an Original just put up a great post with some quick tips and tricks on how to use Joe’s Goals.

Some highlights:

  • Configuring your goals and habits
  • Using logbooks as dividers.
  • How to use bonus points for “perfect” days.
  • Sorting your goals.

The biggest benefit of using Joe’s Goals is the fact that you’re inclined to check in daily, to score your progress. Doing this on a daily basis will help you build your goals and habit changes into your daily routine, increasing the likelihood of success.

Good post and well worth checking out.