About Me

My photo
Related, I keep most of my code here https://github.com/rdammkoehler

Tuesday, March 17, 2015

Stability?



So in the past two years I have seen several friends and associates leave their jobs as consultants. These are great consultants and good people. I've called each one of them and asked what their motivations for leaving were. I find two reoccurring themes in these conversations.

First I hear the common refrain that they want to be home with their families more often. I get that. I don't have it, but I get it. To be honest, the day that traveling for work becomes a problem for me or my family I will make a hasty exit. So no harm, no foul on wanting to be home with family.

The other common reason I hear is that they wanted more stability. This one I don't get. I keep hearing that changing clients, projects, and work locations is somehow unstable. I don't get that; that is the part that thrills me. Granted, I spend more time at most client locations than many people I know, but changing locations, projects, and clients every two years is what keeps things fresh in my world. I love that aspect of my role as a consultant.

That said, I recognize that there is a lot of anxiety inducing activity in changing engagements frequently. Meeting new people, learning new processes, and finding a good lunch buddy are all problems we face when we start a new engagement. 

So I wonder if the issue is that consulting firms don't do a good enough job of preparing a landing spot for us. There is something to be said for creating camaraderie through shared suffering. But is it that we aren't doing enough to help our consultants settle in, or is it that our consultants aren't prepared for the difficulties they will face with each new engagement?

Conway's Game of Life

I Love this Exercise. Here is a video of me doing the exercise in Java. There are other ways to solve this but this one is simple enough for demonstrating straight forward TDD using Java, JUnit, and Hamcrest.

I have not had time to do a voice over for this yet. What you will see though is me progressively building up the the Rules for Conway's Game of Life through TDD.

If you'd like to learn more about Conway's Game of Life, check this out.

Enjoy.



Thanks to Magnus Stahre () for git-crawl and making this video easier.

Monday, March 16, 2015

What Is a Good Tech Lead?

What Is a Good Tech Lead?

Tech Lead is a role frequently seen on development teams filled by a wide variety of people. Many times the Tech Lead is the most senior person of a technical nature on the team. By senior I mean the person who has the longest tenure. This is frequently a good choice, but not always the right one.

Most often, with age comes wisdom, but this isn't always the case.A long term employee of the same company with limited exposure to external environments is operating in an echo chamber. They lack a diverse experience to use as a sounding board for their ideas or the ideas of the people around them.

So to begin with I think a key characteristic of a Tech Lead is a breadth of experience. The more projects, situations, languages, products and managers a Tech Lead has had, the more likely they are to be good at what they do.

Tech Leads need to be calm and rational people. For any number of reasons projects can get crazy; people shout and threaten and cajole when things aren't going as planned. A good Tech Lead knows that nothing goes as planned and can calmly address issues knowing that most problems are solvable as long as you don't lose your head.

Tech Leads make lots of choices throughout the course of a project. Some have little or no consequences, some have major repercussions. A good Tech Lead knows the difference between these kinds of choices and therefore how much effort to invest in making them. In all cases, a Tech Lead should make those choices with confidence. Where they cannot make those choices confidently a good Tech Lead is open to suggestion and experimentation. In any case the Tech Lead understands the risks and costs associated with making a choice and can weigh the decision appropriately.

Tech Leads need to remain focused. It is important to have good technical depth and breadth, but it is also important to understand when you are out of your depth and have the humility to ask others for help. A Tech Lead should always be willing to delegate to others in order to remain focused on the primary goal of the project: delivering value to the business.

In order to remain focused it is important for a Tech Lead to be passionate. Not just about the objective of a project, but about the technology itself. A Tech Lead should strive for technical excellence in the solution. It isn't just about doing the Right Thing(tm) but also about doing it well.

In order to make this work a Tech Lead needs to have the right disposition. A Tech Lead needs to be simultaneously likable and aloof. Take a hard line on issues that are critical to success while remaining pliable on everything else. Logical and rational without becoming cold and unapproachable. A good Tech Lead should push a team to exceed its own expectations in the quality of their work without breaking their spirit at the same time.

A good Tech Lead should be the team's staunchest defender and biggest cheerleader; A mentor, guide, and leader who approaches every situation with calm rationality and a minimum of ego.