⇒ design
Wildwood Rules Cheat Sheet

Lincoln Strikes again, this time with a handy Wildwood Rules Cheat Sheet. How does the Two Point Rule work? What’s the Stall Count? Am I In or Out of Bounds? All these questions answered in one simple, concise and convenient page.

Get it in PDF form here:

5 Interview Questions for finding Software Gods…

So, I have, from time to time, been asked to interview various candidates, despite not having much say in the hiring process in general.   Mostly, I’m asked because my employers want me to tell them if the candidate is technically competent or not.  But for me, technically competency is only half of the picture.  I want competent, but I also want passionate, and that, is by far the hard trait to find. Passion is the difference between merely writing code and breathing code, the difference between a cog and a creator, the difference between collecting a pay check and committed to the future.

To that end I have developed a series of questions that helps me narrow the pool some.  These are questions aimed at gauging beyond competency, but the passion one brings to the team.  Without passion, you are just a robot and robots are a dime a dozen… (especially in government contracting).

So, here are my top five interview questions for finding the kind of people with which I want to work.  These are all related to software development, but I’m sure you can adapt these questions to whatever industry you work in. I don’t really have an opinion on your industry, so you are on your own.

Question 1). Describe the coding you do outside of work.

The answer a candidate has for this isn’t nearly as relevant as the fact that they have an answer for this.  A candidate who is not programming outside of their work structure is, generally speaking, not in love with what they do. If you don’t love what you do you might as well not be doing it, you are certainly not worth my time of investing in you.  I will give some credit to someone who describes what they would like to be doing outside of work, but they cannot find the time because of family.  I know families take up a butt load of time, so I respect that.  Often times when I am interviewing this question is asked obliquely in the form of “What’s your Github account.”  It’s the same thing really, although this will also let prospective employers view your work directly as well.

Question 2). Tell me what websites/sources you regularly read in order to stay current in your field?

This is a great question to separate the amateurs from the experts.  If you are not reading multiple regular sources to stay relevant in your field you might as well retire. Every field and industry has sources devoted to keeping you up to date in your field, follow at least three and stay on top of it.  When a candidate fails to answer this question I pretty much stop right there.  This is even more true for technology people than others, but can be applicable in other fields.  For example, my fiancee Jennifer is in Acoustics and she regularly reads science journals to stay on top of her field.  Technology just makes it easier as there are thousands of sources.

Question 3). “I see that you list Library X on your resume.  How would you change X and make it better?”

This is one of those dual purpose questions… You can answer this technically, but any answer you give will also show whether or not you have passion to make things better.  I can judge both by your answer here.  The worst possible answer though is “I really love the way X does this and wouldn’t change it at all.”  If you don’t want to change X you probably aren’t using X very much.  Actually, there is a worse answer than that and that is the answer where you fumble around trying to find an answer which tells me you lied on your resume.  Fail.

Question 4). “Who are some of the movers and shakers in your field that you like and why do you disagree with them?”

Again, this question goes to whether or not the candidate is staying current.  But more importantly, it delves into the candidates opinions and ultimately, passionate people have strong opinions.  You might not agree with them, but you cannot fault their passion and commitment to a point of view.  The follow on questions from this one can really be intense as well and give an interviewer a great chance at delving into the prospective employees views.  Don’t miss out on the chances this question can open up.

Question 5). “What’s the worst thing you’ve ever written and why?”

A great question that challenges the interviewee to examine their own work and then defend it.  This can be followed up with all kinds of interesting question to get at problems or desires, success and failures.  Passionate people not only recognize their failures, they have loads to say about how they would change things.  A person who doesn’t think they have improvements to make on their own work, is one I don’t want to work with.  Continually striving to better oneself is a must.

So there are my five questions.  As with all Interview questions, these are incredibly leading question which allow for a great deal of follow on and discussion.  And they are meant to be that way.  A single interview question isn’t an end, but a beginning to a discussion.  Ultimately, these question do not guarantee that you are going to find the perfect person.  Rather, they serve as a guide to allow you to delve into the depths of what really excites a person about the work that they do and the work you envision for them.

