Archive for the ‘Productivity’ Category

Not ripping off xkcd - this is seriously the best graphic I\'ve ever generated.

This is *not* a ripoff of xkcd (though I read that regularly, and so should you) - this is seriously the best graphic I can come up with, and it does the job. Yesterday I looked at doing all kinds of stuff to my iPhone. I wanted to see if I could get Python and a full-fledged Django installation on my iPhone and create the first web 2.0 application created completely from the bathroom. Just kidding, but I wanted to do some pretty evil stuff. Turns out that, as of now, there isn’t a clean simple way to get a lot of stuff to work without hacking the iPhone in some way, or resorting to things that are completely ridiculous. I’m sorry, but there has to be an easier way to get SSH and a terminal on there. It’s just not that critical right now, and this thing was damned expensive.

I decided to wait it out and see what comes our way over the summer.

Here’s the email I received on Saturday from The Planet, where I have some dedicated servers hosted:

Dear Valued Customers:
This evening at 4:55 in our H1 data center, electrical gear shorted, creating an explosion and fire that knocked down three walls surrounding our electrical equipment room Thankfully, no one was injured. In addition, no customer servers were damaged or lost.
We have just been allowed into the building to physically inspect the damage. Early indications are that the short was in a high-volume wire conduit. We were not allowed to activate our backup generator plan based on instructions from the fire department.
This is a significant outage, impacting approximately 9,000 servers and 7,500 customers. All members of our support team are in, and all vendors who supply us with data center equipment are on site. Our initial assessment, although early, points to being able to have some service restored by mid-afternoon on Sunday. Rest assured we are working around the clock.
We are in the process of communicating with all affected customers. we are planning to post updates every hour via our forum and in our customer portal. Our interactive voice response system is updating customers as well.
There is no impact in any of our other five data centers.
I am sorry that this accident has occurred and apologize for the impact.

That’s pretty rough. Lucky for me, nothing I do is solely dependent on any of those machines. However, I think it’s probably pretty common for startups to rely heavily on what amount to single points of failure due to a lack of funds or manpower/in-house skills to set things up in a way that looks something like “best practices” from an architecture standpoint.

Building a startup on dedicated hosting is one thing. Running a production web site at a single site, perhaps with a single machine hosting each service (or even a few or *all* of the services) is something dangerously different. However, building a failover solution that spans outages at the hosting-provider level can also be quite difficult and perhaps expensive. You have to really come up with hard numbers that will help you gauge your downtime tolerance against your abilities and budget. While a restrictive budget might mean less automation and more humans involved in failover, it can be done.

What kinds of cross-provider failover solutions have saved your bacon in the past? I’m always looking for new techniques in this problem domain, so share your ideas and links!

Startups are pretty fascinating. I work for a startup, and one of my good friends works for another startup. I’ve also worked for 2 other startups, one during the first “bubble”, and another one a few years later. Oh my, how the world of web startups has changed in that time!

1999: You must have funding

The first startup I was ever involved in was a web startup. It was an online retailer. They were starting from nothing. My friend (a former coworker from an earlier job) had saved for years to get this idea off the ground. He was able to get a few servers, some PCs for the developers he hired, and he got the cheapest office space in all of NYC (but it still managed to be a really cool space, in a way that only NYC can pull off), and he hosted every single service required to run the web site in-house. If I recall correctly, he had a web and database server on one machine, and I believe the primary DNS server was on an old desktop machine he had laying around the house. This gave him the ability to build the completely, 100%-functional prototype, and use it to shop for funding.

It worked. They got funding, they bought more and bigger servers. They got UPSes for them (yay!), they got more cooling, a nicer office, and they launched the site, pretty much exactly as the prototype existed, and things were pretty stable. Unfortunately, the VCs who took seats on the board after the first round of financing didn’t understand the notion of “The Long Tail”, so they eventually went under, but that’s not the point.

