Why Speak?

Recently I was discussing my upcoming trip to speak at devLink and was asked why I do it. I figured that’s a better topic than some of the others I’ve thrown up lately.

Do they pay you?

No. =)

I don’t earn a speaker fee. In most cases, I don’t even earn any reimbursement from the organizers. When I’m lucky, my employer will cover any travel expenses and/or meals, but otherwise it’s all on me. The exception has been when it’s a user group affiliated with INETA, in which case they throw some gas money at you. Highly appreciated, but I haven’t done these to turn a profit.

If not money, then what?

Instead of throwing out simple generic answers, I figured I’d go through some of the gigs I’ve had in the past few years and reflect on the specific motivation for each.

TechMixer University Oct 2011 – Committed to Good Commits

I don’t remember how I heard about the event, but I suppose it was likely a tweet. Probably from Michael Crump or Leverett Powell. Regardless, I remember recognizing it as an opportunity. An opportunity for what? To share, to network, and to perform.

I’ve always liked teaching and sharing. I was a tutor in college, and it wasn’t to pay the bills. One of my favorite students was a guy who was probably 32 years old and taking remedial math. Some joked around and called it “big pencil math,” but you know…really simple stuff. One day, I watched him continually pull out a calculator to multiply numbers by powers of ten. I gently showed him the shortcut of counting the zeroes. He didn’t quite get it at first. Two meetings later, he reached for the calculator and then shook his head and moved the decimal point to the right. It’s great when you see it click and know that you’ve helped someone through a challenge.

There was also the selfish reason which really doesn’t need explanation. Getting your name out there is a good thing. Having speaking engagements on your resume never hurts. Most people don’t realize that you can get yourself into speaker lineups at lesser conferences even if you have no idea what you’re talking about. I will neither confirm nor deny that I’ve done that myself Winking smile The point is: recruiters who can’t differentiate between C# and Node will just see that you’ve delivered presentations at formal events.

Finally, despite the fact that I can be quiet around new crowds (I open up more over time, and as I get to know a smaller group), this disappears if I’m “on stage”. From participating in theater programs in high school to the karaoke fever I developed in college, I enjoy performing. While my talks involve a delivery of technical information, there’s also some showmanship that goes into making sure people don’t fall asleep.

Agile Birmingham Nov 2011 – Continuous Integration

After TechMixer, a member of the TMU committee invited me to speak at Agile B’ham about Continuous Integration. What? This came out of the blue; I didn’t feel like I had done so well at my first gig, and I was certainly no CI expert. I remember recognizing this as…well, an opportunity!

In addition to the given stuff above – networking and performing – this one opened up a new facet of speaking engagements. This time, I could dive a little deeper into the concepts behind some of the practices I had simply been consuming. I remember boning up on Fowler’s seminal piece pretty intensely, but I needed a twist. Everyone would have already seen the high level concepts of what CI was – how could I make it interesting for an hour? Then I realized that I had heard a lot of people say they didn’t do CI because it’s too hard to set up. So, zero to hero in an hour would be fun…

In addition to covering the concepts for anyone who wasn’t yet aware of them, I took a bare Ubuntu VM into a fully functioning CI (actually CD) server with Team City. We had code building on check in, packaging artifacts, running tests, and automatically deploying to staging where SQA could verify the latest changes. “Too hard to setup” was no longer a valid excuse. I felt like this one went a lot better than TMU, and there might be a very low quality recording of it somewhere on YouTube.

HUNTUG 2012 – ASP.NET Web API

I had registered with INETA and the Huntsville, AL group got in touch to see if I could do something for them. My sticking point was a topic, so I threw out Web API, which was still in Beta. They said that sounded great, so I did it. The primary motivation was to have a good excuse to dive deep into Web API. I saw Web API as a very promising idea and figured it would go far. Looking at where I am now, I believe that this was a good call.

After the talk, the primary feedback was that I covered way too much, too deeply, for an “Introduction.” Looking back at the outline, I can see that… I’ve tried to incorporate that feedback into later talks.

CodeStock 2012 – Double Whammy (Mind the Gap – PhoneGap, and Committed Redux)

I thought it would be fun to stretch myself and go for a regional conference. CodeStock 2012 was my first. I decided to submit a previous talk and a new one that I’d have to start from scratch. Joey convinced me to do PhoneGap. The motivations here were primarily to go a little deeper into PhoneGap, and given the relative size of the conference, just to see if I could. To my surprise, both sessions were selected…

More HUNTUG