And there isn’t a score here for questions they got right.  All of these questions lead to discussions that will reveal the characteristics that I am trying to get at, namely whether or not the interviewee is passionate about their work.  Each interview is obviously different and have to be judge differently.  In the end it really comes down to a gut decision.  The hope here, however, is that these questions can lead you to better gut decisions.

The goal here is to determine a persons passion, their excitement for their job, because a person who lacks that kind of edge is really not worth the time.



My Ideal Job

Lately, I’ve been asking myself if my current work role is really the best use of my talents.  But shortly into wondering about the answer to this question, I had formed an even more important question: What exactly do I consider the best use of my talents.  So, here, for better or worse, is where I think the best use of my talents lies…

First and foremost, I’m a hacker type through and through.  A work day in which I am not writing code is a terrible day for me.  A work day in which I write a little code is a terrible day for me.  A workday where I am heads down, balls to the wall buried in code and completely oblivious to the passage of time.  Ding!  Awesome day.  What’s even better about those kind of days is that when I’m in the zone like that (Interface Designers call it “Flow”) I am disgustingly prolific. I mean oodles and oodles of code being churned out.  That’s a win for not just me, but the company for which I am working.

Next, I am a very creative person.  This means I get strength and energy from creative outlets.  I am not going to be your go to guy to write that piece of software for which you have painstakingly provide pages and pages of detailed specification.  No, I’m the kind of guy you come up to and say, “Hey, I had a friggin awesome idea, can you whip something together for me to test the idea out?”  I will take your crazy ass idea and run with it.  Now, the result here can be mockups or it can be straight to code, I’m comfortable either way, although I think I’m more productive in code, but whatever.  Just give me an idea that I can contribute to and put my own spin on and I will exceed your most wild expectations.

Also, I love writing reusable components and libraries.  Recently Jacob Thornton an engineer at Twitter (@fat) shared a tweet at JSConf 2012 that I really found interesting.  He tweeted, “new interview question: you have 45 minutes to write JQuery from scratch. get as far as you can. start from wherever you’d like.”  I absolutely loved this question, not just because I think it would really separate the wheat from the chaff as it were, but also because I would love that challenge.  Ultimately @fat concluded that anyone trying to answer that question would be screwed because there’s so much depth to JQuery, but I would absolutely love to try.  I could spend a lifetime reanswering this question over and over and over, getting it more and more perfect each time.  I have been fortunate in my career that the work I am asked to do more often than not has limitations that prevent us from using certain libraries.  I get to go in, study those libraries and then recode them for my project.  It’s quite enjoyable and amazing enriching.

Finally, I love sharing my knowledge with others and learning their ideas and knowledge as well.  Mentoring to me can be quite a lot of fun and there is nothing better, IMHO, than a willing and eager student/peer that wants to learn or wants to debate.  I love that sort of thing.  The caveat, though, is that these activities must not take away from the above two activities.  I like mentoring some of the time, but when it becomes a full time job, when I start managing, that’s where I lose interest.  Surprisingly, I am extremely good at managing and have had a number of management position in the past, but ultimately, I have no interest in doing it in the future.

So, all that said, my ideal job is Hacker and Evangelist of Prototype Libraries. Now, I know that’s probably not a real job (if you think differently, please send me an email!), but that’s what I would ideally like to be doing. And it’s pretty cool that I’ve figured it out.  I now have a benchmark by which I can hold up two jobs and ask, “How much does each of these jobs approach the ideal for which I have set myself.”  That’s the job I’m more likely to take, that’s the job I want.

So, current job, how much do you think you live up to my ideal?

node-untappd: A NodeJS Library for using the Untappd API

Last night in anticipation of the upcoming JSConf, I released version 0.1.0 of node-untappd.  node-untappd is a NodeJS API Client for using Untappd services. My hope is that someone out there might use this to make some really cool things that they will then share with me and offer to buy me beer for my hardwork.  We’ll see how that works out.