The point is, that was 8 or 9 years ago. It costed him quite a good bit of his hard-earned savings just to get to a place where he could build a prototype. A prototype! He only really knew Microsoft products, and buying licenses for Microsoft SQL Server, and the developer’s tools (I forgot what they were using as an IDE, but they were a ColdFusion shop) was quite a chunk of money. My friend really only had enough money to put together a prototype, and they were playing “beat the clock” — trying to get a prototype done, and shop for (and get) funding, before the money ran out, because they couldn’t afford the hardware, power, cooling, big-boy internet connection, and the rest of what goes into a production infrastructure. The Prototype->VC->Production methodology was pretty typical at the time.

2003: Generate Some Revenue

In 2003, a couple of years after the bubble burst, I was involved in another startup. This one was 100% self funded, but has been rather successful since. By this time, dedicated hosting was just affordable enough that it was doable for a startup that had some revenue being generated, and that’s what my friend did. He also outsourced DNS completely (through his registrar, if memory serves), but he still hosted his own email, backup, and some other services in-house. He had plenty of hiccups and outages in the first year, but overall it ran pretty well considering all of the things he *didn’t* have to be concerned with, like power, cooling, internet uplinks, cable trays, etc. The world was becoming a friendlier place for startups.

2008: Do it all, on the cheap

Nowadays, the world is a completely different place for startups, and a lot of this is due to the rich set of free (or very cheap) resources available to startups that make it possible for them to do a production launch without the VC funding that used to be required just to get the hardware purchased.

In 2008 you can outsource DNS for relatively little money, and it’ll have the benefit of being globally distributed and redundant beyond what you’re likely to build yourself. You can get Google Apps to host your email and share calendars and documents. You can store backups on Amazon’s S3. You can use something like Eclipse, Komodo Edit, or a number of language-specific environments like Wing IDE or Zend Studio to do “real development” (whatever your definition of that is) for free or relatively cheap. You can also get a free database that is reasonably well-stocked with features and capabilities, a free web server that runs 65%+ of the internet sites in existence, and if you have the know-how (or can get it), you can actually host anything you want, including your entire production infrastructure (within reason, and subject to some caveats) on Amazon’s EC2, for a cost which is tied to what you use, which is cheaper in a lot of cases than either buying or leasing a dedicated server. Multisourcing has arrived!

In looking at this progression from “you must have funding”, to “you’re going to need to generate a little revenue”, to “do it all, on the cheap”, the really obvious question this all raises is:

“Now what?”

Well, this whole 2008 situation is making things better, but… how do I put this… “It’s not soup yet”.

First of all, there is no single platform where you can realistically do everything. Google’s AppEngine is nice, but it has its limitations, for example, you don’t have any control over the web servers that run it, so you can’t, say, add an Apache mod_rewrite rule, or use a 301 redirect, or process your log files, etc. Troubleshooting this application based solely on input from people who are having issues with your app would be difficult.

Amazon’s service gives you far more control, and if you need it, that’s great, but it completely changes how you architect a solution. I think that some of these things are good changes, and are things we should all be thinking about anyway, but Amazon forces you to make decisions about how to plan for failure from the moment you decide to go this route — even if it’s for prototyping, because until persistent storage on EC2 is a reality available to the entire user base, whenever an EC2 instance disappears, so does every bit of the data you added to it. You’ll have to start from scratch when you bring up another instance. You’re also going to have to add more scripts and utilities to your toolbelt to manage the instances. What happen when one disappears? How do you fail over to another instance? How can you migrate an IP address to the running instance from the failed one? How you do all of these things, in addition to just building and installing systems, is different, and that means learning curve, and that means overhead in the form of time (and expense, since you have to pay for the Amazon services to use them to learn on).

There are also now “grid” solutions that virtualize and abstract all of your infrastructure, but give you familiar interfaces through which to manage them. One that I’ve used with some success is AppLogic, but other services like GoGrid and MediaTemple have offerings that emphasize different aspects of this niche “Infrastructure-as-a-service” market. Choose very carefully, and really think about what you’ll want to do with your infrastructure, how you want to manage it, monitor it, in addition to how you’ll deliver your application, and also think about how you’ll be flexible within the confines of a grid solution before you commit, because the gotchas can be kind of big and hairy.

