Month: May 2014

I often underestimate the power small choices can have on my life, when I think back to my new years resolutions. Lose weight, get fit, read more. They are all very ambitious goals with little substance. I am always looking towards the next big improvement in my life, and if I eventually do hit my big goal I miss all the little things I did to get there.

 

Stephen Covey
Stephen Covey

Choices

 “I am what I am today because of the choices I made yesterday,”

Stephen R. Covey

So how does somebody get to these big goals? It’s the choices that matter, the small everyday choices. Do you spend an hour watching TV after work or do you finally learn Lambda Expressions in Java 1.8? Do you take the elevator up two floors or do you take the stairs? Often the difference between people who know Lambda Expressions and the people who don’t is an hour or two of not watching TV. You are your choices and the actions behind them, you could have the best intentions for your whole life, however unless you act you are nothing but wishful thinking. You will never get fit unless you chose to get up and take a walk around the block instead of sitting in front of you computer. I am talking about small choices here, nothing big. Fifteen minutes here, an hour there.

Personally I find that there is a large gap between making a choice and going into action. I find the easiest way is to just start. If I feel like I should go for a walk I try not to think about it. I trick my mind, “Go put on your shoes and open our door” I do this quickly before my mind has a chance to think of a good reason why I shouldn’t go, “The weather is really looking bad today, I can always go for a walk tomorrow. It might rain you know!”. If I am faced with something particularity daunting I tell myself just do it for ten minutes. Once I start acting I find that the momentum starts to carry me.

As with most things the first step is the hardest.

One Ring to Rule them all
The One Ring

Small Choices

I would really like to highlight that I am speaking about small choices, small changes. Over a long consistent time that have brought huge differences to my life. The difference between commenting one of my methods straight after I wrote it and not is about two or three extra minutes of work. However firstly it makes me a better developer and secondly I earn a lot of good karma from the developers down the line who have to maintain my code.

Learning and using one or two short cuts in you favourite IDE will improve the speed at which you code. Every day, make one or two small positive choices to improve your life and more importantly ACT on them. When you look back in a year or two you will be surprised where you are.

One pretty small change I’ve made in my life is writing this blog once a week. It’s a pretty small change but the impact has been pretty big. I am a lot more aware of things I do and the reasons I do them. I think about my decisions and why I made them, I am starting to get better at communication (especially written) and learning to get my point across in a more logical and clear way. All because I write around 900 – 1000 words per week.

Motivation vs Discipline

Something that really deserves it’s own topic is Motivation vs Discipline. However I just want to say here that discipline is a more consistent producer. Motivation is important but discipline keeps you going even when your motivation is low. Discipline is almost like a muscle it is something that can be practised and made stronger. The best way to train discipline is to use it every day. I am not saying motivation is not important if you want to achieve greatness, it is, but discipline should come first. All the motivation in the world won’t help unless you are disciplined.

Small Choices for Programmers

So what are some small choices you can make to see a big difference in your programming skills?

1) Always add a comment when you commit. This will be helpful when you are looking for things you did in the past, it might even save you some time when you remember you once did that thing before, if only you could remember where it was. More importantly it forces you to think about what you are about to commit and could help prevent incorrect commits of code that is still in progress.

2) Learn your IDE. Spend some time learning why people love your IDE, what makes them productive. There is always something you can learn about your IDE. You will see huge improvements in your output if your flow is not constantly interrupted by moving your hand to the mouse to find that option to refactor the method’s name.

3) Start a website and start writing. Even if you just create a free account on blogger. I am always amazed at how much I learn when I write. Every article teaches me something and it honestly doesn’t take that much effort.

4) Spend some time reading other peoples code. Even just ten minutes a day can improve your programming drastically. If you have access to the person who wrote the code it’s even better. Go to them and ask them about it. Programmers love talking about their code, especially if they did something cool.

Challenge

Take something in your life that you would like to improve. Perhaps you would like to be fitter or you might want to learn a new skill. Now forget that! High level goals are great and you should be working towards them but you already know those. Instead two times a day why don’t you try a different choice. When you are about to do something you think is unproductive stop, put your shoes on and go for a walk or go read about Lambda expressions here.

So how do you know if what you are about to do is not what you want to be doing? It’s when you get that twinge of guilt just before you are about to sit down on the couch and you know that you need to organise your holiday pics. Or when you open the fridge and reach for that left over slice of cake instead of taking a walk. When you start to recognise that feeling half the battle is won. The next half is choosing something different.

Thanks for reading. Until next time may you take a good step.

-R