If you are unfamiliar with Untappd and drink beer at all, you need to make yourself familiar.  Untappd is a socail tracking application for beer.  Think of it as FourSquare for beer.  Users checkin, rate, comment, track, and share beer consumptions and notes.  It’s an awesome little tool for keeping track of exactly what you are drinking, where you are drinking it, and what you thought of it.

node-untappd connect into the Untappd application by exposing the Untappd API to your Node application.  You can do all kinds of queries, checkins, comments, and the like right from within your own tool.

You can install node-untappd by using

npm install node-untappd.

Make sure to read the file

To learn more about node-untappd or see the source code at the github repository:

To see the API details go to:



Quick Answers to a Hard UI Question

The Question

A friend of mine recently asked the Twitterverse the following question: “Can anyone recommend a good book on designing a good software UI? What works, what doesn’t, and in which situations.”

The Simple (but ultimately unhelpful) Answer

Keep reading for the real answer.

The Difficult Answer

I love it when people ask me this question, because it means that they are actively thinking about the Interface and they want to improve. I applaud their willingness to change. Unfortunately, wanting to change and reading a book (or two) will not get them the results they desire.

User Interface Design is a huge field of study, a speciality of decades (even centuries if you talk about Information Design) of research and learning.  There are undergraduate and graduate programs around the world that teach only this subject.  Succeeding in one of these programs is only the beginning.  Experience is what really counts in this field. A person, my friend or any person, is not going to learn this subject by reading one book.

It’s akin to me going to the bookstore and buying “The Complete Idiot’s Guide to Starting Your Own Business”.  Sure, this book will tell you the basics and give you some insights, but it’s only the tip of the iceberg.  Starting and running a business is an extremely complicated process and to think one book is going to get you there is woefully short sighted.

My problem with the original question is that it is naive.   It is naive to think that simply having the rules will allow you to effectively apply those rules.  It is naive to under-value practical experience in this field.  It is naive to treat an entire field of study as an after-thought.

The Real Question

The real question being asked is “Are there a couple of things that I can do to make my interfaces better?”

The answer to that is No … and Yes.

No, because as I’ve just said, there is no way to summarize quickly an entire field of study or years of experience.  Do not under-estimate just how valuable these things are to someone practicing in the field.

Yes, because I believe there are a number of tips that everyone can use to make their interfaces better from day one.  I’ll go into these really briefly, but I want to be very clear there’s a whole lot more to it, a whole lifetime of learning if you are willing to do it.  It’s an amazing, wonderful field and I thoroughly encourage everyone to study it.  Just be warned that it’s big, complex, and sometimes very unrewarding.

Remember: Interfaces are Everywhere

Anything people interact with is an interface: A Dictionary (the physical book kind) is an interface, a web site is an interface, a form you fill out for your employer is an interface, and a software API is an interface.  Each interface needs to be designed for the user.  So the next time you design something that someone else is going to use, or even for your own use, consider: how the interface works, how easy it is to use, and whether or not it meets your needs.

The Real Answer

While I encourage you to go and read the above books, if you do nothing else, keep the following rules in mind when you are designing any sort of user interface.


The number one thing any software engineer can do to make interfaces better is to make things consistent.  I cannot begin to tell you how many interfaces I see that are inconsistent. (I’ve even made this mistake myself a number of times.)  If you do something one way in one part of your interface, always do it that way throughout the entire interface.  For example, if the Okay button is on the left and the Cancel button is on the right, do not change the order of these things somewhere else in your interface.

This also means adhering to the consistency norms defined by your Operating System or Operating Environment (a Web Browser is an Operating Environment).  Yes, you might not like it and you might think you can do it better, but the interface is NEVER (underlined and bolded) about you.  NEVER.

Details, Details, Details!

Anyone who does Interface Design should be horribly detailed oriented, almost compulsively so. Every aspect of your interface needs to be examined to ensure that the details are, going back to my previous point, consistent.  Form fields should be the same size, buttons the same size, everything aligned correctly, everything positioned perfectly, etc.  The details of the User Interface are the critical difference between good work and sloppy work.  And sloppy interfaces are bad interfaces.

