Software engineers are more valuable to companies than money

CNBC posted an article last week that really resonated with me.

From their article:

A recent study from Stripe and Harris Poll found that 61 percent of C-suite executives believe access to developer talent is a threat to the success of their business. Perhaps more surprisingly — as we mark a decade after the financial crisis — this threat was even ranked above capital constraints.

I’ve been working on recruiting for FATMAP for the past few months. Whether for internal positions, or freelance, not only are qualified engineers more and more difficult to find, it is increasingly they who are alone dictating the terms of their employment.

When I first started recruiting engineers back in the early 2000s, engineers applied for a position. The employer set the terms of the employment. Now, it is increasingly the engineers who set the terms.

It’s no longer companies interviewing candidates. It’s candidates interviewing companies. Companies must convince the employee, rather than the other way around.

This is of course great for employees. But when I look at the candidates coming through, I fear that this generation of developers are being conditioned by the over employee-friendly environment to respond to the wrong incentives.

With so much competition for engineers, there is less incentive for engineers to focus on doing great work and developing themselves.

I’ve seen and heard about average or below average engineers reject very generous offers to work on exciting and modern products because the employer didn’t allow remote or offsite working.

There are so many companies with so much capital, which leads to so much competition for engineers, and when the demand for something goes up, so does the price. That price is being borne out not just in salary, but in an expectation of perks and other benefits.

At FATMAP, we place a lot of focus on finding the right people for the team. We look for missionaries rather than mercenaries. We want people to be in it for the mission; people who share our values but most importantly who believe in our company and want to share in our success.

We believe that building the most talented team of missionaries is the key to success. We’re not climbing on the mercenary engineer treadmill.

I only hope that the next generation of new software engineers follow incentives to build great products that customers love and that make a difference – and don’t just chase the big money and free snacks.

Barrels and Ammunition

I came across this quote from Keith Rabois:

If you think about people, there are two categories of high-quality people: there is the ammunition, and then there are the barrels. You can add all the ammunition you want, but if you have only five barrels in your company, you can literally do only five things simultaneously. If you add one more barrel, you can now do six things simultaneously. If you add another one, you can do seven, and so on. Finding those barrels that you can shoot through — someone who can take an idea from conception to live and it’s almost perfect — are incredibly difficult to find. This kind of person can pull people with them. They can charge up the hill. They can motivate their team, and they can edit themselves autonomously. Whenever you find a barrel, you should hire them instantly, regardless of whether you have money for them or whether you have a role for them. Just close them.

It’s a really interesting way of thinking about the people in your teams.

You know the people that can make things happen. They can take initiative, and then push through organisational and other problems to make things happen, without needing someone to approve or unblock them.

The amount of things you can get done in parallel is limited by how many barrels you have.

You generally know a barrel when you see one; but here are, I think, some common characteristics:

  • “Ask for forgiveness, not permission”. Barrels will not wait for approval or consensus. They take initiative, and follow through.
  • Barrels take accountability. They stand up and own the plan, and the result.

When you find a barrel, the most important thing you can do is point them in the right direction, and let them go.

Whose line is it anyway? (Don’t block your colleagues)

In improvisation theatre (yes, I was a theatre nerd in high school) there is a concept called blocking. Essentially, whenever you have an interaction with someone on the stage in improv, your interaction should allow the next person to pick up the thread and run with it to continue the scene. In other words, you need to provide a hook for the next person to continue the story.

If you don’t provide a thread for the next actor to continue the scene, it’s called ‘blocking’, as you’ve essentially blocked the scene from proceeding.

A quick example:

Actor A: “Do you want to go for a walk with me?”
Actor B: “No, I don’t feel well.”

B has blocked A’s offer to go for a walk, without providing an alternative option for the storyline, leaving A with the responsibility for creating a new storyline for the scene.

In development teams I see people blocking each other all the time.

Another example:

Developer A: “Can we add an extra parameter to this function?”
Developer B: “No, it doesn’t work like that.”

Developer B has blocked Developer A from solving the problem, without giving A another thread to follow. In other words, B has shunted the topic back to A, leaving A with the responsibility to try to find another way to attack the problem, but with no extra cues from B on what might work better next time.

Saying ‘no’ is not the problem here. But when you say ‘no’, you should always try to give a thread to allow the scene to continue.

Let’s try the example again:

Developer A: “Can we add an extra parameter to this function?”
Developer B: “No, it doesn’t work like that, but if you look at the sample requests you might get an idea of what’s working already.”

Now Developer A has a thread; she has an idea where to go to continue the search for the solution.

Not blocking someone can be as simple as giving a cue to let the scene continue. So when interacting with people in your team, or with other teams, remember: everybody wants the scene to continue, so avoid blocking.

The show must go on!

When you want something done right…

“Well, you know what they say… when you want something done right, you have do to it your bloody self.”

