Sunday, October 27, 2013

The Frame Story

Nicole and I went to China.  In talking to my mom this morning about our trip, I realized I wasn't overly clear about the motivations for going to China, or the timing.

There were a number of people who were quite surprised we didn't come home with a Chinese baby.   In fact, Nicole had taken a picture of one of them and called him Bruce.  I'm not sure if she was naming him after Bruce Lee or what, but here's a picture.

They call me Bruce...

I figured explaining our choice would make a good frame story.  Like the story that contains smaller vignettes in some popular movies, this will kind of host or frame out the topics I'll be covering over the next couple weeks.

We went to China quite on a whim.  We purchased a tour that went through Rewards Travel China.  If you have a look at the web page, you'll see a pretty good smattering of tours similar to ours.

Better still, it was a Groupon.  If you're not using Groupon, you're doing it wrong.  They, and similar services like LivingSocial, have provided us with awesome experiences, from spa packages and travel packages to Segway tours and river rafting tours.  It's a great way to try new things at a discount.  China was a curve ball out of left field - no, wait.  Curve balls don't come from there...  Argh.

Our tour group agreed that going to China was on no one's bucket list, but every one of us said that the price was so amazing that they couldn't resist.  I know I didn't resist it when Nicole found the offer.

Nicole was mostly screwing around one morning when she sent me a "See China, 10 days, 8 nights, airfare, hotel, and food included, only $999" deal.  My response was, basically, "For that much, why not look into it?"  She was caught off guard.  We talk about traveling all the time, and this destination had never come up. We started talking about it, though, trying to see if we could put it together or whether it was moot.

Obviously, we needed someone to watch the kids if we were going to make it happen.  Grammie (Nicole's mom) is retired, so she agreed to take one for the team and put in a solid week and a half helping us watch the kids, ferry them to school and the bus stop, help with homework, get us over the jet lag, etc.  It helped that GrandBear (Nicole's dad) came out over the weekend we were gone to give her a break and some adult company.

Then, schedule.  I had to get the time off work, and Nicole had to work around the weddings she already had scheduled for October and November.  That, however, worked out.

That $999/person price only applied to a single weekend departure in October, and it wasn't one that we could swing, so we looked at the other weekends available.  The weekend we left (October 13th), the price was still only $1499, fantastic price for what was offered.  When we looked, the round trip (direct, non-stop) flights alone during that time were going for somewhere in the $1800-$2000 neighborhood.  Add that to $100/night hotel rooms (per person, the rooms were all $200 a night) for 8 nights, and then add in all the hotel breakfasts, the lunches, and almost all of the dinners, and you can see why our deal bells were going off like mad.

Of course, if something sounds too good to be true, it usually is, so our scam alarms were going off, too. The folks that we worked with at Rewards Travel China were generally responsive, but every few weeks, something would happen that made us worry a bit that they'd just take our money and run.  In fact, I wasn't perfectly comfortable until the plane was in the air on the way to Beijing.  And in the plane, I wasn't perfectly comfortable for other reasons.

So that's how we ended up making the decision to go to China.  We saw things there I never imagined seeing, and we did things I never imagined doing.  I was grateful for the tour guides we had for the tour, as the language is a significant barrier for us westerners.  They helped immensely and I feel we had a much richer experience because they were there.  They were able to point us in good directions and keep us from going in bad directions, as well as able to help us get to where we wanted to be.  They were our personal protectors in a strange land.

Ultimately, I'm very happy with our decision to take the tour.  I highly recommend both China and Rewards Travel China for anyone who's got a hankering for adventure but is still a little worried that it would be difficult to get around.  They put together a great itinerary and wrapped us in a little safe cocoon where we could be safe and still explore some very interesting bits of China.

Now, my next few posts are going to be a brain dump of my time in China.  While I took notes chronologically, my intent is to blog about things topically across the trip, with the subjects covering things like drinking, eating, shopping, pooping, signage, sanitation, culture, and architecture.  I will include pictures where I have them.  I hope you enjoy reading about our trip, and if you have questions or comments, I would be happy to discuss while the thoughts are fresh!

Thursday, October 10, 2013

TFS 2012 Controller Hangs on Startup

I work in an environment with multiple TFS collections and was recently working on a project to upgrade the build controllers for each collection from TFS 2010 to TFS 2012.

In general, since the TFS controller installs can work side by side, my process has been

-          Update the OS from Server 2008 R2 to Server 2008 R2 SP1
-          Install VS 2012
-          Install TFS 2012
-          Migrate the collection
-          Configure the TFS 2012 Controller and agents to point at the migrated collection

And this has been flawless over 6 collections to date. 

As the movie announcer says, “… until now.”