Nothing annoys me more than going to another company and filling out their poorly designed forms.  (My current company is especially bad at this.)  These, as I mentioned before, are interfaces and spending a little time to make them more clean and more clear is worth its weight in gold.  I have, in the past, walked out of companies that were interviewing me merely because their HR forms sucked.

Know your Users

When beginning your design the first thing you should be asking yourself is what do you know about your users.  Shniederman and Cooper (the books above) can tell you a lot more about Actors and User Stories and all that, but it really just comes down to understanding how your users like to work, and how your interface is going to make some aspect of that easier.  So, get to know your users.  Are your users computer illiterate? If so, it’s not likely that they will understand something like Drag and Drop right away. Once you understand your users motivations and needs, then you can begin to design a system that best reflects them.

This is often very tricky because none of us have millions of dollars to do user studies, and shadowing, and user testing.  A lot of times our customers are abstract visions of customers.  That’s okay.  Just take some time to try and imagine (acting or role-playing training can be really helpful here) what those customers motivations and needs would be.  It’s not perfect, but it will do in a pinch.

Ease of Use

So it goes without saying that the easier to use an interface is, the more people will like it.  Of course, this must be tempered against the motivation and goals of the actual users.  So the real goal is that it must be easier for the users to do what their motivation and needs require.  I once read that Ease of Use can be defined as the number of mouse click or keyboard interactions required to perform some task.  It’s not a perfect measurement but keep it solidly in mind when designing.  And this segues into my next point…

People are Lazy

Assume that people are lazy and you will never be disappointed.  They want to do the least amount of effort for the greatest amount of payoff.    I call this the commitment factor: how much of my effort do I have to commit to receive the greatest payoff.  This is why the Lottery is so effective.  It does not seem to matter that statistics are stacked against the players, they still play because it’s easy to play and the potential reward is huge.

In interface design this is equally true.  The users will like any interface that makes things the easiest.  The converse of this, however, plays a valuable role as well… the users will like any interface that makes things easier, so long as they can control the results.  This means that lottery users like playing the lottery, so long as they can pick the numbers.  The more complicated the system to automatically pick the numbers, the less the users will like the results.

Ideally, the best systems are predictive systems that let the users control just the right amount of variables.  What is the right amount, well, that where iteration comes into play.  Try a low amount, try a high amount, calculate the best amount, and then keep refining.

Understand Flow

Cooper defines Flow as “When people are able to concentrate wholeheartedly on an activity, they lose awareness of peripheral problems and distractions.” (Cooper, 4th Edition, p119). We’ve all had these Flow moments: where what we are doing is so focused, so in-depth that we don’t notice external things such as what time it is, coworkers leaving for the day, or even phone calls from our significant others wondering why we are not home yet.  This is Flow, and it’s a very, very good thing.  Flow allows users to work on their specific need at an optimum level.  It is the goal of every good interface.

Poor interfaces interrupt flow with things like unnecessary dialogs, errors, hard to use process, etc.  The interface that interrupts less and is easier to use helps to encourage Flow.

As part of Flow I generally include visual flow in the discussion.  Visual flow is the ability of the human eye to find what it needs.  To this end, interfaces that focus or showcase what is most important to the user are better.  In the western world we read top to bottom, left to right, so items on the top left receive more attention than what is in the bottom right.  Keep this in mind as you build your interface.

Also, be aware that animated things attempting to engage or grab the users focus on your interface ALWAYS disrupt flow.  Use animation to enhance, never to engage.  Assume users have become oblivious to animated, blinking things and largely screen them out these days.

Design for Accessibility

One of the big failings of modern day design is that they fail to account for differences in human beings.  Some human beings cannot see, some cannot manipulate a mouse, some cannot determine the difference between red and blue.  Build for accessibility.  Be aware that some people view your site in really low resolution and that some view it in really high resolution.  Account for the differences in your fundamental design and from the beginning.  Going back and having to engineer your sight to meet section 508 standards can be extremely painful.  Do it right from the start.