None of these are whole solutions. However, any of them could, potentially, some day, become what we would now call a “perfect solution”. But it still wouldn’t be perfect in the eyes of the people who are building and deploying applications that are having to scale into realms known seemingly only inside some brain vault that says “Google” on it. What those of us outside of that vault would like is not only Google-like scalability, but:

  • global distribution, without having to pledge our souls in exchange for Akamai services. It’s great that I can build an infrastructure on EC2 or GoGrid, but I’d like to deploy it to 10 different geographic locations, but still control it centrally.
  • the ability to tightly integrate things like caching distribution network services with the rest of our infrastructure (because CDNs are great at serving, but not so much at metrics)
  • SAN-like (not NFS-like) access to all storage from any/all systems, without sacrificing the IO performance needed to scale a database properly.
  • As an admin, I want access to all logs from all services I outsource, no matter who hosts it. I don’t believe I can access, for example, our Google Apps logs, but maybe I’ve forgotten to click a tab somewhere.
  • A *RELATIONAL* database that scales like BigTable or SimpleDB

There’s more to it than this, even, but I’ve stopped short to make a point that needs making. Namely, that these are hard problems. These are problems that PhD candidates in computer science departments do research on. I understand that. The database issue is one that is of particular interest to me, and which I think is one of the hardest issues (not only because of its relationship to the storage issue, by the way). Data in the cloud, for the masses, as we’ve seen, involves making quite a few rather grandiose assumptions about how your schema looks. Since that’s not realistic, the alternative is to flatten the look of the data, and take a lot of the variables out of the equation, so they don’t have to make *any* assumptions about how you’ll use/organize the data. “Let’s make it not matter”. Genius, even if it causes me pain. But I digress…

The idea here is just to give some people a clue what direction (I think) people are headed in.

These are also very low-level wants. At a much, much, much higher level, I’d like to see one main, major thing happen with all of these services:

  • Get systems administrators involved in defining how these things are done

I’m not saying that because I want everything to stay the same and think a system administrator will be my voice in that or something. I do *NOT* want things to stay the same, believe me. I’m saying it because it seems pretty obvious to me that the people putting these things together are engineers, and not systems administrators. Engineers are the people you call when you want to figure out how to make something that is currently 16GB fit into 32MB of RAM. They are not the people you call when you want to provide a service/interface/grid/offering/whatever that allows systems folks to build what amounts to a company’s IT infrastructure on a grid/instance/App/whatever.

Here’s a couple of examples:

When I first launched an AppLogic grid, a couple of things jumped out at me. The partitions on the components I launched were 90% full upon first boot, they had no swap partition, and there was no consistency between OS builds, so you can’t assume that a fix on one machine can be blown out via dsh or clusterssh to the rest. The components were designed to be as small as possible, so as to use as little of the user’s alotted resources as possible. In addition, mount points created in the GUI management interface and then mapped to a component… don’t cause the component to have any clue what you just did, which raises the question “umm… why did I bother using the GUI to map this thing to this component if I just have to edit /etc/fstab and mount it in the running instance myself anyway? Back to consistency, this is unlike if you had, say, allocated more RAM or storage, or defined a new network interface on the device in the GUI.

There is no part of EC2 or S3 that looks like a sysadmin was involved in that. It’s a programmer’s platform, from what I can tell. For programmers, by programmers. Luckily, I have enough background in programming that I kind of “get it”, but while I might be able to convince myself that there are parallels between how I approach programming and building infrastructures, it still represents a non-trivial context switch for me to move from working deeply at one to working deeply at the other, so mixing the two as a necessity for moving forward is less than nice.

There is no “database in the cloud” service that looks remotely like there was a database systems person involved at all, that I can tell. I’ll confess to not having used BigTable or SimpleDB, but the reason is because I can’t figure out how to make it useful to me at the moment. These tools are not relational, and my data, though it’s been somewhat denormalized for scaling purposes (compromises taken carefully and begrudgingly - I’d rather change database products, but it’s not in the cards), is nonetheless relational. I’ve considered all kinds of object schemes for data in the past, and I still think that there’s some data for which that can work well, but it’s not currently a solution for me. Once you look at the overhead in managing something like EC2, S3, AppLogic, etc., the very last thing you need is the overhead of a changing data storage/manipulation paradigm.