I’d done the first three steps weeks ago in preparation for the dev team to take a smallish outage to migrate the database.   On the morning of the migration, we did our due diligence, backed up the database, and upgraded the collection and attached it to our TFS 2012 server. 

Then, as with the preceding build controllers, I configured the TFS controller to point at the 2012 version of the collection.  Everything looked normal until I submitted a build. 

The build just hung. 

When I checked the controller, the controller and the agents were stopped.  Hm.  Ok, click restart.  Nothing happened.  Ok, restart the Build Service altogether.  Controller and agents would come up, and then about 5-10 seconds later stop again.  The build service would stay started, so build requests would still go through from Visual Studio, but they would hang and not show  what was wrong.

I did a bit of googling, and this article seemed to discuss similar symptomseven down to the "Details..." error message.  That  “HTTP code 500: System.ServiceModel.ServiceActivationException” error threw us for a loop for a while, until we realized that on a different working controller, we were seeing the same errors in the event logs


So that wasn’t it.  Also, there was only one entry for http in the bindings.

Most confounding was the issue mentioned in a number of articles that featured similar symptoms.  They all poined at Program Files\Microsoft Team Foundation Server 11.0\Applciation Tier and either Web Services or Message queue, suggesting that there was a binding problem in the web.config file.

Except I didn’t have a web.config file in either location.  All I had was a web.config.template file.  It had some bindings in it, but I didn’t want to mess with them.

So at this point, I gave up. 

-          Uninstall TFS 2012
-          Uninstall TFS 2010
-          Install TFS 2012

Then my build worked first time. I’ve described this approach as the three finger salute, followed by a single finger salute.

Friday, October 4, 2013

The Pleasure of Teamwork

Oh, I can't do that title justice.  Entire books are written about teambuilding, performance of great teams, what it takes to operate as a team.

No, I'm here to tell you about my team experience.  For as many managers as I've had, and as many teams as I've been a part of, I'm ashamed to admit that I have only had a real team feeling a couple of times in my career.

What is that team feeling?  When you're part of a team firing on all cylinders, it feels good.  Not just good; it feels awesome.  As if you all friction is gone, you can be yourself, and know that you're all succeeding together, whatever the task, or whatever the odds.  Productivity becomes the natural state, and the days fly by effortlessly as you're building something great and doing it together.

Trust, The Key Underpinning of a Team

In his brilliant book "The Five Dysfunctions of a Team", Patrick Lencioni identifies the number one dysfunction of a team, the one without which nothing will ever go right, as trust.  I couldn't agree more.  Thinking back to the teams I've been on, the teams I've seen from afar, and the teams I've left, the good ones have always had solid trust not only between members, but also between the members and the leader.

Trust is key.  When you know what others expect of you, and you know what you can count on others for, it's a great feeling.  It's knowing that you're all in it together and that no one has any vested interest in playing petty political games for personal gain. Knowing that you don't have to watch your back because everyone on the team's got yours.  And you've got theirs.

Knowledge of Roles

Great harmony comes from knowing the roles of all the people on the team, knowing where their boundaries start and end, knowing where yours begin and end.  The knowledge of where skills overlap and you can delegate, or count on others to catch anything you might be about to drop because of juggling.

One key role, however, is the role of the team itself.  This role, what I think of as the team's missions, their reason to exist, must be clear and focused.  The team has to know why it exists, what other teams expect of it, and how to function in the greater organization.

A Cautionary Tale About Team Roles

I was talking to the head of an unnamed IT department a while ago and asked them about the team structure they employed.  There were a number of easily identifiable teams, but after the head of IT enumerated the groups, there were still a number of individuals unaccounted for.  Those folks all reported to the same manager.  I asked what that team's mission was, or what they did.

I was met with a blank stare.  I was told that they didn't really have a role, a mission.  I didn't argue the point very long, but privately noted that it's very difficult to motivate people on a team to be their best if not only they didn't know what they should be doing, in principle, but even the people that employed them at the highest level couldn't and wouldn't articulate it.

Enabling People to Step Up

There seem to be two schools of thought on people.  One, that people are lazy cows to be reluctantly milked of whatever minimal amount of work you can squeeze out of them, or two, that people are dynamic, excited individuals that want to contribute to the best of their ability and are excited when they are doing good work.

I believe that on balance, people are not lazy freeloaders.  I believe they want to contribute.  Sure, all of us have seen people become disengaged and not perform well, but I believe them to be the exception rather than the rule.

But many people are also quite nervous.  Maybe they suffer Impostor Syndrome.  Maybe they fear failing.  Maybe they worry about looking like fools if they try something beyond their comfort zone.  If someone manages to overcome their self-doubt and fear, steps up, and volunteers to take something on, give them some room to run.  Help and encourage them to grow.  Don't force them to remain in the role they're in, even if they're excellent at it.  Give them some boundaries, but absolutely let them step up.  If you don't, you end up with a monkey-banana-water situation.