My dad used to say this all the time. In fact he still does. How often have you heard it said?

A key turning point for a new manager is, I think, the realisation that this is quite often not true. (Certainly less often than you probably suspect).

Urgency isn’t panic

What’s the difference between a cheetah and a gazelle?

Cheetah and Gazelle

One is the hunter; the other, the hunted. One stalks and sprints with total precision, unwavering focus and ultimate confidence. The other flees in uncontrolled panic.

When we’re exposed to pressure within an organisation, it is normally in the form of a risk or a threat: the risk of losing a big client; the chance we won’t get funding; the fear of losing our jobs.

The fact is that all mammals, including humans, are really good at panicking. In fact, we’re designed for it. Buried deep inside the oldest part of our brain is a brain region called the limbic system. In evolutionary terms, the limbic system existed long before we first picked up a rock and used it to hit something. It’s the part of our brain responsible for basic survival; it’s the part that takes over when we’re scared, angry, lusting for revenge or when we’re threatened.

When we feel threatened, our limbic brain sends some signals to a part of our central nervous system called the sympathetic nervous system, which activates the so-called “fight or flight response”. Our conscious brain (the cerebrum) more or less shuts down and the limbic brain takes the wheel. It will decide whether we flee or whether we fight.

This is the response that leads us to panic. But when we panic, we lose focus. All our effort goes into outrunning the cheetah… but a gazelle can’t eat, drink or make baby gazelles when it’s fleeing a chasing cheetah.

If we spend all our time running, we don’t focus on the important things. We might increase speed but we end up losing velocity.

We all have many reasons to panic… The market is moving quicker than ever. Markets and industries change and heave, companies rise to incredible heights or crash to the floor in a fraction of the time of 20 or even 10 years ago. We have to move with urgency if we want to keep up… but urgency isn’t panic.

Urgency is controlled. Urgency is precision, focus and confidence.

We’re not a factory

Old factory workers

Factories must be awfully dull places. Factory workers working on a production line follow a strict process. Work is divided out into narrow and highly controlled portions. The guy working at machine #1 is an expert at machine #1, but not at machine #2 or #3. But that’s ok; if he stays focussed on his machine, the production line moves on and many widgets will roll off the end.

Factory workers take a given process or specification and assemble it. That the solution is provided is a given. There’s no room for initiative or individual innovation on the factory floor. If one machine doesn’t produce output of exactly the right type at exactly the right time, the system breaks down. Process improvement and innovation is for senior managers; observing the factory floor below from an air-conditioned room behind a wall
of glass.

In the early 1800s the factory revolutionised the production of goods and heralded the onset of the industrial era. It raised millions of people from poverty and created countless jobs (and millionaires). It brought about a new kind of competition: one fought along the bottom line. The problem with the factory is that the race to the bottom is over: we hit it long ago. When every factory can produce widgets as cheaply as you can (or cheaper), your ability to differentiate lies elsewhere – it’s not enough just to be able to sell widgets cheaper than anyone else.

Luckily in the software product business we’re not factory workers. We encourage individual initative. We challenge our teams to help us improve our processes. We believe that innovation can (and should) come from anywhere.

Right?

If that’s true, why do we keep treating our teams like factories, and our people like factory workers? Why do companies push solutions to teams and expect them to be just assembled, (where possible by yesterday), without asking too many questions or making a fuss? Why do organisations rebuff any innovation or ideas that don’t come from their own team? Why do we incentivise teams and individuals on the quantity of output, and not the quality or impact?

It’s not enough to talk about supporting innovation and encouraging initiative… our daily working process has to support it too; otherwise, we’re just another factory.

6 principles for a productive agile development team

“Being Agile” is more than following a checklist. It’s more than following the Scrum or Kanban handbook (in fact, it doesn’t even matter if you’re “doing” scrum or kanban at all!). Being an effective and productive agile software development team is about understanding and believing in a set of values, practices and principles.

Starting with our engineers, we tried to boil these values and practices down to a handful of core ideas. We wanted to share a common language and have a common set of checkpoints where we could track and assess where we are as a team, and give us guidance on where to focus to help us get better. We created what we call the “Agile Sliders”: a set of 6 guiding principles and practices for agile engineering teams.

  1. Code Quality
  2. Unit Testing
  3. Acceptance Testing
  4. Self-Organisation
  5. Pair Programming
  6. Code Ownership

Code Quality

  1. Thinks code as it is, is OK
  2. Understands and appreciates OO
  3. Identifies ‘smells’ in code
  4. Desire to fix smells and continually improve code
  5. Deals with technical pain and debt
  6. Uses solid OO design principles
  7. Understands the importance of fixing ‘broken windows’
  8. Understands and uses design patterns
  9. Encourages debate and learning

Unit Testing

  1. No Unit Tests
  2. Reluctant to write tests / low quality tests
  3. Always writes unit tests; tests the right things
  4. Always writes tests first
  5. Unit tests follow good OO principles
  6. Challenges the team when they don’t write enough tests

