6 Ways For Devs To Get The Most Out Of Startup Weekend

I’ve been meaning to write this post since November but with another round of Cincinnati’s Startup Weekend imminent I thought it would be timely. I attended the last Startup Weekend that was held in November and had a blast. I met some really neat people that I now consider friends and had fun creating a semi-functional site all in a weekend’s time. These are lessons that I learned during that weekend that I’m sharing so you can be prepared when you attend:

Have Business Cards!

Startup Weekend is first and foremost a great networking opportunity. If you’re social at all you will be asked for a business card about 20+ times during the event. I went in thinking that business cards were a remnant of the past that everyone made fun of but most people seemed to have them. There are a lot of people (judges, mentors, team members, etc.) who are very influential in the local Startup scene and having an opportunity to meet with those people and get your work in front of them is invaluable. Business cards are little token that will help them remember who you are later.

Don’t be heads down coding the whole time

It’s very tempting as a developer to just put on the headphones and go heads down and crank away at the product for the entire weekend but if you do you’re missing out on a lot. Like I said before Startup Weekend is first and foremost a fun networking event and if you’re not out meeting people and talking you’re not going to get as much out of it. I’m shy and have a lot of anxiety when I’m in large groups of people that I don’t know so it’s very tempting to go heads down coding and completely ignore the social aspect of it. Resist that urge and talk to people!

Your work will be condensed down to a 37 second video

I didn’t follow the above advice very well and spent large portions of the weekend heads down coding. I developed a mostly functional site that was a real time collaborate group travel planning site. You could log in with Facebook (or username/password), you could add friends to the group, you could add properties to the group and vote them up/down and make comments, and you could split payments. It was all real time and a change made by one user would be instantly reflected in everyone else’s browser. I was extremely proud of what I had created. Guess what? All that hard work and Dr Pepper got condensed down to a 37 second video for our group’s demo. I could have easily faked out the screens completely and gotten the same demo video for half of the effort. You’ll have to make a call on where your priorities should be: in actually implementing your product or getting the point of your product across even if it’s vaporware. Talk to your group about it and make a call.

Stick to tech you know

Since it’s such a condensed timeline when you are developing you should be as productive as possible. It’s not a great time to learn a completely different stack unless you’ve already spent some time ahead of time learning the basics. Your team will be looking to you for expertise on anything technical and if you’re too busy searching StackOverflow for help on syntax errors you’re probably wasting too much time.

But feel free to run small experiments

That said feel free to try out new things as long as they don’t completely kill your productivity. Have a new Javascript library you want to try out? Do it! There is no one sitting over your shoulder telling you how to do your job. There are no forms that you have to get signed in triplicate by some architecture review board just to use a new library. Have fun with it!

Meteor.js is a beast!

I had been looking at Meteor for a while before Startup Weekend but had never created anything big with it and had always wanted to. I knew enough about it that I wasn’t too worried about it killing my productivity and Meteor really shines when it comes to real time collaborative sites which is what we were creating so decided to use it. Holy crap its awesome! Despite my learning curve with it I still was more productive using it than I would have been if I had picked a framework I was more familiar with (.NET or Rails). It makes certain types of apps extremely easy to implement (especially real time stuff!). I think it’s going to be a huge deal in the Startup World in the near future especially as it approaches it’s 1.0 release.

Offline Apps: Harder Than It Looks

I was recently asked to create a web page that could be used as a sign (full screened browser) in a local festival. The data for the sign would be fed from a JSON API they had set up. Oh but the signs will be on wifi and since there will be thousands of people the wifi will be spotty at best so it needs to work offline as much as possible. For our signs to fully work offline we figured we would have to cache:

  • the .html file itself
  • all JS libs we used
  • any assets (images, stylesheets, etc) we use
  • any dynamic assets (as fed by the JSON API)
  • the results of the last successful call the the JSON API

To do this we ended up using 3 different browser caching mechanisms. I’m not going to spend a ton of time writing about each caching mechanism when there are great articles I can just link to, instead I’ll list what they cache and why we used them.

Let’s start with the obvious choice to enable offline support, the AppCache:


Ideal for caching static files: .html, .js, .css, images.

