Support the Fight Against Epilepsy!


I will be walking in the 2013 Summer Stroll for Epilepsy this May in memory of my niece, Kearra, who we lost earlier this year. This is the first time I’ve participated in a fundraising event like this, and I have a very modest personal goal that I’m trying to meet. Please consider donating to support this wonderful event.

Click here to visit my personal donation page. Any donations, big or small, will be greatly appreciated.

Read more about the event here.

Read more about the Epilepsy Foundation of Michigan here.

Read more about epilepsy here.



Extra McNugget Sauce, Scope Control, and Expectations Management

One of the biggest challenges that my team faces when working with customers on a software development project is controlling scope. These projects begin with a contract followed by a formal requirements document that must be signed by the customer prior to beginning development work. We’re realistic about this process; we don’t expect that every requirement will be correctly identified upfront, and we’re willing to work with the customer throughout the development process to ensure that their needs are met.

Occasionally, we’ll find ourselves working with customers that keep pushing scope, little by little, until the project has been stretched so far beyond the original requirements that we’re not sure how we got there. Kudos to that customer for getting some serious bang for their buck, but at some point we, the development team, need to draw the line. The problem in a lot of these scenarios is that we’ve given and given and given with little or no resistance. We’ve set the expectation that if they ask for something, we’ll give it to them. We can find ourselves with a customer that’s unhappy about being cut off despite delivering a lot more than was originally bargained for.

This scenario has two major flaws. There’s obviously the issue of scope control, but expectations management for the customer is equally problematic.

I like to use a McNugget sauce analogy here. If you go to McDonald’s five times and get an extra sauce with your McNuggets for free, you’re happy. But then, on the sixth visit, maybe you get charged for the extra sauce because it’s the restaurant’s policy. This would upset a lot of people. “This is an outrage! I come here every Tuesday, and every time I get an extra sauce. I have never been charged for it before.” Rather than being happy about getting the extra sauce for free the first five times, they’re upset about not getting it for free the sixth time. However, if the McDonald’s employee were to let you know, “Hey, we’re supposed to charge for extra sauce, but I’ll let you have it for free this time,” then you’re less likely to feel like you’re being unjustly charged when you’re eventually asked to pay.

The same philosophy can be applied to our software development projects. When the customer makes that first seemingly innocuous, out-of-scope request, let them know that you’re doing them a little favor. “This request is out of scope, but I can see where it would be valuable. I’ll discuss this with the team to see if we can fit it in.” If you decide to do it, be sure to let them know that you’re making an exception this time. Finally, document that you gave them some “extra sauce” so that when/if you need to push back on a request, you can show them everything they’ve already gotten for “free.”

Getting back to the McNugget sauce analogy, some folks would still probably be upset about being made to pay even when they’ve been notified that they should be charged for the sauce they’re getting for free. “I know it’s not supposed to be free, but this is the first time I’ve ever been asked to pay. Get me the manager!” In response to that, I’d say an equally valid takeaway from this article is, “Do not give away [too much|any] extra sauce for free.”

The Way the World Should Work

Yesterday morning, I was waiting in line at Starbucks to grab a quick coffee on my way to work. The guy in front of me paid with his phone, but his balance didn’t cover the cost. He stepped aside and started the process of reloading on his Starbucks app. He seemed like a nice enough guy; the baristas knew him well enough to suggest his drink before he ordered, and he was apologetic about his mistake once he learned that he had insufficient funds. I’m not sure why he didn’t just pull out a credit card to pay for the rest, but that’s not the point. I think he panicked and just wasn’t thinking clearly, as silly as that may sound. But, I digress.

As he stepped aside, I stepped up to the register, ordered my drink, and offered to pick up the rest of his bill. It was just a dollar, and it seemed like a good random-acts-of-kindness opportunity. Plus, I figure I’ll inevitably find myself in that same position at some point. I know I’d appreciate it if the person behind me in line just floated me the buck instead of impatiently glaring at me while the barista waits and eventually decides to void the transaction in order to ring up the next person. And so I suggested that she just add my coffee to the order, and I’d pay for the rest.