One of the big things here is when sites use color to indicate differences.  Estimates seem to place color blindness in the US as 10 to 20% of the population.  Therefore using a color to indicate that some change has happened is not an acceptable solution.  When in doubt use a color change AND some other indicator (selection count, underlining, etc) to indicate response.


Feedback is the process of responding to user behavior.  The more feedback, the more the user knows that they are doing things.  A common flaw is to do something without providing feedback to the user that something is occurring.  We see this in lots of User Interfaces because almost all User Interfaces rely on a single thread model wherein the interface rendering and response happen on the same thread as most processing.  The developer who pushes processing off into other threads (or into WebWorkers in the Web space) can respond with appropriate feedback to the user without waiting for the process to resolve.

Feedback is a key factor in responsiveness of a site and responsiveness is a key factor in a sites usability.  The more response a site appear, the more users feel like they are in control of how the system is behaving.

You Cannot Please Anyone

Just assume that no matter how great your user interface, not everyone is going to like it.  Instead, your goal should be to hit the 80% of user whom will like it.  There will always be edge users whom have different motivations and needs.  So upfront, identify all the users and determine what the 80% is that you can achieve.

Sure, it is possible to build an interface that scales to every type of user.  However, you will spend a disproportionate amount of time on the last 20% than on the middle 80%.  Think of a bell curve,and try to get the middle of that curve.

I know two sections back I just said to design for differences, but there is a separation between accessibility difference and designing for the edge users.

Learn from your Mistakes

Finally, learn from your mistakes.  I always believe that next version of your interface will be superior to the previous version, largely because you learn from the problems your users had with the current one and build a tighter interface for the next one.

As a co-worker of mine often says: It’s an Iterative Process.


So that’s what I have for you.  My long answer to a friends very simple question.  I hope I did not insult my friend, but the reality is that things are much more complicated than his initial question assumes.  That said, maybe my last section really answers the question he wanted answered.  Remember, User Interface Design is extraordinarily complicated.

A Final Note:  This topic does not take into account the whole Graphic Design aspect of UI design.  For that is an entirely differently field of study.

Why is Outlook Web Access 7 years old?

Why are we still using Outlook Web Access, an internet email client that is seven years old and terrible design even for seven years ago. It pains me that my office uses a program that was bad even by the standards of 2003 when it came out. But the real question here is… why the hell hasn’t microsoft updated this piece of crap at all? Seriously? The company has billions of dollars, couldn’t they spare a quick million to rewrite the damn thing? Hell, for a mere $2 million, right now, I’ll quit my job and go write it for them. It should take about eight weeks to produce something better. Eight weeks… tops. And i’ll even write it to support IE.

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 fabricated 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 extraordinary 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?

Funky Techno Groove Beat

I laid down some funky techno grooves. Check it:

Workplace Comfort Level Score (WCLS)

This week I’m changing work locations. As part of this I was comparing the space I work in to the new space and trying to quantify which is better.  I remember that a while back I posted about Environmental Factors in helping to create the best possible work experience.  And then I was thinking about how to rate each space.  My idea was to come up with some nice scale, but it’s pretty obvious that each of these things is subjective and a single scale doesn’t work.  So here’s my idea instead:

1). ORDER THE LIST: Rate the following twenty items in order of importance to you.  Use a 1 for Least Important and a 20 for Most Important.  No Item can have the same number.  Now, here’s the important bit: If you don’t agree with the list, or something on the list isn’t a factor, replace it with something else.  It doesn’t matter what the items in the list are, so much as that there are 20 of them.

  • Privacy
  • Seclusion from Other People
  • Inclusion with Other People
  • Ability to Listen to Music Openly
  • Ability to Listen to Music on Headphones
  • Ability to Modify Environment Lighting
  • Cleanliness in Work Environment
  • Ability to See Outside
  • Ability to Hang Posters or Artwork
  • Lots of Wall Space
  • Lots of Desk Space
  • Lots of Floor Space
  • File Cabinet Storage Space
  • Nice Furniture
  • Comfortable Chair
  • Bookshelves
  • Ability to Wear Jeans and Flipflops
  • Access to the Internet
  • High Quality Computing Hardware
  • High Quality Computing Software