What it solved for us:

Caching of almost all static resources (.html, .js, .css, most images)

What it didn’t solve:

Caching of the last successful JSON call
Caching of dynamic resources (can’t use wildcard in manifest file)

AppCache is pretty easy to use. You just put an additional manifest attribute on your html element:

<html manifest="example.appcache">

Then in your manifest file (typically has .appcache extension) you list every file that you want the browser to make available offline.

# Here you list out every file you want available offline

The manifest file also provides for two additional sections NETWORK where you can specify resources that ALWAYS use the network and FALLBACK where you list what to do when an offline file is missing.

For more info on AppCache see this excellent MDN article: https://developer.mozilla.org/en-US/docs/HTML/Using_the_application_cache


Ideal for caching data that can change

What it solved for us:

Saving the last known good JSON data and persisting it over page refreshes, browser crashes, etc

For our app we’re relying on a JSON API for all data but if the WIFI crapped out and somehow the page got refreshed we wanted to be able to show the last known data. Local Storage is perfect for this as it stores data as key/value pairs and persists even when the browser is refreshed or even closed.

//On initialization of the page pull out the last known good data
var lastGoodData = JSON.parse(localStorage.getItem('signageData'));

//On receiving new data we write it into the localStorage
localStorage.setItem('signageData', JSON.stringify(ourNewData));

Now if you’re observant you’re probably asking yourself why the JSON.parse and JSON.stringify calls are in that example. The reason is localStorage only stores strings. If you call localStorage.setItem(‘key’, myObject) it’ll call .toString() on your object and end up storing something similar to “[Object object]” in storage. Since we want to store data and not just a string we use the JSON library to convert our data into a JSON string before storing it and likewise when we pull it out of storage we have to call JSON.parse to convert it back to data.

For more information about localStorage see this article: https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage

FileSystem API (Chrome ONLY!)

Ideal for caching dynamic assets

Using the above two methods (which almost 100% work with all modern browsers) got us 95% of the way towards our offline goal. The next problem we encountered was that our JSON Data that comes back contains an array of images that we need to show. We don’t 100% know what the images will be ahead of time so we can’t specify them in AppCache and AppCache doesn’t support wildcard matching so we needed something different.

What we really wanted to do is download the files to the hard drive and serve them from there. We could have written a shell script or something similar and a cron job but we wanted to be part of our JavaScript solution. We came across Chrome’s FileSystem API and it seemed like a good fit. With the FileSystem API you can ask the browser to create a file sytem on the local hard drive like this:

var fileSystem = null;

	function(fs) {
		//success callback
		fileSystem = fs;		

When this code runs you’ll see a little prompt at the top of your browser that says something like:

“notacog.com wants to permanently store large data on your local computer [OK] [Cancel]”

If the user clicks OK then the success callback is called and if they click Cancel the error callback is called.

When we get new JSON data we’re looping through it and downloading all of the images using an XHR request (assuming they don’t already exist on the fileSytem). Once we have the image data downloaded we call a method like this to save the file:

var imageData = //binary image data gotten from XHR request

saveFile(imageData, 'myImage.png', function(localURL) {
	//save the new localURL back to the collection so we can use
	//it to serve the image to the user

function saveFile(data, path, success) {
    if (!fileSystem) return;

    fileSystem.root.getFile(path, {create: true}, function(fileEntry) {
        fileEntry.createWriter(function(writer) {
        }, errorHandler);
    }, errorHandler);

Once the file is saved we call fileEntry.toURL() on it which returns us a URL that we can put in our HTML to serve the file out of cache (something like: filesystem:http://localhost/persistent/myImage.png.

There are a couple of good articles on the FileSystem API:
- http://www.html5rocks.com/en/tutorials/file/filesystem/
- http://www.html5rocks.com/en/tutorials/file/filesystem-sync/ (for using it within a WebWorker)
- http://www.adobe.com/devnet/html5/articles/real-world-example-html5-filesystem-api.html

Path to Mastery: Why I Miss Certification

The last certificate test I took was the Sun Certified Web Component Developer exam maybe 10 years ago. At that time certificates were the hottest thing going around. If you had a cert it would get you in the door. Then the whole thing kinda imploded on itself because people finally realized just because you had that piece of paper it didn’t mean you knew what you were doing. That led to backlash against certificates and I don’t think they’re really used in recruiting any longer (thank God).

I don’t miss the negatives that came with certification (using it as an HR filter) but what I do miss is a clear path to mastery of a subject. When I first learned Java web development I had next to no web experience and had no clue what I was doing. I read a couple of books, did some mock exams and passed two certifications and guess what: I STILL HAD NO CLUE WHAT I WAS DOING. But guess what I did have? Context. I now had been exposed and was made to learn all about the internals of a technology I was being paid to use. That gave me a huge leg up early on in my career and allowed me to see the bigger picture of what was going on on my projects.

Early in my career those certifications were gold. Within a couple of years they were worthless. After developing for a couple of years I learned the ropes of Java web development and I finally had some clue of what I was doing when I approached a problem. But I still think back to those worthless certificates and how they laid the groundwork of future success for me in my career.

I think as our technology stacks mature we really need to think about newer developers and provide them clear avenues to master the technologies we use everyday. There are a lot of really good documentation sites, good books and also video based training sites out there now (PluralSight, PeepCode, RailsCasts, etc) and I think they do a great job of filling this gap but as someone new you really have no clear direction on what you should learn. I think all the training is (mostly) out there but what’s missing is direction. We as a technology community need to find a way to incentivize newer developers down a path of mastery without turning it into an evil recruiting tool.

Don’t get me wrong, mastery takes YEARS of practice. YEARS of learning. YEARS of building. It will never come simply by taking a test or a piece of paper. But I still think back to my early days and how my road to mastery was a lot shorter because the path was already laid out in front of me and I didn’t have to wander around looking for it.

Focus on one thing

Most of this is just me restating what is probably common sense to most people but I struggle with this and it’s my blog so I’m going to write it anyway.

Trying to launch my own product using a tech stack that I’m not super familiar with (Rails) has led me to the following conclusion:

  1. The best way to learn a new technology is use it to solve a simple problem or a problem you already know how to solve
  2. The best way to solve a complex problem is to use technology you’re already familiar with

Again……common sense to some but I think it needs to be restated because some people struggle with it. This is strictly from an efficiency point of view, it’s a LOT more efficient to focus on learning one thing at a time instead of multiple.

I’m not saying it’s not possible to learn both at the same time it’s just not very efficient. In developing my own site I find myself thrashing about with some Rails aspect I’m not familiar with, and a couple hours later asking myself what I’ve accomplished (hint: it’s not getting my site done). My goal is to launch my site but instead at times I’m learning Rails.

Some technologies though are worth the double learning curve (complex problem and new tech) because as you get better you’ll outpace where you would have been without it. This is how I feel about Rails. For now I’m sticking with it, but it’s painful to get a couple hours of work done and really have nothing (UI-wise) to show for it.

If Your Goal is to Learn A New Tech (Efficiently)

Simple Problem and You Know How to Solve Simple Problem Complex Problem but You Know How To Solve Complex Problem

This is why Katas are so important (IMO). Our local Clean Coders user groups Cincy Clean Coders and Dayton Clean Coders do a good job picking simple problems (Katas) and providing an environment where people can experiment and pick up a skill (TDD, a new language, new framework, not using the mouse, etc). They do a good job because they’re focused!

If Your Goal is to Solve a Problem (Efficiently)

Tech You Know Tech You Don’t Know But Is Built For the Problem Tech You Don’t Know

If you’re trying to solve a really complex multi-threaded problem then it’s probably not a good time to pick up a new technology stack unless that new stack is specifically designed to solve the problem (Erlang, etc.). If you have to constantly break your train of thought to google how to do xyz you’ll be a LOT less efficient at solving the problem at hand. When you’re familiar with a language/framework and can “think in it” solutions tend to flow a lot faster and there’s a lot less friction between your brain and your fingers.

Goodbye Server Side, Dropping ‘semi’ and Wearing Shorts During Summer

Anyone who’s met me the past couple years knows I almost always call myself a “semi-independent” developer. I AM an independent but I’m working a W2 contract so even though I carry my own insurance, budget my own time off, etc I’ve never had to deal with the business/tax portion of being an independent. That changes two weeks from now.

Two weeks from now I’ll be starting my next contract with a company doing front end work (Javascript/CSS/HTML) only. Yeah, no server side. That will be a big change for me but a mostly welcome one. I’ve always loved the web and tend to gravitate towards that end of projects I work on but have never been able to solely concentrate on it. Since I won’t be doing server side code (for at least 6 months) that means I must also say goodbye to .NET. I REALLY won’t miss having to boot up my Windows VM everyday and can’t wait to work in Sublime daily!

The project is also fully remote so this summer will be the first of my 10 year career where I will be wearing shorts to work. I just started to rant about corporate culture and sucking the life out of people and forcing them to wear pants when it is 100 degrees out but I deleted it. I’ll just leave this part in though: Dear technology companies who can’t find good developers: Developers love fringe benefits like wearing normal clothes to work.

It also means saying goodbye to the friends I’ve made at my current client which is always the part I hate about consulting. When I started here I never thought I would be here for 2 years but I’ve learned a lot and really enjoyed my time here. I will miss you guys and wish you luck on future projects.

Resources For Web Devs

I reference these sites a lot in my blog posts and in everyday conversations with other devs so I thought I would put them out here in case someone would find it useful. This isn’t an exhaustive list just what I could think of at the moment and I’ll probably add to it as I find other resources.



Really useful site that lists all of the new stuff in HTML5, whether you can safely use it or not, and links to polyfills if they are needed. Good stuff!



If you ever struggle with layouts, floats, positioning (relative, static, fixed, absolute) or display (inline, block, inline-block) then go through this really well done tutorial. Even if you know this stuff you will probably learn something!


Awesome live demo of newer css features which you can toggle on/off to see how they affect the demo. It also lists browser prefixes if needed and states which versions of which browsers support the feature.


If you want to know if a browser supports a css feature this is the definitive guide.



The Mozilla Developer Network is an awesome place to go if you want to learn about javascript. It has awesome API docs for built in objects like Array and String and a handy guide of all language features.

Vanilla Javascript or Why You Should Pay the Bandwidth Gods

TLDR version: use new built-in DOM features if you are doing REALLY BASIC DOM manipulation otherwise do yourself a favor and pay the 32kB to the bandwidth gods and save yourself some time/headache/lines of code!

I’ve Become Spoiled By jQuery

Those of you who know me know that I’ve become obsessed with d3.js lately. The selectors in d3 look a lot like jQuery but in the documentation it states it only uses Sizzle (jQuery’s selector engine) for older browsers and in modern browsers it uses the W3C Selectors API.

Huh? What the heck is that? Apparently while I’ve been living in jQuery-land there have been a ton of advances in plain vanilla Javascript (well, the DOM anyway). So let’s explore what’s new. Let’s start out with a VERY basic html structure:

      <li id="foo" class="bar">Item 1</li>
      <li id="foo2" class="bar2">Item 2</li>

classList API

The classList API allows you to easily add/remove/toggle classes on an html element.
Works In: Most modern browsers except IE8/9

var elem = document.getElementById('foo');
elem.classList.add('bar'); //#foo now has .bar
elem.classList.remove('bar'); //.bar is now removed
elem.classList.toggle('bar'); //#foo now has .bar again

querySelector / querySelectorAll API

JQuery-like selector functions that return the first matched element (querySelector) or all matched elements as a NodeList (querySelectorAll).
Works In: Every browser except IE7

//WOW this looks a LOT like jQuery
var foo = document.querySelector("#foo"); 
var bar = document.querySelector(".bar"); //returns first match
//querySelector is available on elements in addition to document
//return a NodeList of all .bar's inside #foo's
var bars = document.querySelectorAll("#foo .bar"); 
//also available on elements
bar.querySelectorAll(".foobar"); //returns all .foobar's inside bar

So far so good. Looks and feels a lot like JQuery without downloading a JS lib (awesome!). Chances are if you’re reading this you’re not using IE7 so this capability is in your browser right now. Open the console and play around with it! When I saw these in action for the first time I thought “sweet! Let’s scrap JQuery and use this”. My heart was broken though once I tried to do anything useful with the results from these two new methods.

OK Let’s Manipulate The DOM!

What is the point of selecting stuff if we’re not going to manipulate it in some way. Let’s start with some simple examples like adding/removing/toggling a class:


  //add a class to one element

  //add a class to many elements
  //add a class to one element
  //classList makes this easy!
  //add a class to many elements
  //holy crap that is a lot of typing for a simple example!
  for(var i = 0, foos = document.querySelectorAll('.foo'); i < foos.length; i++) {


The querySelectorAll method returns a NodeList object. This NodeList objects looks like an Array and acts like an Array but it’s not an Array. It’s what Javascripters call an “Array-like object”. It can be iterated over and has a length property but is missing all of the essential Array methods (forEach, map, reduce, etc.).

var lis = document.querySelectorAll('li');
console.log(lis.length); // 2
for(var i = 0; i < lis.length; i++) {

You *can* use Array’s map, reduce, etc methods by using some JS hackery. This will help out when we get frustrated below:

var lis = document.querySelectorAll('li');
//borrowing Array's methods.  .call on a method is a fancy way to
//set the this property when the method runs
[].forEach.call(lis, function(li) {
[].map.call(lis, function(li) { return li.id; })
//["foo", "foo2"]
[].reduce.call(lis, function(total, li) { 
  return total + li.id; }, "")

You *could* add to Nodelist’s prototype but in general that’s a bad direction to go. People way smarter than me have already covered why not.

More DOM Manipulation

Now let’s try to find a sub element and alter it:

var foos = $('.foo');
...other code...
//now select one child element and toggle a class

//select many child elements and toggle their classes
var foos = document.querySelectorAll('.foo');
..other code...
//now select one child element and toggle a class
for(var i = 0; i < foos.length; i++) {
//select many child elements and toggle their classes
//really starting to appreciate jQuery at this point!
for(var i = 0; i < foos.length; i++) {
  for(var j = 0, foobars = foos[i].querySelectorAll('.bar'); j < foobars.length; j++) {

…and We Haven’t Even Covered

If you’re not convinced yet that jQuery is still far superior to Vanilla Javascript then remember we haven’t hit on Cross Browser Support, Events, .closest, .parents, etc. All stuff jQuery handles rather nicely and make us ignorant of the mess that is cross browser development.

I know that DOM manipulation is out of style currently in favor of MVC/MVVM flavor Javascript libs but if even ever need to manipulate the DOM then do yourself a favor and pay the bandwidth gods the 32kB and send a thank you note to the awesome jQuery team!!

Can’t Blog…Too busy building

So I’ve complained over and over again on Twitter that I start blog posts but can’t seem to finish one (I’m up to 19 drafts including this post!). I think I’ve figured out why. In the last 6 months outside of my normal 40 hour work week I’ve created the following sites. It might be a cheap excuse but I haven’t found the time to blog because I’m too busy building stuff!


Tools Used

  • Ruby/Rails
  • Responsive Design
  • Nokogiri
  • Coffeescript/JQuery
  • SASS
  • Twitter Bootstrap
  • Heroku
  • Infinite Scroll

What Is It?

Over Thanksgiving holiday I visited with a lot of family and several had the same gripe. They all loved buying stuff off of Craigslist but they hated the search interface. When they were looking for an item like a dresser or a car (really anything visually important which is almost anything) it was really tough because Craigslist only gives you a really small thumbnail. I saw a problem I could solve and help out some family members while being able to play around with rails.

It’s really a simple Twitter Bootstrap design but I took the time to try to get the iPad and iPhone versions working properly using some media queries. I used Nokogiri for the screenscraping and it worked really well. The main problem I had (and continue to have) is that Craigslist is very aggressive at banning people who screenscrape their app. If too many people hit my site at the same time it’ll start getting an unauthorized status code back.

Overall I think it turned out really well and I’m proud of it. My family and the friends I’ve showed it to tend to love it and prefer to use it to search instead of Craigslist site.

Paid Gig: Protecting Black Life

Tools Used:

  • Google Map API
  • Yeoman (for Coffeescript/SASS compiling)
  • Coffeescript
  • SASS
  • Twitter Bootstrap
  • Responsive Design
  • JQuery
  • ImageMagick

What Is It?

A part time paid gig, that’s what it is :). I got contacted by some friends who were having problems with a vendor they were working with who was trying to deliver this site in flash. They kept pulling it up in their iPhone/iPads and it wouldn’t work and when they asked the vendor to fix it they said they couldn’t/wouldn’t. So I got a call to see if I could turn around the site in my spare time within two weeks.

They had a pretty good idea how they wanted it to look/feel but they wanted something closer to Google Maps so that’s what I gave them. It’s an entirely client side Coffeescript/HTML/SASS solution (all data is in Coffeescript). They basically wanted to display information about Planned Parenthood facilities and the ethnic populations around them. I finished the project on time and the client was thrilled with the end result.

Butler County Sheriff Sale Tracker

Tools Used

  • Ruby/Rails
  • Nokogiri
  • Google Map API
  • Heroku
  • Postgres
  • Twitter Bootstrap
  • Javascript/JQuery

What Is It?

OK I built this primarily for my Mom. She loves looking at the sheriff sales on the sheriff’s site (http://www.butlersheriff.org/geninfo/gen_info_sheriff_sales_listing.htm) but the interface sucks. You’d expect a list that you could sort/filter but instead they create a page per auction date so you have to click a lot.

Nokogiri was again awesome for screen scraping the site. I scrape the site for the listings, call Google’s geocoding API for each and then put them in a postgres DB. Then I wrote a simple web app that allows filtering/sorting and viewing the results as a list OR a map.

End result was a happy mom. At least until the Butler County Sheriff’s office changed the listings from a web page to a pdf which broke my parsing logic. I haven’t put forth the effort to fix it so there are only old listings for now (Flip “Show Closed” to Yes) and it will remain broken until I can find the time to go back and work on it

Current WIP: Facebook Mutual Friend Graph

Tools Used:

  • d3.js
  • Facebook Graph API
  • Zero JQuery

What Is It?

Over Christmas break I read a book on D3 (http://amzn.to/XjPBL5). Most of the book was just regurgitation of online tutorials but a couple sections of the book really helped my understanding of D3 and made me realize how cool it was. One of those were the section on layouts and specifically the force layout. I wanted to play with D3 but needed something to apply it to and Facebook’s social graph seemed to be a good fit. So I created a force layout where all my Facebook friends were circles and I drew lines between my friends who were also friends with each other. The result is pretty cool (click the pic above). You can drag the nodes around and highlight them by mousing over.

It’s really funny seeing how groups of friends become huge enmeshed balls of mutual friends. The nodes really separate themselves into several distinct groups: church, Hubbard family, My wife’s family, my work friends, neighbors, and everyone else. My wife’s node (Sheryl Hubbard) tends to always center itself in the middle of the graph because she (obviously) has the most mutual friends with me and crosses over several of the groups so I can see cool stuff like ‘Honey you’re the center of my social world’ (++ several husband points right there).

If you take a look remember this is still a work in progress. Right now it only works with my friend data (static data for now) but I plan on getting it working via Facebook connect so everyone will be able to look at theirs at some point. You can drag the nodes around and mouseover the nodes to see who they represent. I also plan on adding a feature where you can cut someone out of the graph and see what impact it has on the overall graph (should be cool). Also I’d like to add groupings to the right side list where you could turn nodes within a group colors so they stand out in the graph more.

I Am NOT a Model Employee

I’m not a model employee.  I’m not happy with just putting in my 8 hours and cashing my paycheck every two weeks.  I want to learn.  I expect to be constantly be challenged.  I want to work on products I find interesting.  I expect my co-workers to share my passion.  I want a sense of purpose.  Maybe I’m picky but I want it all.

My pickiness has made me wonder if there’s something wrong with me and I constantly reflect on what I really want for my career.  I’ve never formally written it down which in hindsight was a mistake because I never got a full understanding of what I wanted, only what was currently lacking from wherever I currently was.  My thoughts are below:

I don’t want to be the smartest person in the room

I want to work with other smart, passionate people who are interested in building cool stuff.  When your coworkers are bored or not excited it has a tendency to rub off and really bring you down.  I want to work with people who are just as excited about technology as I am and love to constantly push their personal limitations and knowledge.  I expect my coworkers to have personal side project(s) (paid or open source) where the technology stack or libraries are different than what they use at work.  Why?  Because it brings perspective.  Doing something in a different technology stack really opens your eyes to what is easy and what is unnecessarily hard in your current stack of choice.

The times where I’ve made the biggest leaps in my career are when I had unbelievably smart people on my team who openly shared what they were thinking and the rationale behind it.  If you find people like that stick to them like a magnet and just soak up anything you can while you can.  I want my whole team to be full of extremely smart people where everyone brings different strengths and weaknesses and we all learn from each other.

I want to help revolutionize an industry

OK maybe that’s a little extreme but it symbolizes my desire to work on fresh product ideas where we are pushing boundaries.  The worse thing for me is to be bored or unmotivated at work.  I hate the feeling and it saps all of the efficiency out of me and I feel like crap.  I would absolutely love a job where I am constantly challenged by interesting problems (part of my problem is defining interesting).  It’s sad but very rarely in my career have I ever been excited about a product or company and really thought it could change the world.  I WANT to change the world.  I WANT to be excited about coming in to work everyday and know that I’m making an impact. I WANT to be excited about the products I’m developing.

I want to work for a company that values me and my opinions

I’ve worked on cool stuff where the management was horrible at outlining the future.  It seemed like a bunch of VP level people were having secret meetings and outlining our technical futures and the devs were on a need to know basis.  Screw that crap!  I understand management can’t be completely transparent at all times but a lot of your job is setting a direction and making your underlings excited about that direction.  I completely switched my tech stack from Java to .NET because of my loyalty to the company but I could never get a clear answer from them about whether future projects would be mandated to be VB.NET (yuck).  That doesn’t make an employee feel very valued and I ended up leaving because I lost confidence in the management.

At that same job we also had a team that was responsible for core product/architecture but weren’t allowed to speak or give feedback to that team unless we went through a manager.  WTF!  Again, screw that crap!  It gives you a sense that your opinion is not valued and that you’re their primarily to just crank out code.

Part of valuing me and my opinion is giving me some autonomy about how I work and a little independence about what I work on.  That’s a lot to ask for and it’s hard to strike a balance between getting stuff done and constantly spiking new concepts but give your employees at least a little freedom and see what they do with it!

I don’t want to be a manager

I was at a point a couple years back where I could see my career arch taking me into management.  Then I dreamed about a life without writing code and it was a nightmare.  I want to create/code until I die.  Companies really need to stop taking their best devs and moving them to a non-dev role (unless that’s what they want).

I haven’t mentioned compensation yet

That’s on purpose.  Software development is a very lucrative field and you can make a lot of money doing it.  Once you make above a certain level of income though the additional money over that amount becomes a lot less important than what you’re working on and who you’re working with (hat nod to my mentor for so succinctly phrasing this to me).

If I got offered a job making 20k more but the gig sucked I’m not taking it.  I’m past the point in my career where I take jobs because of the money.  I want to work with smart people on cool products.  That doesn’t mean I’m going to work for nothing of course, there is a basement to my salary I won’t go below.  Anything above that though is extra and I focus more on the opportunity than the money.

Is this where I pimp the cool company I work for?

That’s how a lot of these rant type posts go but that wasn’t the point of mine.  I haven’t personally experienced anything even remotely like what I describe above.  It’s what I mentally picture places like Github and Google to be like.  I’ve ended up in independent consulting because nowhere I worked ever fit the model of my ideal company.  I know those companies are out there and that they exist but they seem to be very rare in Southwestern Ohio.  Until I find it/them (or start my own company that fits the profile) I’m content being a hired gun.

If you’ve made it this far down the page and think your company fits what I’ve described above feel free to contact me:

Bruce Hubbard


LinkedIn: http://www.linkedin.com/pub/bruce-hubbard/6/822/7b1

Github: https://github.com/BruceHubbard