The Starbucks employee let me pay for the rest of his bill, but then she did something unexpected and gave me my coffee for free. I definitely wasn’t hoping for or expecting to get anything–I was just trying to help a guy who needed a dollar. I think it was just her way of saying, “Hey, thanks for being a good person.” It was a nice surprise, and I left Starbucks feeling like this is the way the world should work.

It really felt like wins all around, too. The guy who ran out of money got helped by a stranger and an unintentionally-cheaper drink. I got the satisfaction of helping out a stranger and an unintentionally-cheaper drink. And, finally, Starbucks gets more of my business for acknowledging, supporting, and rewarding a good deed at the expense of a cup of coffee. Thanks for that!

More Helpful Information Chosen Just for Me

I’ve been an AT&T U-verse customer for a few years now, and I’d say I’m at the “very satisfied” level of satisfaction. I get good internet speed, free HBO (3 months at a time), and wireless cable receivers. I’ve only had one problem when my DVR crapped out, and that was fixed promptly with a replacement. Last month, they called me because they “noticed that I didn’t have any active promotions” and proactively lowered my monthly bill by about $60. I love them!

Yesterday, I called their Rewards and Rebates customer support line because I moved to a new house last summer, and there was a take-us-with-you promotion that offered a prepaid Visa gift card for transferring qualifying U-verse services to a new address. I don’t remember the details now, but they put a note about the promotion on my account when I was transferring the services last year. I think it was just because I had asked about the promotion and the customer rep decided to add a note just in case the reward didn’t trigger automatically–good thing we did that! When I called yesterday, the guy I talked to read the note, reviewed my account, and issued the reward with no questions asked. I didn’t even have to wait on-hold to talk to anybody despite the standard we’re-experiencing-high-call-volumes-at-the-moment automated warning message. It was a completely painless customer support experience!

After contacting any customer support, it’s not unusual to receive a “Thanks for contacting support!” email. AT&T went the extra mile here–in a bad way–and sent me twelve of those emails overnight. TWELVE!


What’s up with that? Each email had the subject “More Helpful Information Chosen Just for You” and contained the following message:

It was our pleasure to work with you today. We’re sending the links below to give you additional help related to our conversation.

Thank you for contacting us.

And then each email had a different link for fixing a common problem, none of which were related to the reason I actually contacted support. But, hey, at least I’ll be in good shape if I ever need to know How to fix picture or sound problems on U-verse TV, How to fix sound problems on U-verse TV, How to launch and use AT&T Troubleshoot & Resolve, Troubleshoot U-verse: Internet, password, and email – video, Update credit/debit card or checking/savings account information, How promotions appear on your bill, Travel with U-verse, How to use Wi-Fi at AT&T hotspot locations, Perform or schedule a virus scan with AT&T Internet Security Suite powered by McAfee, Learn about AT&T Internet Security Suite, Prepare your computer to download and install McAfee Consumer products, or Download and install AT&T Internet Security Suite powered by McAfee! Thanks for all the proactive support, I guess.

I’m still a raving fan of U-verse, though. If my only complaint as a customer is that you sent me too many thank-yous after contacting support and resolving my issue, you’re probably doing okay.

11 Simple Concepts to Become a Better Leader

Article: 11 Simple Concepts to Become a Better Leader

This is a typical be-a-good-person-and-people-will-like-you article, but it’s good to remind ourselves of that from time to time. The concepts presented in the article that I feel are most important are transparency, adaptability, and gratefulness.

Transparency is a great leadership quality because it earns trust over time. I hate playing games. It doesn’t get anybody anywhere. If you told me you were going to start working on a project but got distracted, don’t tell me that it’s moving along just fine. Tell me you got distracted and haven’t started, but also tell me when you’ll be starting it and what will be the impact on the project timeline. Being transparent also drives customer satisfaction because it helps set and adjust expectations.