I did a more talks for HUNTUG (Committed for a third time, etc.) and honestly the primary motivation was Cricket’s. I’ll accept almost any excuse to eat at Cricket’s. Seriously, I’m considering making the trip for CHT to HSV during devLink because I will have already come so far from WA…to be so close and still miss Cricket’s might destroy me. I love you, Cricket’s.

This Summer

I submitted talks to both CodeStock and devLink. I was selected for both, but regretfully backed out of CodeStock because two trips across the country amidst all the other relocation / unpacking, settling / new job stuff just seemed overwhelming. devLink notified me of acceptance the earliest, so that’s why I stuck with them.

For these, the primary motivation was to attend the conference in the first place. Some conferences give speakers a ticket, and that makes it a much easier sell when you ask management to attend. I love my topic and am going to give it my all when I present, but I’m equally excited to see what everyone else has to share. Also, due to recent relo, I’m also looking forward to catching up with some old friends (and even family) while I’m over there.

Different For Everyone

Motivations will vary from person to person. Some people might speak to share what they know, others to force themselves to learn. Some might do it to game their resumes, others to game their way into attendance. I don’t think many do it for money (perhaps when you reach a higher level of notoriety, the perks might change). Over time I’ve probably done it for a little bit of all of these, but ultimately in every case, I’ve done it because it’s fun. At the end of the day, that’s probably the only reason you ever should.

Posted in Events, Stories | 4 Comments

Just Try Something

A coworker and I were discussing the finer points of troubleshooting today, and I remembered that I never posted this thought. It’s short and sweet, and for most people it won’t be anything you haven’t heard before, but I can’t let Derek get too far ahead of me.

I recently saw World War Z. Trying not to spoil anything for anyone who would care, let’s say that one character is asked how he or she knew that something he or she had done would work. That character’s answer? “I didn’t.”

Sometimes, if you’re stuck, just try something. Anything to stop standing still. Flip a switch. Clean the solution. Turn it off and on again. As long as what you’re doing won’t make things worse (or even if it can – as long as it can be easily reverted!), you’ll improve the situation. If it works, you’re done. If it doesn’t, then at least you’ve gained that knowledge and ruled out one more variable.

Bonus: In these “just try something” situations, only flip one switch at a time. If you change too much at once, you won’t know what actually fixed the problem.

Extra bonus: Keep track of which changes you make, in which order, and which ones you revert.

Added extra bonus: If you feel that you are often thrashing in debug and troubleshoot cycles, check out Debug It! from PragProg. I read it some time ago, and IIRC it was pure gold.

Posted in Uncategorized | 4 Comments

Off-Topic: Toddler Safety on United Airlines

I want to make any parents aware that when you book United, if you want to keep your toddler seated safely with a parent, you will likely have to pay a premium in addition to the cost of your ticket.

Of course, as always, this is my personal blog and does not necessarily reflect the opinions, thoughts, etc. of my employer, dog, etc.

To help break down this situation, we need to look at a flight situation we had just two months ago. When we relocated in May, we checked the seat map and it looked much like it does for our upcoming flight:

image

What you’re seeing is that there are a lot of seats left in the economy cabin, but they are all “Economy Plus” for a $64 a piece upcharge. There is also an alert when you hit the page:

“All seats available for complimentary assignment have been taken. More complimentary seat assignments may become available when you check in for your flight. If available at this time, you may choose to purchase a United First or Economy Plus seat.”

In May, observing this exact situation, we asked United if they could fix this for us since we have a 3yo. We requested only one parent, but their agent ^FM went above and beyond the call of duty to seat all three of us together at no extra charge.

7 May

{confirmation number redacted} We’d like our 3yo to sit with a parent, not a stranger. We’d also like to know if we can use our car seat on the flight. Thanks!

7 May

Your seats are 8C & 7BC and 15DEF. Approved child safety seats may be used on the plane for more info see http://bit.ly/XI9nj4 . ^FM

7 May

Thank you so much! We’ll look into whether our car seat is FAA approved – is there anywhere I could get seat dimensions (i.e., will it fit?)

It is noteworthy that the assigned seats were “Economy Plus” seats. ^FM didn’t magically free up the “complimentary seats” that were unavailable through the seat map on the United website. ^FM just made sure that our kid would have a responsible adult seated beside her.

It is also noteworthy that ^FM didn’t even make an issue of this. The reply was just a notification that it was done. Because of their rapid and easy response to this situation, we chose to fly United again, but they have changed their tune. I asked them just as nicely…

3 Jul

