You have 2 options to communicate your ideas:
- Tell people what is interesting for you – easy, but unfortunately, your ideas will be wasted because of other people low interest, incomplete knowledge or disagreement.
- Make your ideas interesting for other people – hard, but you have chances that other people will pay attention, understand, remember and act upon your ideas.
Why should a programmer care about communicating ideas to other people?
It is true, the primary job of a programmer is to feed computers with ideas. But you cannot quietly hide behind a computer forever. You have to deal with other people:
- team – to contribute and explain your programming ideas
- customers – to discuss and build trust in your solutions
- end-users – to make your programming ideas useful for users
- programmers of the world – to share your knowledge and exchange ideas
- capitalists – to sell your ideas
- low tech crowd – to promote technology ideas
Why is it so hard to make ideas interesting for other people?
- Curse of knowledge – once you know something, it is hard to imagine not knowing it and communicate to novices
- Resistance – many people ignore or resist new ideas
- Limited brains – people have short attention span and can be easily overwhelmed by new and complex information
The turning point in my professional life was Kent Beck’s book – Extreme Programming Explained. Kent Beck made me think beyond technical aspects of software development. In addition to algorithms, computer languages and technologies, I started to realize very important factors – simplicity, feedback, business value and people interactions. Kent Beck influenced not only me, but millions of programmers by introducing Agile approach (Extreme Programming), iterations, user stories, refactoring, unit testing, pair programming, continuous integration and other practices. Kent transformed new and existing ideas into the form that made them widely accepted and used by almost any professional programming team now. Kent Beck knows how to make his ideas sticky.
Principles of Stickiness
Chip and Dave Heath defined 6 principles of sticky ideas in the book Made to Stick: Simple Unexpected Concrete Credible Emotional Stories (SUCCESs).
Usually people will remember only one idea from your message. They will remember nothing, if your ideas are complex and difficult to get. Therefore, distill your ideas into the simple and compact form.
- Find core of your idea – remove all unimportant information, keep bare essential minimum
- Prepare Commander Intent – plain statement of the purpose of the operation and the desired end state. Example: The goal of this iteration is to build minimal end-to-end order flow – capture and save order, display it to an administrator.
- Build people understanding on familiar knowledge – introduce new ideas gradually, compare and merge with existing. Example: Design patterns – we can use Factory method here to have full control over object creation.
- Use metaphors and analogies as a base for the new thinking. Substitute something easy for something difficult. Best examples are proverbs: “A bird in the hand is worth two in the bush” – lets build first version on the proven technology to avoid risk of missing release date.
- Establish common language – with the same meaning to everybody. Domain Driven Design has ubiquitous language as a core principle for communication between business and technology people.
The sad truth is that people won’t get your idea if they don’t pay attention. You have to get and hold attention if you are serious about success of your ideas. It is similar to judo – once you get good grip on your opponent, you become in control and open possibility for many effective techniques. You cannot do much without solid grip.
- Surprise people and violate their expectations. Example: my idea will remove half of the existing code and make the system much faster
- Stimulate curiosity: open gaps in knowledge and fill them with interesting answers, be provocative: We can increase traffic to your website 10 times in two weeks. Do you want to know how?
- Make you message interesting for people. Use new information, twists, suspense and humor. Example: Do you know that you current system is open for hackers and important information is leaking to Internet?
People have hard time to understand abstract vague language. Use instead definite and concrete language. Often bullshit is disguised as abstract and conceptual language.
Compare A to B:
A. Our IT governance mandate requires us to carefully consider all the aspects of software quality, scalability and performance. We use comprehensive QA methods to meet wide range of possible live system usage scenarios and challenges. We employ best resources to accomplish this mission.
B. We need one more week for thorough testing.
- Make ideas clear and tangible – everybody should understand your message the same way
- Provide real examples, discuss real scenarios to nail down understanding, let customers play with concrete working implementation as early as possible
- Help to visualize ideas – one image is worth thousands words – build prototypes, wireframes, draw on paper
People will believe in your ideas only if they are credible. Establish credibility with
- Facts, statistics and arguments – build a strong case for your idea, provide clear explanation and rationale
- Proven solutions – reference similar ideas that are already implemented and successfully working
- Past success – quotes, testimonials and live examples of your previous solutions; use Sinatra test: if you can make it there, you can make it anywhere (he referred to success in New York)
- Reliable methods – disclose your QA and verification process, monitoring and troubleshooting procedures; build trust in your ability to deliver quality implementation
- Control and transparency – give impression of control to your clients by providing testable solutions and full information to understand and manage the system independently.
People can do wonders if they care. They will care about your ideas if you wake their emotions and feelings. Emotions motivate and move us.
- Make ideas connected with people, not abstractions. Tell them about Joe who was frustrated with our search or Jenny who was so excited with our website new features.
- Appeal to the senses of responsibility and professional dignity – make people conscience aware about quality problems, system security concerns, low user satisfaction
- Use self-interest – what is in this idea for the person: survival in the company, career growth opportunity or interesting challenge
- Appeal to identity – people care about their image and status: “what could someone like me do in this situation?” A good developer not only cares about working code, but also about usability of a solution.
Stories are the best and oldest communication tool. The brain even process them differently (with episodic memory). We remember stories longer and recall them better. Stories are
- Inspirations – about a developer who build overnight prototype of super fast search fixing most frequent complain for past year.
- Simulations – about crashes of the system and hours of downtime, long desperate troubleshooting under guns of management that were caused by a small bug with infinite loop
- Lessons – about the programmer who committed code without testing
- Awareness – about users who couldn’t figure out how to complete simple tasks on a website
Programmers expertise grows not only with increased technical knowledge, but also with ability to transform and communicate ideas. Expert programmers know how to make their ideas interesting, working and successful.
- simple – to understand
- unexpected – to pay attention
- concrete – to make sense
- credible – to believe
- emotional – to care
- stories – to remember
I wish you many great ideas that people will love, remember and follow.