I presume the importance of adaptability transcends industry–hence its inclusion in the list–but it’s incredibly important for software development. In my experience, it’s pretty rare to have a project that goes 100% as planned. Next to never. And I’m talking about “next” being on the other side of never, not the side where it might actually happen. Understanding when to deviate from the plan is key. It might be to overcome a challenge: “We thought we could do X, but that’s not going to work. Let’s do Y instead.” It’s not always a problem that makes adapting advisable, though; it could be an unforeseen improvement: “We planned on doing X, but it makes more sense for the users if we do Y.”

And, finally, gratefulness. My least favorite type of co-worker is the ungrateful leech. You never hear from them until they need something. Then, you go out of your way to help them out–because you’re awesome and that’s how you roll–and you’re lucky to get an email that says, “Thanks.” When those guys come around looking for help, I don’t like to give it to them. On the other hand, you’ve got people who genuinely appreciate what you’ve done. They offer to buy you lunch or a drink. Gratefulness goes a long way, even if it’s just saying, “Seriously–thanks. You really helped.” When those guys need help, I’m happy to drop what I’m doing to give it to them. It’s not because I hope to get free stuff, it’s because I know my effort will be appreciated. As a leader, you’re playing the role of the guy who needs stuff in these scenarios. Do you want to be the guy that people do things for because they have to or because they want to?

Finding Time to Innovate

Innovation is the backbone of any software development effort. If you aren’t doing something new, what’s the point? Without new ideas, you’ll never be first, you’ll never have something that your competitors don’t, and you will never be the best.

I think most people would agree with these statements when talking about a software company or product, but I’m actually talking about developers. You–the developer–need to constantly explore new ideas and learn new skills. Doing things you’ve always done the way you’ve always done them will likely never result in anything more than marginally better than what you have now. (Hey, more = better, right?) In other words, you will need to do new things in new ways in order to produce something significantly better than what you have now.

This is where things get a little less straightforward. How do you learn to do things you haven’t done in ways you haven’t done them before? In my opinion, it’s all about exploration and experimentation. When I read an article about a new tool or language feature, I’ll spend some time playing around with it. I don’t necessarily have a use in mind; I just want to see what it’s about. The result over time is that I have a whole host of things I’ve messed around with that are implementation-detail candidates on future projects. Additionally, when discussing new projects, I can say things like, “This is useful, but it would be really cool if we added X. Here’s how we can do that.”

We can all agree that innovation is essential, and it’s important for developers to spend time learning and exploring to help with the innovating. There are only so many hours in the day, though, and you’ve probably got other, more important things to work on. You’d love to spend time trying new things, but your boss isn’t going let you have free time to do that. After all, there’s money to be made! So what can you do?

I work for a somewhat old-school software company. The senior management overseeing development isn’t likely to institute 20% time any time soon. They aren’t going to designate a percentage of hours as play time, but that doesn’t mean that creativity is forbidden or frowned upon. It just means you have to find the time yourself. I’d venture to say that most software developers are salaried employees obligated to 40 hours per week but expected to work more. What if you spend just one hour each day learning something new? You’ll probably still be giving 40+ hours of effort to the “actual work,” but you’ll also be learning new things that interest you. Fast math shows us that 5 hours represents 11% of a 45-hour week so, by taking 1 hour each day you effectively create “10% time” for yourself.  If one hour is too much time for you, take 30 minutes, or do it every other day. Take the time and stick it on the end of your lunch hour if you need a bigger block.

By allocating “you time” and spending it, you’re going to grow professionally, and that benefits both you and your employer. You’ll be better equipped to tackle complex problems in the future, and you’ll have fresh ideas for how to solve old problems. You’ll also have increased job satisfaction because you get to work on things that interest you in addition to your regular assignments. I believe it’s a true win-win scenario. So stop worrying about the hours you’re “given,” and go learn something!