Team Leadership

Teams do not need a manager; they need a leader.  It may seem like semantics, but a manager is an individual that manages budgets, timelines, tasks, time allocations, and so on.  Management of those things is a skill unto itself, and a great manager is indispensable, so I'm not casting aspersions on the discipline of management.  Teams do not need a manager; projects do.

Management and leadership are two very different things.  Teams need a leader, a great leader or leadership body that inspires, rather than commands.  One that has a vision, communicates it, but also is willing to incorporate ideas from everyone, no matter what the source.  One that leads, and not from behind.  The one that's staying up all night getting stuff done to make that vision come together.

The Best Team to Which I've Ever Contributed

The volunteer organization that puts together That Conference is a great team.  They are, bar none, the best team I've ever had the pleasure of working on.  They exhibit selfless behaviors, have patience and trust, know their skills and roles, and in Clark Sell we have one of the most charismatic and inspirational leaders that I've ever worked with.  Despite all the work I've done over the years, putting together the first couple years of That Conference is probably the work I'm most proud of, and I look forward to spreading the message and the technology for years to come.

Hope to see you all there in 2014!  August 11-13, 2014 at the Kalahari resort in the lovely Wisconsin Dells.

Summary

What's gonna work?  Teamwork.  Bloody right, Wonderpets.


Problem Solving, the Multi-pronged Way

The best thing a previous boss taught me: when presented with a daunting problem that you think you can solve, but that may take you a while to figure out, first send out a question to someone you think knows the answer.  It could be another developer, someone on twitter, a manager, your mom, a vendor, whomever you think has a good chance of helping you through your current issue.

The point is to get the question out there before spending a lot of time trying to find the solution on your own. This has a few possible outcomes:
  • You could spend hours researching a problem and still end up stymied and have to make that call
  • The person could give you an immediate answer, and your problem is solved
  • You could struggle for hours before they get back to you with an answer, and your problem is solved
  • You could figure things much more quickly than you expect, and you may feel as if you've wasted someone else’s time
In all these scenarios, with the various outcomes, I've found this to be a life-changing strategy. Instead of muddling through for a long time and getting a “good enough” solution, I now can get “best of breed” or much more solid answers more quickly as the result of collaboration.

People rarely feel as if you've wasted their time, and often if you find an answer before they get back to you, you get an automatic vetting of the solution, or another solution that you can choose between.

Bottom line: don't struggle on your own with a problem.  Short-circuit that process and ask for help.

Thursday, October 3, 2013

You Already Have the Time

In the past, I've posted a couple times about speaking up (first and second post).  About making some noise.  About having your say.

I can't tell you how often I get asked how I find the time and energy to have my say, to blog on top of working, having a family, coding on the side, studying management theory, homebrewing, and running.  The answer is pretty simple: I have plenty of time to do the things I value doing.

And so do you.

Those who watch this space already know that I follow bloggers Scott Hanselman and Clark Sell, who are both big proponents of getting your voice out there and who regularly encourage putting those thoughts in a blog form.  Kevin Smith, movie director and now podcast producer,  has a saying that boils down to people having three needs: eating, finding physical intimacy, and to be heard.

That last one, Smith claims, has traditionally been the hardest of the three to put together, but today's technology platforms enable scalability of thought broadcast that's never before been achievable by the everyman.  Compared to publishing mechanisms in history, we have an unprecedented ability to get our thoughts out there.  No longer do you need permission from entertainment studios to make and get a movie out there, a song out there, an episodic comedy out there.  Youtube and other formats let you get your stuff seen.

Similarly, you no longer have to get a broadcasting degree and work long hours as an intern slinging coffee to work for a chance to be on the radio.  You can start up your own podcast with the equipment you already have.

Lastly, you no longer have to write a whole book to get your thoughts out.  There are dozens of blog platforms like this one to allow you to write episodically.  How many times have you sat down and written a friend a thoughtful email on a particular topic?  Maybe one that's spanned a few pages?  If you're like me, it's happened a few times for you.  And then you get another email, and you respond almost identically to a different friend.  Or maybe you have the same conversation a few times.

If you notice that kind of repetition, take some advice from The Pragmatic Programmer and don't repeat yourself.  Hanselman points out in his Information Overload talk (brilliant talk on scaling yourself, btw, highly recommended) that the right way to handle repetition is to avoid it.  When someone emails you a question, and the answer will require you to spend some time and it has value beyond the recipient, blog it and send them a link as a response.  I can't tell you how many times I've been talking to Clark and he responds with, "You should blog that."  You'll be surprised how quickly you have a body of opinions you can point to as a reference, and if you have a lot of interconnected opinions (and most of us do), it makes for natural hyperlinking between articles.

