Generalist beats specialist

Mastering a skill takes about 10,000 hours of practice, full-time for five years. In our technology world it’s a very long time. Technologies and methodologies evolve so fast that concentrating efforts is risky. As a leader, you must train and become experienced, resourceful and knowledgeable. You can’t build a house if you master the hammer, you need a set of tools and just enough practice with each one.

Generalist is always better equipped

If you have 10,000 hours, then you should practice 10 different skills for 1,000 hours. When an opportunity comes you’ll be ready for the challenge. And you have to be prepared to find this opportunity in the first place. A team of know-it-all can easily get a project off the ground and go a long way. When the project reaches the tipping point where a precise expertise is needed, you can hire a specialist or a consultant.

Too much to learn to focus on one thing

Here is a list of skills for street-smart employees of the software world must understand. Sadly, half of these skills cannot be taught in school.

  • Time management and priorities
  • Programming
  • Business value
  • Testing
  • Corporate politics
  • Design and usability
  • Motivation and influence
  • Communication
  • Analysis
  • Infrastructure deployment
  • Project management
  • Architecture
  • Time management
  • Customer support
  • Risk management

The web is the best place to learn

E-learning became very popular lately and the offering is wide and diverse. Here is a list of awesome online sources to improve your skills from:

A secret for my fellow Quebecers

Here’s a little known secret: Quebec folks can get free membership to Safari Books Online through a BAnQ account. Bibliotheque and Archives Nationales have an online partnership with them and offer the service for free. So to get your free access to Safari Books, you need to be citizen of Quebec and register for a BAnQ account (every Quebec citizen is illegible). Safari Books is a precious learning tool for technologists and business people and it’s unbeatable to learn fast.

Avant d’avoir mon compte gratuit, je payais joyeusement 45$/mois. Le site est d’une valeur inestimable pour un chercheur. Cherchez un sujet précis parmi les 25,000 livres et lisez seulement les pages concernées. C’est tellement facile d’obtenir les réponses que c’est presque de la triche :)

Start a side project and build something cool

I’m a big believer in practice over theory. Theory is good for expanding knowledge but practice is what consolidates skills. My favorite trick to learn something is to get my hand dirty and start a side-project. It allows me to practice what I learn, having a goal is motivating and the project may even be useful to someone. Set the scope according to how much free time you have and build something cool.

Gamification in the enterprise

Gamification is the incorporation of engaging gaming concepts to something that is not a game. It is full of potential and can benefit the workplace in many ways. After all, enterprises are endlessly looking for tricks to motivate employees, increase productivity and encourage adoption of best practices.

Workplace gamification is a hot new idea

Games arise when multiple actors with different objectives compete or cooperate for scarce resources. Thinking about it, the workplace is already filled with games:

  • Employee of the month
  • Military combat badges and ranks
  • Levelling up the corporate ladder

Recognizing purpose and mastery can drive employees to surpass themselves better than monetary incentives. Continuous improvement and feedback is much more effective than the typical annual performance review you have in the enterprise. Above all, gamification can focus our energy with optimism to make work more fun.

Design around intrinsic motivation

Real games are about intrinsic rewards. The fun comes from intrinsic motivation, experience of competence, self-efficiency and mastery. Lasting motivation is about finding your own happiness and amplify positive behaviours and personal strengths. Before you can amplify a behaviour, there must be a genuine interest and motivation. Otherwise you could burn the idea early and the employees could perceive the gamification as yet another way of controlling. But if done correctly, symbols like badges and levels have more meaning than their actual value. They become a trusted indicator of achievement and can increase overall productivity in an exciting way.

Motivate employees to increase productivity

Games give us missions with satisfying activities, clear goals and actionable steps towards a well defined objective. Decades of research in human psychology showed us that if you want to motivate people, you should give them a challenge. Once a month, you could give them a collaborative quest:

  • This is your goal
  • This is why it matters
  • Here are the step by step instructions
  • When you bring back a proof of completion
  • Then I’ll make sure you get recognized by your pairs.

This way, you can encourage learning and best practices in an iterative way. Once in a while, after a couple of sprints on a given theme, you could challenge them with a « boss mission », like in classic games. They reach the objective, beat the boss and then they level up.