Resolutions for 2013!

Ahh, New Year’s Day—life’s sprint planning. We reflect on the year behind and set goals for the year ahead. I’ve not been much of a resolution person in the past. Sure, I’ve made a resolution here and there, but I’ve never written it down or tracked my progress.

I’m going to do it different this year, though. I’ve got the perfect mechanism for documenting and following-up on my resolutions: my trusty blog. I’ll jot down my goals here and follow-up on them next year. Sounds like a recipe for success, eh?

So, without further ado, here’s what I’m resolving to accomplish in 2013.

Personal Goal: Be Healthier

I consider myself to be in “okay” shape. Like most people, I’ve got a few extra pounds to shed, and my eating habits are probably a bit sub-standard. (I can’t help it—I love Whoppers. The Burger King kind.) My goal for this year is to exercise more, make better food choices, and end the year 15 pounds lighter than I am currently.


  • Run 3 miles each week
  • Manage restaurant portions

Professional Goal: Reform Agile Practices at Work

For years, I’ve felt like we haven’t been doing agile “the right way.” I could point out things here and there that didn’t agree with my vision for how things should work, but I also didn’t have a plan or vision for how to fix it. In the past month or so, I’ve done a lot of agile soul-searching, and I’m committed to making changes that I think need to be made to get us firing on all cylinders. I’m going to create a lean, mean, agile-software-developin’ machine!


  • Improve the team’s velocity each quarter
  • Maintain a prioritized backlog for the team

Co-Branded Employees

Last week, the Wall Street Journal posted an article titled “Your Employee Is an Online Celebrity. Now What Do You Do?” The article is about the pros and cons of “co-branded employees:” employees that actively build and maintain their own personal brand outside of work. The goal of the article is to shed light on this type of employee and present some of the potential advantages and disadvantages.

The article begins with the following statement: “meet your newest management headache: the co-branded employee.”

That’s a pretty harsh introduction, but the rest of the article isn’t quite so negative. It’s actually part cautionary and part risk assessment. Several valid concerns are brought forth, such as How much time during the workday should be allocated or permitted? andWho owns the content? There’s also a “balance sheet” that compares several advantages and disadvantages.


  • Prestige – The company can claim the top-ranked employee as their own
  • Leads – By engaging publicly, the employee is potentially attracting new customers
  • Free media – A large following can equate to free or inexpensive publicity for the company
  • Recruitment – The employee will attract other, aspiring minds


  • Prima donnas – Popularity can lead to inflated egos and expectations
  • Distraction – The employee may dedicate a wrongly proportional amount of time to their extra-curricular activity
  • Leaks – Internal details may be deliberately or accidentally become “less internal”
  • Resentment – The employee’s popularity or reputation could negatively affect the team

These potential risks and rewards are part of a short list that could clearly be much longer. I started blogging to track things that I’ve learned and figured out, and it’s evolved into a hobby that doubles as a profession-growth mechanism.

Does it take time out of my day? Sure. A lot of things that I learn and write about are directly related to what I’m doing at work. There’s probably an argument to be made that tasks take me longer to complete because of my blogging. After all, I’d be done sooner if I didn’t have to scrub out customer-related info and write several paragraphs about why I was doing something and how I ultimately accomplished it.

The flip-side to that is that the quality of my solutions is improved by the additional diligence that comes along with my desire to write. I don’t stop when it works. I go deeper; I want to understand why it works, what’s necessary, and what’s not. Then, I take all of that information, condense and simplify it into a blog post. That post becomes my own, searchable repository of lessons learned. If somebody on my team is faced with a similar task, I can send ’em a link. They get an abbreviated version of the journey with a (hopefully) clean, concise  solution.

I can only speak in terms of my own experience, but I’d certainly argue that activities like this are a win-win. My online presence, and the desire to grow it, result in an expansion of my horizons. I get personal satisfaction from learning and exploring new topics. The knowledge gained through these exercises allows me to think outside the box when solutions are needed. I’m more well-rounded because of it, and I’m more capable of supporting and providing guidance to my team on solutions old and new, alike.

