Sep 8, 2016

The 10x Programmer

Who is the 10x programmer? How do you know one from the other? How do you hire a 10x programmer? There is this perception I have seen about the 10x programmer who is this insane work machine, who can spit out code faster than most can type. I feel the term is highly misunderstood.

Lot of people think developing software is a linear task. That productivity is directly proportional to number of commits, lines of code and number of hours spent. I even came across a startup that provides tools to measure team productivity and performance using those stats. Those are not fun places to work at for a programmer.

To understand the 10x programmer is to understand what writing software is. Writing software I think is a form of art. If I compared paintings in terms of how many shades of colors were used or how many gallons of paint went into its making, would that be a fair evaluation? Or how about measuring the quality of a book by the number of pages / words written?

A piece of code solves a problem. A good piece of code solves a pattern of problem. An excellent piece of code solves the right pattern of problem. And that is what the 10x programmer does. They solve the right pattern of problem.

To know the right pattern is no trivial task. Not many can see those patterns. For someone who does not understand art, all paintings are more or less the same. Leadership that don't understand this, will not appreciate the 10x jobs hence will eventually loose the programmer or the gains.

To hire the 10x programmer thus is also difficult. One needs to understand not only how they solved certain problems but also the context and the alternatives. The spark of genius does not necessarily light during the hour of the interview, hence it needs to be derived going into the details of the past. It would help to see how they understand a problem v/s solving it. An alternative approach to hiring 10x programmers is to spend time identifying those from existing team. Then nurturing them to grow and solve larger problems.


Sep 14, 2015

How technical debt creeps in

P1: I want to see 1, 2, 4 and 5.
D1: print 1, print 2, print 4, print 5
P2: I want to see 3
D2: print 3
P2: 3 should be after 2 and before 4
D2: output.replace /(2) (4)(.+)3/\1{3}\2\3/
P3: I want to see 6

Jul 24, 2015

Moulding Culture with Appreciation, Silence and Feedback

Like a typical hacker mindset, I am always on lookout for patterns, formulae's and hacks for life and work around me. When I moved into managing teams, I had to apply this thinking towards people, team building and processes to optimize the organizational code at work. I have learned and changed a lot in the process but my train of thoughts still revolve around those original traits of a hacker mindset.

When I joined a start-up about a year back to head and build its engineering team, one of the critical challenges has been about moulding an organization culture and how to go about doing that. Culture as such has been a complicated subject for me since it does not fit well into moulds of programming logic. I was first seriously introduced to that concept while reading the book Delivering Happiness by Tony Hsieh. A great book and I would highly recommend. I have read numerous such corporate management and leadership books including the recent The hard things about hard things by Ben Horowitz which have been helping me in forming a pattern around hacking a culture change.

A culture in a way that I understand is the vibe a team or organization provides to any new person joining it. It also sets some unwritten rules and behavioral expectations from the people in the team that has been carved by their founders and leaders. What I have come to derive is that appreciation, silence and feedback are the key tools that if used appropriately can help carve a specific culture, one that can be planned, engineered and implemented.

One way to think of these tools (appreciation, silence and feedback) is how they impact the thing (culture) we intend to mould. Getting down to the basic constructs of culture, what we wish to drive  is the overall behavioral traits of the team. Here is how I feel these tools help mould that -
  • Appreciation - it is an enhancer. It increases the behavioral trait that it is applied to.
  • Silence - it diminishes or discourages a behavioral trait. Lack of appreciation is felt as much as its presence and is effectively a culture tool.
  • Feedback - this is useful for course correction. Since the previous two tools are not helpful much when the directions are incorrect.
Appropriately combining the above 3 techniques, can effectively help build a culture. This does trickle down from the leadership. So knowingly or unknowingly, these tools are always functional and continue to mould an organization.

To cite an example, let us say we want to create a culture where working longer hours is a norm and expected. As a leader here is how I can use these tools to get that going -
  • Appreciation - an engineer worked overtime to deliver a report a customer asked for. As soon as I come to know about it, I want to publicly appreciate this specific trait.
  • Silence - an engineer does tremendous job at everything she undertakes but always leaves office on time. I never bring that up or show appreciation.
  • Feedback - another engineer works overtime but sometimes does not show up at the weekend standup. I like the person and during our 1-1 meeting I mention that and ask for sending advanced notification and avoiding such absences.
This though is a negative example I am sure some of you can relate to it. It does create a bad culture, but the point here is that it can be planned and implemented. In a similar fashion, one can lay the foundation of building cultures around excellence, fun, sharing and the traits that one wants to be part of their organization.

This approach though greatly simplified, feels logical to me. The framework gives me a way to enable cultural change. Things are not black and white but the shades of grey are differentiable. In the end, it gives me a way to proceed forward and to learn and grow in the process.