Last week I wrote about why understanding people is important and I got into a few points that might help you understand others. These were pretty high level ideas. This week I am going to carry on with this topic (you can read last weeks post here).

I spoke about three other things you can do to help you understand other people, they were Merging Mind Maps, Understanding Motivations and Faking Experience. These three points are slightly more lower to the ground and practical than the points in the previous post. So without any further delay let’s get into them.

Mind Map
Image courtesy of wikipedia

Merging Mind Maps

Let me explain what I mean by Mind Maps. When we think about a problem we usually get a picture of it in our heads, for example. The server’s memory usage spikes whenever a user captures a new booking. When you see this you get an image of the issue and your mind starts moving down different paths. The paths your mind takes you down is what I mean by Mind Maps (a good way to picture this is by looking at how hand drawn mind maps look). Now because we are all unique and our minds are all wired differently our mind maps are built differently. No two people will automatically create the same mind map of any non-trivial problem. Two developers can read the above issue and come to completely different conclusions or perhaps the same conclusion just via different approaches. Add a project manager and a team lead and all of a sudden you have four separate mind maps of the same problem. The differences in all these mind maps are where the misunderstandings are.

Sometimes the mind maps might not be that different, and sometimes they are as different as night and day. Often mind maps that “almost” match can cause the biggest misunderstandings, because the people working with these mind maps think they are on the same wavelength.

So how do you merge mind maps? It starts with finding common ground. Something that all of you understand and agree on. Then you can take turns leading each other down your unique maps. Don’t be scared of speaking up if you are being led down a path you don’t understand. Remember the goal of this is not to convert someone to see things in your Mind Map and others shouldn’t be doing it to you. The goal is to create a merged map, which is often stronger and better formed than the individual maps you all had.

Sometimes you will see people who do this naturally. Ever heard someone say “Wait, let’s all take a breath and think about this” or “Let’s all take a step backwards”? This person is trying to find common ground that the whole group can agree on. Usually it helps when merging mind maps that you have something you can draw on. We see things a lot better if we can actually see them.

One more word on mind maps. If you have merged maps once or twice with someone in the past your ability to understand that person becomes easier, you start knowing what the “mean” even if what they say is slightly different from the way you would say things. Before you know it you are finishing each others… sandwiches!

Understanding Motivations

Spending some time getting to know a persons motivations will make understanding them a lot easier. If you understand that Tim is motivated by clean design and well documented code you will know that if someone expects him to do a quick hack job and he seems happy to do it you probably have a classic misunderstanding on your hands. Maybe he didn’t understand that a fast, out the door, throw away solution was required. It should sound warning bells in your head.

The other part of this is understanding the motivation behind what is being asked or said. One lesson that has always stuck with me is “95% of people try to do the right thing 95% of the time”. I’ve always loved that thought. Thinking about things like this has saved me countless hours of “I wonder what she meant by that” or “Was this person just being a dick?”. If you believe people’s motivations are good most of the time misunderstandings become a lot less likely, since you are not second guessing their motivations and actions.

Experience
Experience

Faking Experience

The final point is faking experience. I’m not talking about lying on your CV. You should pretend you are an expert project manager when speaking to one (in your head only 😛 ). This will help you when dealing with people who are not in your field. As a developer I sometimes pretend I am a project manager when I’m being asked something, in an attempt to understand what is being asked or said. If I was a project manager why would I ask “Why does this require so much time.”. If I was an architect why would I design the system layers like this?

This part takes a certain amount of humility, because it’s always tempting to say, “They just messed up and my idea is better”. Usually this way of thinking will lead to misunderstanding. Often there are valid reasons behind why certain people ask certain questions and in a working environment and it is often tied to their profession.

Project managers need accurate timelines and they need things delivered on time so sometimes (because they are human) they will hear you say this section will be done by Wednesday and they assume you are speaking about the entire deliverable, while you are actually speaking about decoupling the business logic layer from the UI. If you pretend you are an experienced project manager you can figure out that they actually want to know the high level deliverable and not the decoupling.

Conclusion

These past two articles have been pretty long and a lot of fun (longest I’ve ever written and my first two parter). There are still a lot of things left to say about understanding other people, but I want to leave this in your mind. Understanding someone can be a huge adventure. If you approach it from the correct frame of mind you will learn not only about that person but also more about yourself. Cutting down on misunderstandings between people will make you a valuable part of any team. When people realise that you are able to speak their language they will start trusting you more and once you have people’s trust you can start doing amazing things.

Thanks for reading, until next time. May you understand what’s what.

-R