Show the progress towards a global objective

With constant learning, it’s hard to realize the progress made. You might experience the same problem with continuous delivery and Scrum. As the team delivers working software each sprint, the global objective and vision constantly distance away. Realizing progress and celebrating it is necessary to prevent extenuation. Gamification introduces collectible elements like:

  • Points, leader-boards and badges
  • Challenges, quests and rewards
  • Levelling curves
  • Leader-boards
  • Virtual currency

What can you measure and how?

You can measure many things depending where you need improvement. In a software development company, you could:

  • Reward updates that increase the quality of the code base
  • Promote pairing and leadership (peer review and feedback)
  • Make people follow technical guidelines (hide redeemable codes in the text)
  • Increase system stability (with infrastructure monitoring)

You can go even further and install gamification extensions in your existing development pipeline, like Visual Studio, Jira and Jenkins. This way you can track, measure and reward anything on each level.

Warning: Be careful to get the design right

I’m sure you will have exciting and creative discussions about ways to implement gamification in your enterprise. There are many things to measure and improve. But realize that you cannot simply give points to a boring task and expect employee engagement. The firs challenge you’ll face is getting the business buy-in and make them understand the concept. This kind of recognition system should be iteratively incorporated, reviewed and refined. You don’t want employees to perceive this as another form of control. Have fun and good luck in your quest.

References

  • https://www.coursera.org/course/gamification

Behaviour-Driven Development

Delivering value is essential to stay in business. But although it is honorable to write well-structured, reliable code with good test coverage, you could still fail to meet requirements altogether. This is where Behaviour-Driven Development (BDD) comes to the rescue.

BDD gets you to think in terms of « behaviour » instead of « test ». It encourages the delivery of prioritized, verifiable business value by providing a common vocabulary that is understandable by business and development folks.

Focus on delivering business value

The objective of a development team is to deliver software that matters. So it’s important that the customer defines his need before anyone starts jumping into design and getting caught up in code implementation. The business and development teams should know which features must be developed first. Clarifying requirements up-front will drive architecture, design and development efforts in the same direction. This way, we increase the commitment and buy-in of the everyone involved.

Have the conversations

BDD works by defining behaviour and it is focused on learning by encouraging questions, conversations, creative exploration and feedback. Having conversations is essential as it cannot be replaced by any process or tool. Business people and developers must work together so bridging the communication gap is essential. A ubiquitous language based on the business domain enables domain experts and developers speak without ambiguity.

Speak a common language

The language used by most BDD tools follows the Gherkin format. Feature files, describing acceptance criteria of the features (use cases, user stories) don’t necessarily have to be written in English as Gherkin supports more than 40 human languages. So because communication is everything in the BDD approach, we must bridge the gap between business and development folks. But do the two groups differ?

  • Business people are focused on building the right product. They have roles like: product owners, domain experts and human factor engineers.
  • Development people are focused on building the product right. They have roles like: architects, developers, testers and database administrators.

BDD intends to produce a vocabulary that is accurate, accessible, descriptive and consistent. The idea is that the words you use influence the way you think about something.

Document the requirements as code

A requirement consists of plain text description of the user story and scenarios. The requirements must be specific enough that everyone knows what’s going on. A typical template structure looks like:

A story:

  • As a [role]
  • I want a [feature]
  • So that [business value]

Has many scenarios:

  • Given a [context]
  • When an [event happens]
  • Then an [outcome should occur]

The readable behaviour-oriented specification can be turned into implemented, tested and production-ready code. And managing requirements as code documents the system which is inline with agile principles.

Automate the testing process execution

Once you got the scenarios written following the template, you’re ready to automate the testing process. Tools like Cucumber (Ruby) and Specflow (C#) can automatically convert the natural language scenarios into executable test code. The tests get automatically named after the « given », « when » and « then », so no more confusing naming. The only work remaining then is to implement the different parts as reusable step definitions.

You can use BDD to complement TDD for unit testing and for integration testing. You can run the generated BDD stories/scenarios as part of your automated continuous integration/continuous testing pipeline. And that’s the beauty of it, because it’s not a tool but an approach, you can use in the way it will benefit you the most.

References