Should I be hiring systems folks, or developers? Both? Ugh. Just when I thought you could finally get away with building a startup with nothing more than an idea, a sysadmin and a coder, here they go roping me back into hiring a team of developers… to manage the systems… and the data. No good (and I mean *NO GOOD*) can come of developers managing data. I know, I’ve seen ‘em do it.

All of that said, I use all of this stuff. Multisourcing is here to stay - at least until someone figures a whole bunch of stuff out to make unisourcing a viable alternative for systems folks, or they collectively redefine what a “systems person” is, which is an extremely real possibility, but is probably quite a ways off. My $.02. Flame at will ;-)

If you’re reading this post, it means that the DNS entries have propagated, and you’re viewing my blog at it’s new location: WebFaction!

Thanks to everyone who left comments in response to my cry for web host recommendations. Almost everyone mentioned webfaction in the comments, and I got a few emails with that recommendation as well. After verifying a couple of things with the folks at WebFaction, I signed up, and just about an hour ago I imported my wordpress blog into a new instance of wordpress that was set up for me automatically by WebFaction.

A side benefit of WebFaction over my old host that I hadn’t considered: I get to pick my username and password to use for my SSH login. My old provider assigned the username and password, and they were both long cryptic strings. After about a year with that provider, I had only in the last month or so finally memorized my user name and password.

Ok, I’m off to go enable more plugins and do s’more cleaning up and moving over more domains and stuff. Wish me luck!

I picked up the Apress book about Ruby for Systems Administrators, because I plan on learning enough about Ruby to make it a viable tool that I can use if I have to use it at some point. I still plan on doing that, but in reviewing the first couple of chapters, I don’t think I’m going to like Ruby very much, and I think I’ll have to be dragged kicking and screaming to use it. Maybe as I gain some practical experience with it this feeling will subside.

I should say that I did all of my sysadmin programming in shell and perl for many years. I still use them somewhat regularly, if only to maintain existing code or to write code for clients who require Perl, or to work on systems that don’t have Python installed (yes, these exist. Basically, unless you’re using Linux, Python is not “just there”). If I have a choice or some say in the matter, I’ll tend toward Python if I’m writing new code. I’m pretty sure that all of the non-web code that I’m writing for AddThis, for example, is Python (web code is in PHP, and I do database development using straight-up SQL, because we’re using MySQL - if I were using PostgreSQL, there’s a chance I might use Python for that as well).

When I started using Python, I also looked at Ruby. It was one of those periods of time where I was pretty much out looking for a language to add to my repertoire. I had experience with Java, C/C++, PHP, Perl… enough languages that at this point I knew exactly what I wanted in a language: I wanted a language that I could use no matter what I was doing. Of course, I do mostly systems coding, but I wanted a language that would be enjoyable enough to use, and agile enough, and capable enough, and available on enough platforms, and <long list here> that I could use it for web and perhaps even GUI scripting as well (I tend to avoid scripting GUIs in any language because I just think going straight to the web skips an oft unnecessary step in the evolutionary cycle).

Turns out, Python won because it happened to be in heavy use on a couple of projects I was loosely involved in at my job at the time. However, I’ll state that I volunteered to be involved in them so I could get a better grasp of Python, and I’m glad I did. My feeling at that time was that Ruby looked too much like Perl to me, and I was really making an effort to move away from Perl, because after 10 years of coding in a language, you should not still feel like a complete neophyte every time you have to use it.

After more reading about Ruby, I’ve discovered that, due to the fact that Ruby supports things that don’t exist in Perl, yet tries to adhere to a Perl-ish notion that symbols are good visual indicators of various things (though the same symbols mean completely different things between the two), it actually looks even more cryptic to me than Perl does.