When I started writing this post I didn’t expect it to become so long, so I’ve split it up into two part. Part two will come next week. So with that said let’s get into part one.
Monday Morning Meeting
Monday Morning Meeting – Image Courtesy of Wikipedia

I’m sure you’ve been here before. You are sitting in a Monday morning progress meeting with the other developers and the project manager. The project manager asks Tim when his part of the work will be done? Tim starts explaining how the business logic and UI layer still need to be decoupled before he can make progress, but he suspects that will be done on Wednesday. The project manager looks happy, Tim looks happy and the meeting moves on.

Something in your brain tugs at you however, maybe it’s the way Tim said Wednesday. Maybe you have some background knowledge about the size of Tim’s task and you know that there is no way Tim can have everything done by Wednesday. In fact you know that if it was you doing similar work you might not even be done next week Wednesday.

So how did these two smart individuals miss each other so completely? At the core it is because they don’t understand each other. I am not talking about understanding what the other meant during the meeting (although that too is important). I’m talking about Understanding each other on a higher level (with a capital U), a personal understanding.

Sun Tzu
Sun Tzu – Courtesy of wikipedia

One of the big keys to success in life is the ability to understand other people and making yourself understood. Having those two traits will make your job a lot easier and if you are a developer it will put you ahead of similarly skilled developers who don’t know how to do those two. Developers who are able to cut down on misunderstandings in their teams are highly valued in any company.

Making yourself understood is a good topic for another post. However a big contributor to making yourself understood comes from understanding the person you are speaking to.

So how do you go about understanding someone?

Willingness

For you to understand someone you have to be willing. It might sound easy, obvious and not worth it’s own point but trust me it is. You see I’ve learnt that, being a programmer, I love order. I love having things put back in the same place. I love predictable outcomes and I love being able to sit back at the end of the day knowing that my section of the universe is in harmony and order (even if I it might not be). Allowing other humans into my part of the universe does the exact opposite of what I love. People are messy and chaotic, they have motives that I don’t understand and do things that I can’t make sense of, in ways that seem almost mystical to me. Sound familiar? So to be able to understand someone means you have to be willing to open yourself up to that discomfort. Without willingness you will almost never gain even basic understanding of other people. The issue becomes worse when both sides are unwilling to understand.

Open Mindedness

The next thing you have to do it be open minded. Your mind is preprogrammed to understand and like people who are similar to you. The further away you get from yourself the more on the defensive your brain will get. The reason for this is perceived safety. We all understand ourselves (or at least think we do) and that makes us feel secure and safe. The less someone is like you the more defensive you will be, the more your brain will try and trick you into not liking them. So you need to approach the conversation with this knowledge and the goal of being open minded. People are different because they have had different experiences shape their lives. You should see it as a journey. Speaking to someone and seeing into their past, via their present behaviour should be something exciting and fill you with wonder. It is amazing when you stop and think about how different someone is from you even people who grew up in similar circumstances can be worlds apart.

Deckard Cain
Stay a while and listen. -Dekard Cain

Listen

I see this too frequently (and more frequently from me than I’m comfortable with) when one person is speaking the other person is just waiting for their turn to say something, they are not listening. I’m sure you can think of an example where this has happened to you. You are explaining the API you’ve been working with for the past two weeks to a fellow developer and you see the exact moment a question pops into their head. You know that everything you say after that moment will be useless so you stop and let them ask their question. I’m guilty of this… a lot. Sometimes I think I know the right answer before the full question is even asked. I worked with a person once who would almost never interrupt someone, and I really mean never. He was so Zen, even when he was being interrupted he would stop talking and listen. This person is probably one of the smartest people I know and he would just sit and let people talk. I once asked him after a pretty frustrating meeting if he knew the answer. He said (and here I am paraphrasing because this was years ago and I can’t remember the exact words, but only the essence) “When the meeting started I thought I did, but as everyone was talking I realised that I didn’t have the full picture and my answer was only half correct. So I didn’t say anything because I needed some time to think”. If your intention is to understand someone then shut up and listen, you will be surprised what people will think of and say when they are honestly being listened to. *note to self, take own advice*

One final note on listening, most people can tell if you are listening to them or just trying to be polite. Just as easily as you can. You lose nothing when you listen attentively and speak your mind afterwards. If you are scared you will forget then make a small note (but honestly if you are scared you will forget what you were trying to say it wasn’t that important in the first case).

To Be Continued…

This article is getting pretty long and there are three more points that I would like to cover. So join me next week when I speak about Merging Mind MapsUnderstanding Motivations and Faking Experience.

Thanks for reading.

Until next time, may you hear what others are saying.

-R