2). RATE EACH ITEM: Now go through and rate your workplace/workspace on each of the items from 1 to 5 where 1 means NO or LEAST and 5 means YES or MOST.

3). FACTOR EACH LINE: Multiple the rating from Step1 by the Rating from Step2 for each line.

4). TOTAL IT UP: Add all the numbers from Step 3.

5). DERIVE THE SCORE: Divide the result from Step 4 by 105 and round down.  This is your WCLRS score.  Use the following reference to help you determine how good your score is:

2 = PRISON = You work basically in a prison cell without the perk of the inmate on inmate love.  Get a new job.

3 = ABYSMAL = Things are pretty piss poor in your workplace if you are seeing a score like this.  Get a new job.

4 = BAD = Your workplace comfort is really pretty bad and that is keeping you from working at the top of your game.  You could try sprucing things up a bit with fake plants and the like, but without a concerted effort by management to create a better workplace, you’re pretty much screwed. Get a new job.

5 = NOT GOOD = It’s getting better, but really it’s not very good at all.  You could try working with your company to fix things, but I doubt you’ll be able to effect change.  Pity though.  You might consider getting a new job.

6 = ADEQUATE = Okay, your workplace is adequate.  It’s not great but it also beat working in prison.  Plus, clearly your company knows some of these factors are important and they might be willing to work on the other things. You might also consider getting a new job.

7 = PRETTY GOOD = This is down right pretty good.  Your working in a fairly comfortable place and clearly your employer values creating a decent place for its employees.  This, by the way, is the minimum rating for someone who works at home.  If you work at home and get below a 7, just chuck it all and go live on a beach in Guam.

8 = DAMN GOOD = You’re doing damn good.  It’s a nice work space, very comfortable, very enjoyable.  So long as the work doesn’t suck and the people you work with are not complete wankers, this is an excellent job.

9 = AWESOME = Damn near perfect.  You should keep this job even if you don’t like the people you work with.

10 = PERFECT = The gold star standard of workplace comfort.  If you work here, please email me at |a r e i .at. a r e i .dot. n e t| and let me know if you are hiring.

Here’s how I rated my current workplace, and how I rate the workplace I am moving to:

STEP 1 ORDER THE LIST:  For me the list is ordered like this…

01 = Ability to See Outside
02 = Ability to Listen to Music Openly
03 = Lots of Wall Space
04 = Lots of Floor Space
05 = Inclusion with Other People
06 = Carpeting
07 = File Cabinet Storage Space
08 = Nice Furniture
09 = Ability to Hang Posters or Artwork
10 = Bookshelves
11 = Lots of Desk Space
12 = Comfortable Chair
13 = Cleanliness in Work Environment
14 = High Quality Computing Hardware
15 = High Quality Computing Software
16 = Ability to Modify Environment Lighting
17 = Ability to Listen to Music on Headphones
18 = Access to the Internet
19 = Privacy
20 = Seclusion from Other People

STEP 2 RATE EACH ITEM: Here’s my CURRENT and my NEW workplace ratings.  The first number is the current, the second number is the new as shown here: current/new

4/2 = Ability to See Outside
1/2 = Ability to Listen to Music Openly
1/2 = Lots of Wall Space
1/1 = Lots of Floor Space
1/4 = Inclusion with Other People
3/2 = Carpeting
2/2 = File Cabinet Storage Space
2/1 = Nice Furniture
1/2 = Ability to Hang Posters or Artwork
1/1 = Bookshelves
1/2 = Lots of Desk Space
2/1 = Comfortable Chair
5/1 = Cleanliness in Work Environment
5/2 = High Quality Computing Hardware
5/2 = High Quality Computing Software
3/1 = Ability to Modify Environment Lighting
5/2 = Ability to Listen to Music on Headphones
4/2 = Access to the Internet
2/3 = Privacy
1/2 = Seclusion from Other People