This is completely a “doesn’t fit my brain” thing. I’m sure Ruby is a fine language, and if I made regular enough use of it, I’d probably get used to parsing all of the symbols (though the same could be said for Perl and even shell as well). Python has some weirdness to it as well, which also took some getting used to. Unfortunately, I don’t really have a project to use Ruby on right now, and nothing forcing me to use it, and no existing projects that would be easy for me to involve myself in. I guess I’ll just have to find some sysadmin task that needs doing and see how Ruby works out. My primary language, though, is likely to remain Python, as I find it about 60 million times easier to read than Perl, and 100 million times easier to read than Ruby. I learn a lot by reading code, so I guess the ability to parse it readily is of primary importance to me in picking up a new language.

Last week, I read a great blog post (and even better comments), and then this week I read something else that made me think more about Microsoft, open source, and Microsoft’s direction going into the future.

By way of disclaimer, I’m indifferent to Microsoft. I don’t use their products if I don’t have to, but I understand why they still exist and understand their place in the “technological landscape”. I’m heavily involved in various aspects of various open source communities. I’ve contributed code to a good number of open source projects, I’ve started my own open source projects, and I’ve worked to publish two magazines about two different open source programming languages. I also consult, and stipulate in my contracts that tools developed which contain no site-specific logic are owned by me, and released as open source software on one of my web sites (where I also document some of what I do/have done for anyone who finds it useful). I also wrote a book about a certain open source operating system, and frequently write articles about open source technologies for various web outlets and magazines.

With that out of the way (and so much for “Anonymous Geek” eh?)…

In the comments section of Hal McLeod’s blog post, “how does a software company make money, if all software is free?”, Hal himself asks the question:

“What has got to happen at MSFT if it wishes to remain a relatively happy, successful, interesting company for the next thirty or so years?”

I think that’s a fantastically interesting question. Some in the anti-Microsoft crowd are quick to point out steps they could take that are either disingenuous or naive, or both. If you get past all of that and really try to put yourself in the shoes of a Microsoft executive, it becomes much, much more interesting, and really, quite hard. This is a company that is publicly held. This means that Microsoft has a fiduciary responsibility to their shareholders to grow the company. Maybe putting ourselves in the shoes of a Microsoft exec is to abstract. Let’s try this:

Imagine that your total net worth in life is completely invested in Microsoft’s stock. You now have a vested interest in what Microsoft does going forward. How would you like them to proceed, keeping in mind that the result of their actions has a direct and dramatic effect on your life, and the welfare of your family?

It’s just not a simple question. Anyone who claims to have some silver-bullet, “it’s as simple as x” solution is kidding themselves into thinking that they have anywhere near enough information to make such a call. It’s not likely that their net worth is tied to Microsoft’s stock price ;-)
Certainly, some notion of open source is floating around the minds of the Microsoft brass. I say “some notion” because when you read what people at Microsoft say about open source, the only thing that’s clear is that “open source” in their minds is, at best, some nebulous term that seems to change meaning depending on who the speaker is. Certainly, it doesn’t seem to match what people in the open source community would call “open source”. Which brings me to this post I read from Todd Bishop’s Microsoft Blog, where Ray Ozzie (new chief software architect of Microsoft, taking the reigns from Bill Gates) is quoted (by Todd) as saying:

My position toward open source generally is that it’s a part of the environment. It’s very useful for developers to be able to get the source code to certain things, to modify them. Microsoft fundamentally, as a whole, has changed dramatically as a result of open-source as people have been using it more and more. The nature of interoperability between our systems and other systems has increased. I can tell you from an inside perspective … when you build a new product, immediately you start thinking, how shall this product expose its APIs.

…Open source is a reality. We have a software business that is based on proprietary software. We tactically or strategically, depending on how you look at it, will take certain aspects of what we do and we will open-source them where we believe there is a real benefit to the community and to the nature of the growth of that technology in open-sourcing it. … The bottom line is we believe very much in the quality of Microsoft products and we are an (intellectual-property) based business. But we live in a world together with open-source, and we have to make it possible for you to build solutions, or customers to build solutions, that incorporate aspects of that.

The first thing that stands out to me is that the guy either doesn’t “get” open source, or he’s purposely dumbing down the concept because maybe the audience consists of shareholders or some other group that doesn’t “get” open source. In short, developers are not the only people who benefit from having access to the source code, and developers inspecting source code may have absolutely zero interest in modifying it. But this is not the important part of what Ozzie is saying.

