Do you want to Change the world?

Nb: In the intervening time, we changed our name to Jewelbots.

“Do you want to change the world?”

I hear it everywhere, and it’s normally crap. Your Uber-meets-Spotify-meets-AirBnB-meets-your-appetite-for-food-at-2am idea is not going to change the world.

I’ve heard it so much I’ve become jaded. I actually repel when I hear those words.

That was before I knew about Jewliebots.

I’ve known Sara Chipps since I’ve known about Twitter. She was one of the first tech people I followed. She produced a rad video on Ada Lovelace, and her enthusiasm about technology has always been inspiring to me.

When she first talked about Jewliebots in her medium posts on building a hardware startup, I became even more interested. My first and sole thought was: How do I become a part of this?

Let me step back. Jewliebots is (in our parlance) wearable jewelry aimed at exposing young girls to programming. It’s one part Minecraft, one part Arduino, and all social. In short, it aims to make programming interesting and accessible for young girls.

It also has the potential to change the world.

After meeting with Sara and Brooke and the rest of the team behind Jewliebots, I was even more on board.  Here I was, interviewing for a startup with a goal I believe in and the potential to work with people I believe in.  Normally it’s either a company I believe in or technology I’m passionate about; I’ve never been in the situation where both apply.

I’ve only been happier three more times than the moment Sara and Brooke offered me the chance to work on Jewliebots: my wedding day and the birth of my two daughters.

I believe in Jewliebots, I believe wholeheartedly in our mission, and I’m proud to say that starting today, I’m employee #1 and VP of Software Engineering at Jewliebots.

My goal: to make sure the software that powers Jewliebots meets our mission and to build a team who shares that goal.

I’ve never felt more strongly about anything in my professional life.

If you’re interested in learning more about Jewliebots and potentially joining us, please drop me a line. I’d love to hear from you.

Making the Leap

Today marks my last day at Higher Logic, and with it marks a year+ of working to build up the software infrastructure from startup to sustainable.

I’ve really enjoyed my time here; a year ago I had no knowledge of AWS, and a developer’s knowledge of SQL Server. I had only shipped one JavaScript project, and was still uncomfortable just going out and ‘doing’ on my own.

That year has also included:

  • Marking one year as a DBA; and 2 years as a Full Stack Developer.
  • migrating 500 databases from SQL Server 2008 to SQL Server 2014
  • Planning and implementing a Disaster Recovery solution for 500 databases;
  • Shipping Higher Logic’s Widgets platform
  • My first, second, and third pull requests into open source projects
  • writing fixes for Video.JS playlist plugin
  • digging deep on SQL Server improvements; query optimization and production troubleshooting
  • Making lots of mistakes along the way
  • Refactoring and putting in unit tests (I repeat myself) to allow improvements to infrastructural code including a hand-rolled ORM (not by me)
  • Giving several talks; including a talk at the HUG Super Forum on the new Widgets Platform and a talk to developers on Git
  • Building tools to provision SQL Server instances on AWS and to set up those instances according to the Brent Ozar SQL Server Setup Checklist
  • And even more mistakes and fixing of those mistakes; including two (brief) production outages

I’ve enjoyed my time in the .NET world; but I’m anxious to get back into other technologies, and to immerse myself in the JavaScript world. Time to leave the kiddie pool.

As to what I’m doing next? I’ll give two hints:

  • See the title
  • My career progression has been: Large Corporate -> Defense Contracting -> Medium Sized Business -> Small business that just left startup mode -> ?

Confusing UX and the CAN-SPAM Act

I tried to unsubscribe from Lumber Liquidators’ emails today:Screen Shot 2015-03-05 at 9.10.36 AM

There’s a button that says unsubscribe; but unless you notice and click the checkbox above it, you won’t be unsubscribed. Don’t believe me? Proof:

Screen Shot 2015-03-05 at 9.31.57 AM

You’d think this would be illegal under the CAN-SPAM act, however, it isn’t:

5. Tell recipients how to opt out of receiving future email from you. Your message must include a clear and conspicuous explanation of how the recipient can opt out of getting email from you in the future. Craft the notice in a way that’s easy for an ordinary person to recognize, read, and understand. Creative use of type size, color, and location can improve clarity. Give a return email address or another easy Internet-based way to allow people to communicate their choice to you. You may create a menu to allow a recipient to opt out of certain types of messages, but you must include the option to stop all commercial messages from you. Make sure your spam filter doesn’t block these opt-out requests.
6. Honor opt-out requests promptly. Any opt-out mechanism you offer must be able to process opt-out requests for at least 30 days after you send your message. You must honor a recipient’s opt-out request within 10 business days. You can’t charge a fee, require the recipient to give you any personally identifying information beyond an email address, or make the recipient take any step other than sending a reply email or visiting a single page on an Internet website as a condition for honoring an opt-out request. Once people have told you they don’t want to receive more messages from you, you can’t sell or transfer their email addresses, even in the form of a mailing list. The only exception is that you may transfer the addresses to a company you’ve hired to help you comply with the CAN-SPAM Act.

(source: CAN-SPAM Act Business Compliance Guidelines)

The UX may be designed to confuse visitors into staying subscribed; but (using a plain reading) it complies with the letter of the law.

Bonus: The CAN-SPAM act never uses the word ‘unsubscribe’, and only uses the word ‘opt-out’ three times.

On “Minimum Vacation”

Vacation days: Wherever you go, it’s a topic that makes CFOs groan and workers cheer. It’s generally understood as one of the best perks of a company in industries where pay is relatively fixed or there isn’t much competition for talent. In places where there is a lot of competition for talent; it’s a paper benefit usually. Yea, it’s there, but you’ll be working so hard that you won’t even realize you have it.

Thinking about Developers, we tend to work very long hours, even though it empirically hurts us and the company. Extreme Programming tried (and failed, sadly) to introduce the notion of the Eight-Hour burn; a reasonable spin on what programming should be. But with distractions aplenty, it’s hard to justify an eight-hour burn.

Whether we want to admit it or not, programmer culture is destructive both to itself and the businesses that hire us. Some businesses have tried to turn this negative into a positive force, by having Game rooms (Google, Stack Exchange, Twitter, Facebook, Zynga, Dropbox, and a lot of others (I didn’t link individually because I didn’t want Google to think I was a bot, incidentally)). But the unfortunate quality of a gameroom is that if you’re putting in an eight hour burn, you don’t have time to use one. In effect, its presence is a signal you should be putting in more than eight hours a day — unsustainable if you want a happy and healthy workforce.

Some of these same businesses have also tried the concept of ‘unlimited vacation’; the idea that you can take as much time off as you need, so long as you deliver results expected by the business. This requires clear expectations (which isn’t always easy if you don’t have a rigid feedback structure), and trust.

In reality, unlimited vacation really means that depending on who you are and what you’ve done, you either have two weeks off a year or four (still not bad). It also means that if you’re on a team where no one takes time off, you’ll be the odd one out if you do — never a good idea (even if it’s supposedly culturally acceptable). The old adage: “Get in before your boss, leave after” still applies. It’s also a cost-saver for the business: No paying of vacation days when a worker leaves, and no need to pay for costly (and usually bad) PTO tracking software.

Other businesses, recognizing the problems with unlimited vacation; have instituted the idea of a ‘minimum vacation‘, or unlimited vacation with a culturally mandated (and therefore acceptable) floor. The CEO of Travis CI, Mathias Meyer, explains the shift:

When Travis CI turned into a business with employees, one of our ideas was to not constrain people in how much time they take off for vacations. We didn’t track the days people were taking off, and as the people running the company, we didn’t actively encourage people to take times off. In short, we had an open vacation policy.

The cause was intended to be noble, as we didn’t want to get into the way of people taking time off as much time as they need to recharge. I myself am a big fan of disconnecting for a vacation and staying away for more than just a few days to free the mind, gain new energy and fresh insights.

Two years later, this idea turned out to be a failure, and we’re changing our vacation policy.

Deeper into the post, he talks about what Travis CI’s minimum vacation policy actually means:

Starting in 2015, we’ve implemented a minimum vacation policy. Rather than giving no guideline on what’s a good number of days to take off, everyone now has a required minimum of 25 (paid) vacation days per year, no matter what country they live in. When people want to take time off beyond that, that’s good, and the minimum policy still allows for that.

[…]

We removed ambiguity of whether or not someone should check in by having explicit guidelines on what constitutes a vacation day and what doesn’t. Our expectation is that when you’re on vacation, you do everything but stuff that’s related to Travis CI.