STEP 3 FACTOR EACH LINE: Just multiple each lines rating by the order position, gives me the numbers below again in current/new format.

04/02 = Ability to See Outside
02/04 = Ability to Listen to Music Openly
03/06 = Lots of Wall Space
04/04 = Lots of Floor Space
05/20 = Inclusion with Other People
18/12 = Carpeting
14/14 = File Cabinet Storage Space
16/08 = Nice Furniture
09/18 = Ability to Hang Posters or Artwork
10/10 = Bookshelves
11/22 = Lots of Desk Space
24/12 = Comfortable Chair
65/13 = Cleanliness in Work Environment
70/28 = High Quality Computing Hardware
75/30 = High Quality Computing Software
48/16 = Ability to Modify Environment Lighting
85/34 = Ability to Listen to Music on Headphones
72/36 = Access to the Internet
38/57 = Privacy
20/40 = Seclusion from Other People

STEP 4 TOTAL IT UP: Add up each number for current and each for new to get the totals:

Current: 594


STEP 5 DERIVE THE SCORE: So here I take the totals and divide by 105 for my score:

Current: 594/105 = 6 = ADEQUATE

New: 386/105 = 4 = BAD

So, now that I have it all figured out, I am basically going from ADEQUATE to BAD.  That doesn’t sound like an upgrade to me at all.

Time to get a new job.

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.

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?

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:

If you’d like to read/watch the entire video blog series (there are four of them), you can  find it here:

If you’d like to follow Jonathan Schwartz’s blog, you can find it here:

An Open Company, Quick Post

I found this an interesting concept.  The question of the day, however, is will it work?

iPhone 3.0 Request

So I have an iPhone, just like all the other nerds out there.  Next week apple is going to offer details on their next version of the iPhone software (version 3.0) and as such everyone out there in the blogosphere seems to be writing about what they want in this new version.  I’ve read a few of these lists and agree with some of the items on them such as Cut and Paste, Images in Text messages, and background processing, but there’s one spot I’d really like some work on that nobody seems to think about.  I cannot help but wonder if i’m either missing something or no one else has every thought about this.

So the feature I’d really like to see is: The ability to adjust cache settings inside safari.  See, Safari, the iPhone web browser, appears to have a tiny little cache that remembers almost nothing.  The means that web pages are slower to download overall, plus when safari restarts, any old pages you want to revisit need to get downloaded again, which is slow.  What I’d like to see is a number of settings that you can adjust in safari that let you dictate whether or not the caching is allowed, how big the cache can be, and whether or not to clear the cache when closing safari.  The second one, how big the cache is, is especially important to me.  See, I don’t store a lot of video or music on my iPhone so I basically have like 75% of my iPhone’s memory sitting around doing nothing.  I’d love to be able to amke that 75% assigned to my safari cache and thus increase some of my browsing performance.

Now, all of that said, I know its really a minor request.  Plus since I own a first generation iPhone and not one of those 3G specials, I understand performance is more of an issue for me and less of one for other people.  Yet, at the end of the day, this is just one man’s blog and one man’s request for what *I* want to see.  So I get to make crazy demands.

Site Version 3.1

You’ll notice that an all new version of the site is up and running.  This is version 3.1 of the site and long overdue to be installed and put into production.

The old site was, well, getting old.  The big problem was that all of the blogging stuff was custom code and very limited.  So as any rewrite I wanted to take out that code and use a commercial blog system.  I also wanted to clean up the directory structure, redo some of the css and put up the new logo art I did a few months ago.

So, the new site is now up running the WordPress software. It took some massaging to get it just the way I wanted, but after a few hours I eventually got it setup to something usable.

More changes to the site are coming, but the basic core is there.  I intend to add links to cross post article urls to other sites like digg and delicious and the like.  Plus there’s a fair amount of content from the old site that needs to get linked in.  And a few other flourishes.  Finally, I will be taking the livejournal site down and redirecting it here so therre’s only one blug to manage.

So, here it is, up and running.  Thoughts and comments welcome.