What he’s saying is:

  • We have no choice but to accept the reality that is open source software, and the open source community (to a lesser extent)
  • We’d love to find a way to embrace more of these philosophies if we could find a way to do it without being sued out of existence by our shareholders in a flood of class action suits.
  • That said, where we can add value to a product or technology by opening it up (where that term is defined by MSFT), we’ll do that.
  • Short of that, it looks like we’ll at least have to make it possible to integrate/interface with open solutions to keep from being sued out of existence by other parties in a flood of anti-competition suits.

That’s how it sounded to me, anyway. So how does this speak to the question of what Microsoft needs to do to remain healthy and prosper over the next 30 years? It says a good bit by saying little, and unfortunately, the main answer to the question this leaves us with is this:

MIcrosoft needs to engage more, and more directly, with various communities, including the open source communities around various projects, and understand the people and processes, so that it can at least understand how the processes can help them succeed, even if they are to remain a 100% IP-based, proprietary company — because right now, it seems clear that they don’t understand, and they haven’t asked the right questions of the right people to help them over the hump.

Say what you want about Microsoft, they tend to hire smart people. However, if their product line is any indicator, their internal culture is geared toward production, and creative energy is channeled toward increasing productivity and adding value to the bottom line in as efficient a manner as possible. Can’t land that big client? Well, if we just add a random, arbitrary feature to Word, they’ll upgrade all of their desktops and Office installs. A couple of day’s work, and we land millions of dollars. Great.

I have to believe morale at Microsoft is pretty low. I have to believe that there are a lot of employees who, when asked what they do for a living, used to say, proudly, “I work for Microsoft”, who now say “I’m a programmer”, or worse, “I work for the machine”. Both are sentiments from someone who feels like there’s no creativity left in what they do. They’re just workhorses.

If I had to pick a place to focus on within the internals of Microsoft to help them achieve happiness in 30 years, I’d say focus on the people. Make your people happy in what they do, set their imaginations free to change processes, let them be in charge of how they channel their creativity, and I think Microsoft will be completely floored by the results.

Of course, that’s idealistic, and somewhat disingenuous as well. You can’t just let people do whatever they want whenever they want, but what about a Google-like plan to give workers some designated time to work on personal projects? Maybe it wouldn’t be 20% to start, or maybe it wouldn’t work as a % of time at all, but find some way to allow workers to drive, and to work on things independent of the huge project teams and managerial hierarchies they’re chained to on a daily basis. I’m not talking about hiring more people to work in the research group, I’m talking about parallelizing the research effort and harvesting creative cycles from the entirety of the corporation instead of filtering ideas up through people you hope have some clue what a good idea is. Let the ideas bear themselves out and grow a life of their own. Set up internal communities where people can share their ideas and work together on them regardless of what cell block they’re in.

The business is about software, but the people make the software, so the business is really about the people. Channel some of that creative talent at the top of the managerial tree to figure out how to manage less and give people more freedom. I can’t imagine it wouldn’t pay off.

Every. Single. Day. This. Happens.

I read a *LOT* of online technical documentation. Come to think of it, I read a *LOT* of documentation offline as well. I also occasionally read things like blogs and comments and stuff. In all of my reading, I have found that the most prevalent mistake made by the writer in terms of grammar and spelling is using the word “loose” in place of “lose”. So here’s the rule:

“Lose” is a verb, as in “I will lose my job if I do that”, or “Please lose my number”. Other forms include “losing” as in “I’m losing my mind”, and the ever-popular “loser”, as in “That Anonymous Coward is such a loser”.

On the other hand, the word “loose” is an adjective, as in “he’s got a few screws loose” or “that development team has somewhat loose morals - I’ve seen them at conferences”, or “loosely coupled”.

How about this: if you want to describe loss, lose the extra “o” — copyright me, today. :-D

I’ve had this issue forever. I want to paste in some code from somewhere else into a Vim session on some random box, but I have to remember to do “:set nocindent noautoindent nosmartindent noreallypleasedontindent” all the time. Well, I finally had some time to google for an actual solution to the issue (I knew I couldn’t be the only person in the world with this issue) and I found one that is sooooo easy. Ready? Next time you wanna paste in some code, run this first