The whole post is well worth the read.

Vacation will always be a thorny issue, and minimum vacation may not solve the problem of programmer burnout, but it is a good step in the right direction. There are other steps we can take, but it should really start with dropping the keyboard and remembering that there’s a life beyond the compiler.

A more useful hiring metric

I’ve taken part in a lot of interviews. A lot.  I’ve conducted a lot of phone interviews, and read even more resumes. I’ve also had my share of weird interviews. If reading my old blogs posts on the subject tells me anything, it’s that even after doing it for years, I still have no idea what I’m doing.  I know, I should be an expert; but every time I think I’ve got this whole thing figured out, I realize: I don’t.

I’m not sure any of us do.  That isn’t to say that we’re incompetent (far from it) just that interviews aren’t a solved science; they aren’t something where you can change one variable to test what works and what doesn’t.  Every person you interview, every situation you sit in will be so different that it’s hard to draw any meaningful conclusions based on objective metrics.

As an example:

I took part in an interview once where there was this code exercise that was given to me. Originally it was to be given at 8pm at night, and I’d have an hour to do it.  This was after I’d already spent 10 hours working (I took a break, as I always do, to have dinner with my family and put my daughters to bath and bed).  If you’re wondering about the math, I had started working at 7am that morning.  By the time the code test started; it was 8:40pm (already 40 minutes late due to interviewer error) and I was tired.  Since I believe in the 8 hour burn, I should have pulled the rip cord; but I didn’t.

The purpose of the code exercise was to see how well I code.  Here’s the actual text of the exercise (anonymized):

Create a form using bootstrap that has 2 controls: date input & submit button (see video and screenshots below) . Click Submit button should calculate:
1. User’s age based on the selected date (long form date)
2. User’s next birthday (long form date)

Use the following libraries:

My success was determined not by how well I code; but by how well I implement a specific library’s control, with a specific library’s validation; in an hour, after having already spent 10 hours working. My success hinged as much on the documentation available for that library as it did on my own programming prowess. Also:  I can spend an hour mucking with CSS to get it to vertically align something correctly. As you can tell, I failed; but it left me with a realization: interviews reveal as much about the state of the company you’re interviewing at as they reveal whatever the interviewer wants to know about you.  Not necessarily what they vocalize, but what they actually want to know.

These types of interviews make me wonder: Is this what programming is about? Being able to implement a control you’ve never seen in a very specific way with a specific design in an hour? Is this what we’re hiring for as an industry? If so, what’s wrong with us?

On a practical level, I have never been in a situation where if I didn’t implement a new feature in an hour, we’d lose a client.  I have been in situations where I had to quickly fix complex problems in an hour (usually less time than that), but I had a lot of domain knowledge already. I knew the systems involved and could figure out what part to look at.

The more I think about it, the more I think our priorities as an industry are inverted. The evidence seems to bear this out.

We want to see how quickly someone can do something; or how many years of experience they have in a technology.

But does that really matter? Does it matter whether it takes me 1 hour or 2 to implement that control? Does it matter whether I have 3 or 5 years of experience in a framework? I don’t think so, and neither do a lot of other people.

What matters to me is something near and dear to my heart: What mistakes have you made with language/platform x?  With the technologies I’m not a beginner in, I can list out my mistakes all day long. I could tell you multiple stories about how I broke production because of something stupid I did.

It’s embarrassing; but without those mistakes, I wouldn’t know half of what I’ve learned.  It’s even more embarrassing telling someone else (hello internet!) about my mistakes; but ultimately, those mistakes are how we learn.  If someone doesn’t make mistakes, they’re either really really really awesome, or they’re not doing anything.  The latter is far more likely.

I used to think those mistakes meant I was a bad programmer.  I don’t any more.  Now, I take them for what they are: growth.  There’s a (perhaps apocryphal) story being shared on twitter right now along those same lines:

B-9mYFKW4AEEFKd

That story gives me hope. Maybe with the social web stories like this will infect the leadership in business, and change what we look for in an industry.  But for my part; whenever I have the power to do so, I want to work with individuals that are ok with making mistakes; of knowing that they don’t know the answer; but working to figure it out.  I want to work with someone not because they have x years of experience, but because they have made mistakes and learned from them. To me, that seems a far better indicator of someone’s value.