For {dest>arr redacted} flight on conf {conf# redacted}, can we please get our 3yo ({kid’s name redacted}) to sit with at least 1 parent (David or Brandy)? Thanks

… but all responses have been to the effect of “Cough up the cash!” This is just one of many.

Here is the final DM action from this morning, where apparently ^JP went and found ^FM (watch the signature change) to clarify what they had done last time. There is just one problem… In May, we got the same “There are no complimentary seats left” alert and were subsequently assigned Plus seats at no extra cost. Why the change in July?

43m

We have EconomyPlus seats available for purchase as advised for all three passengers. Otherwise seats will be assigned at the airport. ^JP

38m

Remember also we only request one parent with the child, not both. So this is TWO SEAT ASSIGNMENTS. United is being unreasonable.

33m

(1/2) When customers are traveling with small children and seats are changed, we do our best to re-seat them together. At the time of

33m

(2/2) booking if complimentary seats are not available, you may continue to check or our airport co-workers will work with you. Thanks ^FM

So it looks like we will be paying United about $130 in upcharges. On this airline, keeping your toddler safely seated with a parent instead of with a stranger is considered a luxury upgrade. Parents, as you plan your travels, please consider this when you see United’s ticket price and make sure you budget for the “upgrade.”

Please do share this.

Posted in Uncategorized | Tagged , , , , | Leave a comment

The Many Adventures of Externalias

The bad news is, I’m not much of an artist.

The good news is, if I draw this in Paint .NET, it’s about the same as if I draw it on the whiteboard and take a picture.

image

His name is Externalias. He has been described as “a kind of Pac-Man thingy, but with one wing on his back, and antenna…and a lot more scary.” His nemesis is Subtopdecor, but that’s for another post. You may ask yourself, “Why is Ruttka sharing this?” I write to you today about Externalias because his origin story contains a useful answer, and despite the silliness (horror?) of the mascot, it’s possible someone could benefit from hearing it.

About two years ago, my friend Chris sat looking at red squiggly. It implied that he was not referencing a required assembly or was missing a using statement. He was definitely referencing it. We found that the using statement also griped that the namespace didn’t even exist. As he manually typed the using statement from scratch, intellisense never showed the namespace that he needed to use for the desired type.

I didn’t know the answer at the time, but when it happened again last week, I recognized it and was able to fix it pretty quickly.

Fast-forward to the present. Here is one way to get into a very similar situation for which the resolution is identical, but overly simplified and contrived for the purposes of illustration in a blog post. Click any of these images to embiggen.

image

I will not be going into how or why such a situation is ever created. What I will say that I’ve seen it on multiple projects with multiple teams in multiple organizations, so it undoubtedly does happen.

When you build, or rather when you try to build, it’s not going to work.

image

The type ‘Foo.Data.Bar’ exists in both ‘c:\src\Externalias\Foo.Data\bin\Debug\Foo.Data.dll’ and ‘c:\src\Externalias\Foo\bin\Debug\Foo.dll’

The error message describes the problem fairly well, but unlike other errors, it doesn’t recommend a solution.

Now, back to that day a few years ago, when I popped into my friend’s cube a little later, he had just found the answer: EXTERNALIAS! Of course, he had said extern alias, but I was in the habit of hearing words mashed together (see also: Subtopdecor).

image

Here’s what you have to do. View the references of the project in which the problem is occurring, and choose one of the colliding assembles (doesn’t really matter which). View the Properties for that reference, and note that it (like all the others, most likely) is only in the “global” alias. Add another, comma separated.

image

Navigate back to the code file in which the problem is occurring. Above all the usings, add

extern alias {theAliasYouJustMadeUp};

And change the using to

using {theAliasYouJustMadeUp}::{whatYouReallyReallyWant}

image

The build succeeds. For the curious, yes the global:: is implied but can be made explicit…

image

Acknowledgments

Thanks, Chris, for being the first person I know to have encountered this. May you never encounter it again.

Thanks, Externalias, for being the greatest doodle I’ve ever created and preserving the memory of this solution in such a whimsical form. May your presence on developer whiteboards be ever increasing.

Update

What I left out is that (long story short) I doodled these characters on our whiteboards. If I remember correctly, Subtopdecor came first. After I misheard “Subtopdecor,” Chris said it sounded like the name of an evil robot. My first sketch of Subtopdecor was somewhat leaner and meaner, but along the way he filled out and got a little more neutral. I prefer the original interpretation, but for some reason I can no longer draw it successfully. For Externalias, the doodle came first, quite randomly. It was only later that I misheard “Externalias” and we applied the name. They have been spotted at venues as grand as the McWane Science Center in Birmingham.

Posted in Development, Stories | Tagged , , | Leave a comment

Easy Wins

Last night, Derek mentioned that he wanted to start writing again, and I realized that I’ve been pretty slack about it too. I thought that maybe we could be accountability partners.

Then I realized that my most common excuse not to write anything is that I don’t know what to write about, so I asked him to spot me a few ideas. His response seemed a bit meta.

I don’t have a full answer to Derek’s question about how to develop a habit of blogging regularly, but I think it might be as simple as making a commitment. This might be “n posts per week” or “n hours of honest effort to write something,” but whatever it is, we need to stick to it.

Like I mention above, this usually breaks down when I get stuck on what to write about. Derek might not have intended it, but I think the solution is in his latest post:

Not our best moment, but we’ll take the easy wins wherever we can. 🙂

This post is not my best moment, but consider it an easy win to build momentum. Hopefully the next one will be a bit more substantial Winking smile

Posted in Meta | 2 Comments

++

In Spring 2003, I was looking around for what would be my first professional job after getting my degree. One interview stands out not only because it’s where I ended up but also because I gave what might be the most terrible answer of my career.

Most of my coursework was in C++, so most of the technical questions were on syntax and defining terms like polymorphism. Somewhere along the way, one of the interviewers asked me what ++ does. I looked at him, thought for a moment, and said something to the effect of, “I don’t know. I don’t think I’ve ever seen that before!”

I’ve come up with all kinds of explanations for this. I had been up late the previous night watching news of the Iraq invasion. I had gotten up early because the office was an hour from campus. Previous questions might have put my mind on some strange track where an increment operator wouldn’t apply. Maybe it was all just an extremely vivid nightmare that I’ve mistaken for reality!

I’ve certainly had other moments where I’ve looked back and realized that I could have done better, but it’ll be hard for anything to knock this one off the top spot.

What’s your most treasured goof?

Posted in Stories | Leave a comment

Thoughts On Transparent Compensation Policies

As always, this is just me and doesn’t reflect the opinions or beliefs of my employers, my family, my dog, my family’s dogs…you know the drill.

A few days ago, I noticed this come across Twitter.

 

I started expressing my thoughts in response tweets, and then I got to a point where it was just too big for Twitter.

An Argument For Transparency

At the risk of appealing to authority with “Spolsky says,” I think he has some great points in his old post about Fog Creek Compensation.

Many companies try to obfuscate the rules they use for determining compensation in hopes that they won’t get caught paying some people too much and others too little.

Wait. “Get caught”? That makes it sound so criminal! Wide swings are understandable, aren’t they? It’s just business, isn’t it? Everything is negotiable. A business has a fiscal responsibility to minimize its costs wherever it can, and that includes salaries!

So the best hire you’ve ever met comes in with no clue how to negotiate and hastily accepts a lowball offer. A smooth talker shows up and extracts twice the pay for questionable quality. The latter is told, “Be sure not to speak of this to anyone – we can’t to give this deal to all of our folks, but you’re worth it!” Everyone is happy until…

We feel that in the long run, this can only hurt us through negative morale, high turnover, and destructive office politics.

It doesn’t matter what policy is in place to keep people quiet, teammates become friends and friends talk. The awkward moment comes when they think they’re equally valuable to the business, so one talks money. The other says “Ha, right. Maybe we’ll make that much in a few more years!” Then the first says, “What? You’re not making that now?” The first feels guilty, and the second feels slighted. It’s bad news all around1.

Could it get worse? You bet! Imagine an entry level new hire with a big mouth lets his salary slip to the team. Imagine that it’s higher than a few of the senior devs who stuck with the business through some really tough times. Imagine the resentment1, and realize that it’s not just the victim who stews on this. The whole team feels it2.

This transparency policy is a good thing that forces Fog Creek management to keep things fair.

In the above situations, management believes that the “don’t tell!” policy is actually being observed, so they continue with their shenanigans while developers seethe in angst. The developers try to address the situation, but they have to pull punches so as not to admit that the policy has been broken. Management takes it in stride and continues with their shenanigans. They ice the cake with the standard “We just can’t afford to give you a raise – you’re already paid higher than many others so please don’t discuss your salary around them!” Rinse, repeat, resign4.

An Argument Against Transparency

Well, if you make it all public, you’re basically inviting and expediting all the negative consequences above, aren’t you? When you instruct your people to keep quiet, you’ve at least got a chance. If levels and salaries are made known, you’ve guaranteed the losing scenario!

Unless…

It’s that third quote from Spolsky that does the trick. This time, I’m adding emphasis and a footnote of my own.

This transparency policy is a good thing that forces Fog Creek management to keep things fair5.

Take a look at the “Determining Levels” section of that post again. There are different facets (years of experience, education, enabling the team, skill, role) that give overlapping guidelines about what level a person could be in. This lets everyone understand why they’ve been put in a certain level, and it provides guidelines on what they can do to push toward the next.

In Spolsky’s scheme, if I’ve got 4 years of experience and a Bachelor’s, should I be surprised that I’m Level 11? If I want Level 12, I can wait a couple of years, or I can try to become an “Enabler” to get that boost. If I care more about the money than the title, I could strive for the “Superstar adjustment.” Now I’m earning the salary of an “11.5”, but the whole team has agreed that I deserve it.

Continuing in this scheme, if I look at Sally and she’s a level 14, I know why. It’s not because she negotiated better – it’s because she’s got 10 years, a PhD, and regularly offers up “lofty thoughts” about how the business can excel.

Whether the scheme itself is perfect6, just having a scheme at all establishes a framework. I know what I’m making. I know what Sally is making. She knows what I’m making. The whole team knows what everyone is making, and we all know why. More importantly, we know that politics won’t change it. Now we can all focus on getting things done. We can turn our attention to competing with our competitors instead of with ourselves. In doing so, we naturally grow in age, skill, and business strategy – all of which move us toward the next level.

So, what’s my answer?

This post certainly makes it sound like transparency is the hands down winner in my mind, but I can still argue it either way. If you’re building a new business, starting out transparent sounds like a great idea. For an existing business, transitioning into it will be much more complex. Like I told Darin and Jim, in my first response on Twitter,

 

If there is currently a labyrinth of arcane calculations and manipulations that no one understands, suddenly going transparent is going to bring a lot of disappointment. Even if it leads to a positive effort to put everyone where they should be, trust in management could already be broken if someone feels they’ve been cheated.

Looking at another scenario, let’s pretend it’s already completely fair when everything is unveiled. If the team has a surplus of immature or conceited folks, they could be upset with their relative position once the curtain is drawn. If Buck thinks he is heaven sent but suddenly realizes he’s in the middle of the pack, Buck might start looking. Then again, it sounds like maybe this team is already toxic.

So, Jim, I’m going to bring this back to your original question, broken into three parts.

  1. How would I feel if my salary was public knowledge? Meh.
  2. (and everyone else’s)? This is the complicated bit. I’m really not sure that I’d be interested enough to look at it. I think I’m paid fairly and my family is happy, so what does it matter if Mickey or Minnie make more3? If I did look, I’d like to think that I’d reflect on it and come to humble acceptance in any case. I’d hope that the rest of the team would do the same. I’d be more concerned with the potential aftermath than with the transparency itself (i.e., don’t care if salaries are public, do care whether the team self-destructs or grows to a new level of maturity).
  3.  Would this solve or cause more problems? Let S be the number of problems solved and C be the number of problems caused. (S > C) || (C > S) will be true as for any S, C where S != C.

Obviously, my perspective is based on my experiences. I’d love to hear what others think based on what they’ve seen. Comments section below, after an uncommonly long set of footnotes.

1 Have I seen this happen firsthand, heard it from a coworker, heard it at a conference, or cut it from whole cloth? I will never tell 😉

2 I suppose that part about the whole team feeling it depends on the team. I’ve been lucky to have pretty much always been on fantastic teams where we all get along and sing kumbaya together at lunch. Alright, I made up the kumbaya thing, but really, brothers and sisters in arms and all that jazz.

3 This doesn’t necessarily mean that I’d be disinterested in earning more myself. Having more to put into savings, investments, early retirement – nothing against that. But that’s my situation. Mickey and Minnie’s are, at best, nothing but objective data points for a discussion about my own earnings.

4 I’m about to change jobs. It has absolutely nothing to do with this kind of situation. I want to make that abundantly clear.

5 Remember from your logic classes that this doesn’t mean an absence of the policy implies an absence of fairness. This is not the only way to keep things fair, it’s just one way.

6 I’m not sure that I entirely agree with Spolsky’s criteria, but to be fair, the post was from 2000. A lot has changed as people have greater access to training outside of a university setting. I’ve seen a person with a Master’s who could not solve problems more complex than untied shoelaces, and I’ve seen a person with no degree whatsoever blow my mind.

Posted in Uncategorized | 3 Comments