:set paste

That’s it. Now paste in your code, and after the angels stop singing in your brain, you can get back your normal indentation settings with:

:set nopaste

As you might expect. :-)

I get a good number of job offers without sending resumes around. I guess my name shows up in enough places, associated with enough buzzwords, that recruiters fire off emails first and read the fine print later. The “fine print” in my case, says that I do not have a college degree.

99.999% of the time, recruiters, and even hiring managers, tell me that my experience more than makes up for any lack of a formal education (one manager said he had seen many less capable MS degree holders). However, there are a few little quirks I’ve found at some larger companies. Mainly, they fall into two categories:

  1. They just plain don’t hire anyone without a degree
  2. You can’t get past a certain “tier” of employment without a degree

I’ve worked in business. I grew up in family businesses. I understand that, in certain circumstances, corporations can have legitimate reasons for these stances. Probably the only one I’ve ever actually heard myself that seemed almost reasonable is “insurance”. Some positions in some companies can have a drastic effect on things that directly affect the bottom line of that company, and if the company has insurance to protect them against extremely costly one-time errors (like E&O insurance), the insurance company might give them a better rate if they take steps to decrease the likelihood of such errors… like requiring that employees in these positions have a degree. I think it’s kind of a twisted logic, really. Instead of developing processes and procedures to reduce the likelihood of a problem, they think that hiring someone with a degree by itself will help the issue. Like degree-holders are less prone to errors due to the simple human condition. Odd, that.

Oh, and there’s a third quirk, but not with the corporate policies - with he hiring managers themselves. The quirk is that certain hiring managers, without regard for stated policy, won’t hire someone who doesn’t have a degree, presumably because they fear they might be fired for hiring someone who fails to produce because they don’t have a degree. The other possible reasoning here is that they have the attitude that “I went through it, so why should I give someone a job who hasn’t?”

The *real* problem with these hiring managers, and with corporations who have (non-insurance-related) strict educational requirements of applicants, is that that there’s a shortcoming in the business education curricula: they don’t teach the future middle managers of the world how to evaluate an applicant who doesn’t have a traditional, formal education.

This is a guess, of course, since I haven’t been to business school. But aren’t managers unwilling to hire those without formal educations also guessing? I would submit that they are. It’s the same kind of guess, too. It’s a guess based in part (maybe) on experience, and in part based on stereotypes or other preconceptions.

My experience with those who don’t, or won’t hire non-degree holders is that they think of degree-holders as “more well-rounded”. Assuming the non-degree holder hasn’t resigned themselves to a life of flipping burgers, I don’t think this could be further from the truth. It is, in fact, an old wive’s tale with no basis in fact. We were all told as kids that college would make us more “well-rounded”, and so we all worked to attain this nebulous goal. In reality, a college degree, by itself, is simply not any kind of valuable indicator of “well-roundedness”. Colleges are businesses. They produce college graduates. They do it efficiently, with an eye toward the business end of things more than anything else. If a college graduate is well-rounded, it is as much in spite of their college experience as because of it. Most well-rounded people are probably predisposed to being well-rounded, and had a tendency toward things to help them become well-rounded by the time they arrived on campus.

Besides this somewhat lame view of non-degree holders, another assumption is that non-degree holders do not have *any* education, and so *cannot* be prepared to perform the tasks that a graduate can (allegedly) perform. This argument might hold water with me if I didn’t have some idea already how resumes are typically handled by HR departments. The short story there is that there are tons of resumes that a hiring manager never sees because they’re pre-qualified (read: filtered) on the basis of educational status.

My area of expertise is technology. I don’t have a degree. It would therefore be assumed by many a hiring manager that I have no idea what Big-O notation is, don’t know anything about object delegation or polymorphism, and can’t analyze problems the same way as a college grad. The manager would be wrong on the first two counts, because while I didn’t study in college, I *did* study. But what about that third bit about analyzing problems?

