There was an error in this gadget

Thursday, July 23, 2015

Successful Teams: people and interactions

In this day and age of total technological connectedness working from home seems like a no-brainer. There is email that we check every passing second, the smartphone that can reach us anywhere anytime, and increasingly sophisticated tools that allow sharing any kind of elegantly structured and totally chaotic data across every imaginable divide.

Yet, telecommuting remains rare, and remote projects remain hard. Outsourcing, in its more typical implementations, fails spectacularly and often. Organizations’ worst performers are often found among those “working from home”. (Best performers work from home, too, but that’s a different blog post.)

Overall, distributed groups face higher challenges and more risks on the way to becoming strong, coherent teams. Remote contributors must strive harder to successfully work together with others, compared to the regular folks who show up to the office every day.

For a team to be successful, members must share a vision, a flow, sense of connectedness that allows to think and make decisions together while maintaining unique perspectives.People on successful, productive teams interact many times a day to maintain working relationships. These interactions can be small or profound, like a quick ‘hello’ in a hallway or a heated discussion over lunch. More importantly, such exchanges are typically informal, unscheduled, and “just happen” – and they are absolutely essential to keeping the team in great shape.

Successful distributed teams have the technological means to have these interactions, too – but the opportunities do not ‘present themselves’. When other team members are not within eyesight, it takes conscious, deliberate effort to think pick up the phone, start up an IM conversation, or send an email. It is even harder to regularly take the time to share a joke, a story, something that’s not immediately essential for the work at hand, but serves a more long-term purpose of maintaining team spirit.

People who work remotely regularly and with great success, have made these kinds of intentional “extra” interactions part of their regular routine. The same way mature teams, organizations and their members produce high-quality results, mature distributed teams, organizations and their members make sure to stay connected and engage in lots of team interactions.

The maturity and effort required for a productive, successful remote working relationship may or may not be visible to a typical regular office worker Joe, who is having grand visions of working from home in his or hers pajamas. 

Tuesday, June 23, 2015

Scrum in TV shows and in real life

In an old episode of HBO “Silicon Valley” show, a soft-spoken MBA-bearing non-technical dude introduces Scrum to the hard-charging engineering team by presenting them with a Scrum board. The purpose of the system is declared to be “visibility into who is working on what”. As it becomes clear in the next 30 seconds, the actual value the team gets out of using the Scrum board (and, by extension, Scrum) appears to be the competition between the engineers who appear to work harder and faster on their separate stories to one-up each other.

So what is Scrum, and what does it do? offers this definition: “Scrum is a management and control process that cuts through complexity to focus on building software that meets business needs.” If that’s too complicated, here’s another attempt at an explanation: “Scrum itself is a simple framework for effective team collaboration on complex software projects.”

While this does not explain what Scrum is (one should take multi-day training courses to fully groke that), it starts to emerge that Scrum is about:

  1. teams
  2. complex projects
  3. visibility into the work of and collaboration between individual contributors

First two items describe common reality, while the last one is often a hard-to-reach state.

Visibility and collaboration are a worthy goal for many organizations. Teams produce better value if all participants were fully aware of the overall vision and what other people are working on.

Collaboration and friendly competition are known to improve productivity and quality of the work. Installing and maintaining a Scrum board is a lot less work than adopting proper Scrum. Yet, it is a tiny investment with outsized return.

Thursday, February 19, 2015

A story of one code review


As told by a developer: 

A. and D. told me that the changes that were done to method “E” on class “C” are not needed, and also those two test cases for these changes were not needed. So A. and I removed those. I promoted these changes to my stream.
I don’t really understand why. 
Also A. said that the test “T” should make sure we are asserting that those values are really still there. I thought it did do that, but I guess not.
Also D. suggested an improvement to the code that I don’t fully understand: In class “U” method “D” we can pass the “c” into the “T” method on line 35 and then we don’t need to pass it in on line 39. I didn’t catch exactly what he was saying to do.
I may be missing some other things too.

I hope the code was improved as a result of the changes made based on this code review.  But even so, this is not the best way to run code reviews.

Code review is there to get all the team members on the same page in regards to writing good code, catch hard-to-detect issues, and learn from each other.  The discussion that happens in code review is an invaluable tool in building a strong technical community, and ensuring the technical quality immediately and over the medium- and longer-term. It is important that all participants gain an understanding of what changes would make better code and why, in addition to simply following typing instructions.

Here's a slide deck "Effective Code Review" for a discussion about code review practices , that focus on learning, creating a community with a common vision, and building social capital.