This website uses cookies. By continuing to browse the site, you are agreeing to our use of cookies
Others
October 26, 2017
We will use this analogy to see how we can be better programmers: with better capabilities, with more conducive environments, and with more effectiveness in delivering value.
A car’s theoretical maximum speed depends upon a variety of factors, such as: engine power, automobile weight, aerodynamic design etc. Similarly, as programmers we can use a simple model for our potential productivity:
potential_productivity = f1(attitude, knowledge, intelligence)
Attitude covers a whole lot of attributes, such as: ability to focus, self-confidence, capability for hard work, attention to detail, self-motivation, being unfazed by failures etc. Knowledge covers both technical knowledge: computer science basics, programming languages, etc. as well as, domain knowledge and soft skills such as: ability to work in a team, and written and oral communication skills. Intelligence covers problem solving skills, the ability to think outside the box, troubleshooting smarts as well as, things like quick comprehension.
The analogy of attitude, knowledge and intelligence (of a programmer) to engine power, weight and design (of a car) works well in the aspect that it is the attitude that is the base automotive power, which is then enabled and transformed by other features to achieve the theoretical maximum speed. It continues to work, if we assume that the car’s design is in our hands – we can work and improve the design; all attributes that makes a good programmer – attitude, knowledge and intelligence – are trainable, given a growth mindset.
We, at Hexaware, are committed to making our employees improve and realize their best potential. Towards that, we have made, and continue to make, huge investments in the learning and development of both technical, interpersonal and attitudinal skills. This includes e-learning courses in HexaVarsity (Hexaware’s Learning University) for soft and hard skills, sponsored certification for technical and process skills, conducting hackathons and coding competitions, which aid innovation and collaboration. We are also looking at sponsoring MOOC courses for our employees, which brings in the best-in-class courses from world-renowned universities, to the L&D curriculum of Hexaware. We can also look at peer mentoring programs, as an example, where people from completely different groups can work in pairs, to identify and improve their base potential.
The theoretical maximum speed of a car has little effect on the actual experience in city traffic. A sleek Bugatti, which can do 400 kmph or an ancient clunker, which struggles at 40 kmph, ends up doing only 25 kmph in the city roads.
Similarly, the realized productivity of a programmer can be amplified or tempered by the environment s/he works in: the project environment, the office environment and home environment.
realized_productivity = f2(potential_productivity,
project_environment, office_environment, home_environment)
In case of project (or team) environments, the usual potholes and speed breakers, which hamper their productivity are:
The good news that is, with agile processes and flat team structures, most of these are on the way out. We value people over processes, collaboration over contracts, trust over micromanagement; and we should take a hatchet to all processes, meetings (especially recurring meetings) and documentation that are not directly aligned to one of the most important agile principles: “Working software is the primary measure of progress”. Whenever you hear, or use, phrases like ‘operating model’ or ‘governance structure’, do a double check: are we adding artificial complexity unnecessarily to a process that is essentially human-centric?
Other ways teams can maximize their productivity by implementing one or more of:
There are also several tricks people use to maximize office productivity. I myself have used industry-strength noise blocking earmuffs in open plan offices. I also have seen people use flags which when up indicate ‘do not disturb’ and when turned down means ‘open for interruptions’ (those of you who are Barbeque Nation aficionados will know that mechanism). Cloud-based infrastructure also helps office productivity by reducing the dependency on support groups for quick experiments. Enterprise messaging systems can be a boon for collaboration, when used appropriately.
In general, the office and team environments can realize the potential aggregate productivity by:
In the end, realized productivity, or efficiency, is like the on-road speed of a vehicle; a good number is no guarantee that will enable you to reach the destination. For that, we also need to ensure that our car is moving in the right direction, not going into dead-ends often and not ending up in circles that we do not end up burning out all our fuel before we reach the destination, and we do not end up in an accident.
goal_oriented_productivity = f3(realized_productivity, effectiveness)
Efficiency means doing things in a fast and optimal manner; and effectiveness means ensuring that the things we do are indeed the right things to meet the objectives. Both are important to achieve overall goal-oriented productivity. Effectiveness means being pragmatic in what we can achieve, knowing what corners we can cut and what we ought not to, and the ability to prioritize correctly – pick the right combination of both easy things to show progress and hard things to front-load risk.
We should all be working towards building an organization that is staffed by efficient and effective programmers. The Architecture Review Board is a move in that direction: the aim here is to reduce the artificial complexity and keep the project teams focused towards efficient and effective delivery.
(rewards, remuneration) = f4(goal_oriented_productivity)
Re the tabs vs spaces war, here is the background. Tabs are one ascii character, but are visually rendered as per the application/editor that you use to view the source. There is no standard on how many spaces are rendered as indent for a tab character (rightly, in my opinion). Whereas; obviously, spaces are always rendered with one space indent.
Here is my hypothesis on it: The use of tabs or spaces is a symptom; the underlying cause is the type of programmer that one is. Here, there are four different classes of programmers.
I think that hypothesis explains why formatting with spaces is correlated with more pay. The best of both worlds is to use an IDE that lets you type tab to indent, but replaces the tab character with a (configurable) number of spaces under the hood. Most IDEs have that inbuilt feature nowadays.
The following picture summarizes the ideas above regarding the productivity hierarchy, and the initiatives being taken in the organization in general, and by the CTO org in particular, to establish a culture of high productivity within Hexaware.
Every outcome starts with a conversation