I can tell you that it’s absolutely true that I do not analyze problems the same way as a college grad. What’s a real shame, though, is that a lot of managers would assume that “not the same” means “not as well”. There’s no justification for this assumption. In fact, I would argue that it *has* been the case in the past that having one rogue non-degree holder in a room full of grads can help to avoid “group think”, and help the group turn a problem sideways for another look. It is unfortunate that a degree that is supposed to help people “think outside the box” seems to put everyone in the same exact spot outside of that box, looking at it from the same exact perspective, coming to the same exact conclusion.

Finally, there is a certain class of degree-holder that I think is never a win over hiring a young, hungry rogue like myself. This class of graduate has hung their degree on the wall and decided that they no longer have any obligation to continue to keep up with new developments in their field. They code the same way they’ve always coded, use the same collection of old trusty tools, deal with technology the same way they’ve always dealt with technology, and stood more or less completely still, failing to seek out (much less embrace) new tools, techniques, languages, paradigms for getting things done. How can you possibly think outside the box when your vision of the box is 10 years old and assumes that the box is completely static?

I believe it was Nietzsche (sp?) who wrote that truth is not static (of course, I’m paraphrasing, and I might be thinking of James). If you can see yourself subscribing to that idea at all (it seems counterintuitive at first glance, but deeper thought will probably get you there), then how can a person with a notion of “truth” that is tied to their college experience be any better at figuring out what to do with it than someone who doesn’t have a degree, but is forever seeking out interesting things that come out of an ever-evolving truth?

Anyway, that’s my diatribe for the evening. If you’re a hiring manager with preconceived notions about college degree holders (or not) that come from decades of brain-hammering by graybeards, then cling to that safety blanket all you want, but know that it’s old thinking. Learn to be (gasp!) creative about how you evaluate applicants, and how you build your teams, and how you execute on your visions. Try to find the other box. The one that doesn’t look anything like it did in college.

I’m interested in hearing feedback on these ideas. I’m sure some will take offense. I don’t mean any. I’m certainly not saying that not having a degree is better, or that degree-holders are all complacent or anything like that. I *am* saying that *formal* education *can* be an irrelevant point of comparison, and that relying solely on the existence (or not) of a *formal* education as the basis for hiring one applicant over another is ludicrous.

Also, my blog is subscribed to by various sites, and I decided to publish this to all of the categories, because I think it *could* be interesting to pretty much anyone. If this is spam in your eyes, let me know. If you find a lively discussion about this going on anywhere, I’d be really interested in that as well :-)

I use GMail extensively. In my main gmail account, I can send mail using a variety of accounts that I’ve authenticated to allow sending from. So, for example, mail from jonesy at pythonmagazine dot com is actually sent from a gmail interface, even though PyMag doesn’t officially use Google Mail for their domain (not that this would be a bad idea. Hrrmmmm…). I also administer a domain using Google Apps for you domain (well, two, but only one is what you’d call “production”). GMail has become a big part of my life in recent years.

This is not to say that it’s perfect by any stretch. In using it over the past few years (or however long it’s been around - I’ve been using it pretty much since it existed), I’ve come up with lots of ideas that would make it better, but I haven’t written many of them down, so I figured I would start doing that, starting now :-)
Here’s today’s “I wish gmail did…” entry:

Time-based filter application!

Oh yeah. Some of you know what I’m talking about already I’m sure. From the user-interface perspective, the change is dead simple. On the screen where you define what to do with messages that match a filter you’ve created, just add an option next to “Skip the Inbox” that says something like “Remove from Inbox after…” and then provide a way for the user to define some time period like “1 day” or “1 week”.

The effect should be that incoming messages that match the filter are placed in the inbox, and are then removed from the inbox after the user-specified time period. The user can still see the message after this time period by clicking on the label, just like you do to view messages that have skipped the inbox. It’s a “delayed skip the inbox”.

The idea here is that labels aren’t perfect, and neither are people. Labels aren’t perfect because labeling alone isn’t really enough to declutter your inbox unless you skip the inbox. That causes problems due to peoples’ imperfections: they don’t click on all of those filter labels every day, and messages fall through the cracks. There are still some filters that would be good to just have skip the inbox altogether, but for all the clubs and organizations I belong to, having even a 2- or 3-day delay would be great.