So that's how I manage to blog.  Where do I find the time to keep up to date on things I might have an opinion on?  Well, that's pretty straightforward.  I use my phone a lot "in between" things.  People often give me grief about it, but I always have the Kindle app on my phone loaded up with some latest self-improvement, management theory, or tech book.  Most recently it's "The Titleless Leader", by Nan Russell.

I read when I'm walking to and from the car.  I read in the bathroom.  I read during reboots.  I read in between.  I share what I read with people around me.  I synthesize thoughts around what I read when talking to people.

And when I run, I compose.  Not on purpose, but because my mind wanders from whatever song is on and puts ideas together.  During this morning's run, I composed the outline for this post.  While I was waiting for the kids to get ready for school, instead of responding to a friend who asked me where I found the time, I composed this post.  For him, for me, and for you.

You have the time, too.   You are already composing and repeating things that could be your online body of work.  You are already speaking up.  Now just get to writing it down.  And send me a link, here or @kevinpdavis on twitter.  I'd love to hear what is inside you, too.

Tuesday, September 17, 2013

Windows 8 in the Enterprise

I am a big fan of Windows 8.  I watched Hanselman's video early on, and I "get" the OS and what Microsoft is trying to do.  I have it installed on my desktops and laptops at home and absolutely love it. So when it came time to try out a Windows 8 tablet in the enterprise, I jumped at the chance.  Our support department loaned me an HP tablet with a build of Windows 8 on it to evaluate briefly.  Here's what I thought of it:

Network support:
For whatever reason, I was unable to connect to my work domain and remain connected.  This is not limited to the HP tablet device as our infrastructure group tried unsuccessfully to help me get my home laptop with Windows 8 on the network.  This wasn't a problem with older versions of Windows.

Mobile Iron support:
Our company has chosen to use Mobile Iron to deliver a mobile experience.  Mobile Iron explicitly does not support Windows 8.  This means that the best we can do with these devices is wifi on the local domain.  That’s not a great solution because it’s not truly mobile.

Ease of use:
The outlook client for Windows 8 works in the desktop only mode.  This means that the interface is not optimized for touch.  This makes Outlook difficult to use without a mouse.  The docking station the HP came with did not include a trackpad or a mouse, so I was constantly switching between touch and the keyboard, which isn’t particularly comfortable.  Compared to an iPad, it feels clunky and unnatural just to browse email.

Summary:
I know our organization is not ready to handle Windows 8.  Our choice of mobile vendors doesn’t support it.  I don’t know if the difficulty getting on the network is Windows 8 or my domain account, but for me, it’s an unusable mess.  Also, based on the difficulty of getting the device configured for use and the lack of Mobile Iron support, it’s also possible that Windows 8 isn’t ready for organizations, either.  I ended up giving the tablet back within a day, just very very disappointed.

I would love to hear any other opinions of people who have tried 8 in the Enterprise


Monday, September 16, 2013

The Myth and Danger of Experience

I was having a discussion with a veteran developer the other day.  During this discussion he laid out a problem that I knew another developer in the company had solved a while back.  Or at least it sounded the same. It was at least worth a five minute conversation in my book, and I advised him to talk to the other developer.

His response? 

“I've got twenty-five years experience writing code, and I don’t need anyone else’s input.” (paraphrased.  It was close to that, though.)

I was taken aback.  I am a strong proponent of collaboration.  I've heard and live the aphorisms.  You know, along the lines of “None of us is as smart as all of us.”  

Why in the world would anyone, presented with a willing second set of eyes and an open invitation to collaborate, refuse?  Fear of having to change what you've already done?  Fear that the other person will know more/you’ll be embarrassed?

Another thing that was said during that discussion:  "I can code on my own.  I have done this long enough to be accountable for the code I write.  At what point am I responsible for the work I do as an individual?" (paraphrased again.)

Again, I was agog.  My response was "Well, honestly, I feel that collaboration works well right down to writing lines of code.  It's called pair programming, and I would like to see us do more of this kind of work."  

He looked at me as if I'd said the sky was green and the grass was blue.  

I don't know.  I thought that in software and in life, as you got more experienced, you realized how much you don't know.  Like Socrates said, "True knowledge exists in knowing that you know nothing."  Except something about software development breeds in certain people this hubris, this certainty that they do not need other opinions, that they do not need to collaborate.

And in doing so they do not realize how isolated and shallow that "deep body" of experience actually is.

I don't assert whether solution that the veteran developer proposed was a good one or a bad one, given the requirements.  Only that if it was a good solution, a five minute conversation would not have changed it, and might have shared organizational knowledge around.   Instead, the siloing continues, and I continue to strive to break the silos.