Acceptance Testing

  1. No Acceptance Tests
  2. Manual ATs done by devs
  3. ATs defined by devs with input from QA and Design
  4. Some automated ATs by devs
  5. Some automated ATs by devs in the build
  6. Outside-in development using ATs
  7. Run ATs locally before every checkin; fix breaks including other’s tests
  8. Call out team members who don’t write tests

Self-Organisation

  1. Needs micro-management
  2. Participates actively in plannings, estimations, etc
  3. Trusts team members
  4. Steps up to lead planning, etc without prompting
  5. Seeks out and gives feedback safely
  6. Team runs own standups, etc. Solicits feedback

Pair Programming

  1. No Pairing
  2. Reluctantly pairs when asked
  3. Willingly pairs when asked
  4. “Where’s my pair?”
  5. Pairing effectively in driver and navigator roles
  6. Asks team members why they are not pairing

Code ownership

  1. Mine / Theirs
  2. Willingly works on other code
  3. Not defensive about changes to code you wrote
  4. Seek out stuff you don’t know and work on it
  5. Go out of your way not to drive when working on ‘your’ code
  6. Encourages the rest of the team not to think of code as Mine / Theirs

Each principle exists on a scale representing a journey to an ideal state. In every retrospective we assess our progress against these scales. Did we get better? Stay the same? Get worse? The point isn’t so much to score ourselves, but it is a trigger for a conversation, and a tool for the team to use to challenge themselves on their journey.

We have also found that we can view progress from multiple viewpoints:

  1. The team as a whole, and
  2. Individual developers.

We’ve had some success linking these principles not only to team targets, but to individual performance targets as well.

We constantly iterate on our “sliders”, and we love feedback. Please leave any thoughts in the comments. I would like to expand the set of sliders to cover Product Owner and Experience Designer roles.

The Agile Team Values Poster

Here are the 6 principles and practices in a poster form. Click the image below to download a larger version suitable for printing. You are welcome to print it, change it, make it better!
Agile Team Values

5 reasons Agile is like a cult

As readers of this blog will know I’m a big fan of agile and lean software development principles and practices, but have you ever noticed how cliquey the agile scene is becoming? How almost cultish?

Here are five reasons the Agile scene is turning into a cult:

You’re either one of us, or you’re not.

Agile is like a cult - you have to believe.

You will read the bible, go to church and believe in God, or you will go to hell. Period.

You will use Scrum or Kanban and believe in Agile, or your software will be buggy, over-budget and crappy. Period.

You will respect, honour and awe the founding fathers.

Agile is like a cult - the founders will be honoured.

You will honour, awe and respect the founding fathers. The Scientologists have, for example, loopy L. Ron Hubbard, the science fiction author-turned prophet who continues to convince millions of normal people that Earth is a colony founded by aliens. The followers of the People’s Temple in the 1970s honoured, respected and awed their founding father, Jim Jones. 909 of them swallowed poisoned Kool-Aid in 1978.

You will honour, awe and respect the agile founding fathers. The more often you can use this image in a presentation about agile the better.

You will respect the sacred parchment.

Agile is like a cult - you will have faith in the sacred document.

Cults always seem to have a sacred parchment, original manuscript or some other artifact that serves to both prove the validity and authenticity of their beliefs, and also lay down the groundrules for how your soul will be saved.

We have the Agile Manifesto…

You will follow the strange rituals.

Agile is like a cult - there are strange rituals and secret handshakes.

Secret handshakes, rituals, traditions, sacred artifacts: these are the cornerstone of any self-respecting cult.

Standups, sprint reviews, sprint plannings, a 3-week lunar cycle…

You will read, follow and respect the rulebook.

Agile is like a cult - you will follow the rulebook.

The path to spiritual salvation is in the bible.

The path to software salvation is in the Scrum handbook.

Advertising – the good and the bad

We all want to get paid.

As ‘free’ continues to become the norm for data, information, apps and services, developers reach to advertising to fill the ‘P’ part of their profit and loss statements. Internet revenue hit $7.3 billion in Q1 this year, according to PwC – so someone must be clicking those ads.

With advertising, more clicks means more cash. We all want more cash – and the two most common ways to get high Click-Through Rates straight away seem to be:

  1. annoy, trick, deceive, or
  2. make the ad, and with it the experience, meaningful and contextually relevant (that is, give me ads that are relevant to what I am doing that might actually help me complete the task I am performing)

#1 might get you a higher CTR over the short term, but #2 has a much better chance of providing real value to your users and leading to a long-term, sustainable relationship.

When a visitor comes to your webpage, or a user interacts with your mobile app, you have been granted the ever-so-brief attention of a human being. This is a rare and important moment; this is an opportunity for you to build a meaningful relationship with them.

Don’t waste it.