My Foray into Jelly Bean

I’ve been a happy Android (Epic 4G Touch/Galaxy SII) user ever since I made the switch from WP7 (Samsung Focus). Since that time, my wife has switched to an iPhone. I was secretly jealous of features like Siri. Whenever we needed to remember to do something, I’d tell me wife to have Siri set up a reminder because it was so easy and convenient. I was still dedicated to Android because of the free mobile hotspot and turn-by-turn navigation, but I was feeling like my next phone should be an iPhone.

That all changed yesterday when I upgraded to Jelly Bean.

This was only the second time I’ve installed a custom ROM, and I was admittedly nervous. Part of the reason for my initial switch to Android was to get onto a custom ROM to unlock the free mobile hotspot. I stumbled through that, and hadn’t had problems since. I was nervous to do it again because of the satisfaction achieved in my first attempt.

I ran into some bumps along the way. Most significantly, I ran into the error described here when flashing the ROM. The solution offered by one of the replies got me over the hump, though, and it was smooth sailing from there. I’m now up and running on CM10 Alpha 5.3, which can be found here. It’s great!

Everything about Jelly Bean feels new and clean. The visuals and animations look and feel crisp and smooth. The every features like messaging, alerts, and email look better. I haven’t noticed any feature changes with those, but I also haven’t done more exploration.

What I’m most excited about is Google Now, Google’s answer to Siri. I can now ask my phone to set reminders, look-up directions, and send text messages. One of the features that Now boasts is “no digging required.” It’s supposed to learn what information I need and present it to me without asking. I’m very curious to see how this works. But for now, I’m happy with the voice search and command capabilities offered by Now. I can also hold the search button to initiate a voice command from within any screen–very Siri-like.

My allegiance and excitement have been renewed, and my gravitation toward iPhone has been killed. Sorry, Apple.

The “Art” of Communication

I’m a drawer. (One who draws, not to be confused with one in a dresser.) Three sentences into any explanation, I start looking around for a whiteboard. I don’t know what I want or am going to draw, I just know that I need to do it.

Sure, I like changing databases into monsters, but that’s not the only reason I draw pictures to supplement many of my discussions. This article at Inc does a good job of identifying several advantages of visual explanations. Here’s the summarized list:

  1. Out of sight is literally out of mind
  2. Visuals allow the brain to take shortcuts
  3. Brains like the familiar
  4. Making hard stuff friendly improves communications

The last point is really the most important for me. If I’m describing a complex system to a peer, it takes a lot of words. It’s really easy to lose track of the pieces. Creating a quick doodle does a better job, and it lets the audience revisit the parts they may not understand by continuously examining the picture. It’s also essential as you communicate ideas to folks at different stages of the Dreyfus model–both higher and lower. A customer might not understand what it means to serialize an object to XML and send it via a socket connection, but they’ll understand what a box labeled “data” with an arrow means.

I like the first point that was made, too: out of sight is literally out of mind. If you diagram the entire system before talking about a change, it’s less likely that you’ll forget about a piece of it when considering the implications of the change. On a note unrelated to visuals, this is also important to keep in mind in any meeting that ends with actionable items. Make sure to document who’s responsible to do what. The verbal agreement is “out of sight” and, therefore, at risk to become “out of mind.”

Have you ever sat through a PowerPoint presentation where each slide has 100 words? It’s not good. You spend more time reading words than listening to the speaker. Even worse is when the speaker goes faster than you can read. You get 3/4 of the way through a slide without hearing a word from the speaker only to be cutoff as they move to the next slide. I really like the example of Jobs as a compelling reason to use visuals as shortcuts. If you show me a slide with a solid block of text, I’m far less likely to retain your message than if you were to show me a slide with a single word, phrase, or image. Keep the message in your slides clear and direct, and speak about the rest.