After talking about the attitude concerning values and synyx‘ new claim „Code with Attitude“ some time ago, today I want to focus on the „attitude“ towards the people you interact with.
Part 2 – People? What people?
When I was a student at the University of Applied Sciences in Karlsruhe my imagination of my future job was a little hazy as my mind still exclusively revolved around football, beer and Counter-Strike. „Real life“ was still pretty far away. The one thing I was pretty sure of was that being a developer is not something „people oriented“ like psychology or being a nurse. After graduation I was to be placed in a small office at a pretty desk with a nice computer and do the sweet hacking all day long.
Oh boy was I wrong. Years of project work in software development taught me that as a developer you have to deal with people of different kinds every hour of every day.
You have to…
- pair with your teammates
- engineer requirements with your product owner
- keep your janitor in a good mood
- work out solutions with your team
- coach students
- get coached by your scrum master
- deal with your boss
- deal with your bosses‘ boss
- kiss the sysadmin’s ass
- negotiate integration with other teams
- chat with the coffee machine maintainer
- collaborate with external suppliers
- talk to the users about their needs
- be creative with designers
- interact with the developer community through conferences, user groups, CoPs, open source contributions, Twitter, mailing lists, Stackoverflow…
- … and many more
Every single one of these humans contributes to the success of your work and this is probably only a small subset of the complete list of relevant people and interactions. So if your plan is to hide in your nerdhole and just code for yourself then you may still be a good coder but you are wasting a lot of potential. The interaction with other humans is one of the main parts of a software developer’s job and it is not recommendable to half-ass this. Software development is a people oriented job! This realization is incorporated into our company culture and the way we work at synyx. There are so many aspects of this, of having a „healthy“ attitude towards your peers that I have to confine myself on some of the most important ones:
Respect and Appreciation
One of the most important things at synyx is that everybody is on equal footing, which creates the most comfortable working atmosphere. Every student, the janitor, every programmer, the cleaning lady, the office girls, our three bosses are part of our workforce and are treated with equal respect by each other.
We transfer the same mindset to our project work. A senior developer is not too valuable to do some dirty work and clean up hundreds of unit tests or empty the dishwasher from time to time. Students and juniors are integrated into actual project work, if possible. When working with our clients we expect the same thing. To be able to talk openly and on equal terms with them without political mumbo-jumbo. To be treated as coworkers and not as freelance codemonkeys or external consultants from the ivory tower. This is the way we can contribute best to our client’s success. And in my opinion it is the only way self-organised, agile teams can really work.
Openness and Honesty
Openness to direct communication is vital. You can help your colleagues best when they have the feeling that they can always talk to you and ask for your help, ideally face to face. Always try to solve tricky problems together and seize opportunities to learn from each other. Teams with this mindset are fastest in problem solving and have the best knowledge distribution between their members.
In the other direction – don’t build walls. Don’t make yourself inaccessible with always-on-headphones, physical distance or walls, narrow-minded choice of communication channels or artificial bureaucracy. I’ve known teams who only ever talked about requirements when you filled out a 9 page word document for them. Other colleagues put themselves out of the game by only accepting communication by email. Of course it is important to maintain focus for yourself but hindering communication only leads to your colleagues avoiding you.
Provide honest, regular feedback to your coworkers. Emphasizing their qualities and complimenting their work is equally important to pointing out problems. Positive feedback and downright thankfulness are a proven way to boost morale and work performance. On the other side – please, please don’t procrastinate uncomfortable conversations! This only makes things worse! I was witness to multiple situations in different teams where the long avoided elephant in the room suddenly blew up and completely destroyed the morale and sometimes the ability to work toghether. Unspoken conflicts are a project risk!
Attitude towards yourself
Essential for sustainable success is a healthy self-assessment. No matter how much experience you have, you always have to weigh in the possibility that you are flawed, you can make mistakes, you are not all-knowing and you make wrong decisions. In everything you do you should take this into account.
Don’t make important decisions by yourself. Always let one or more colleagues challenge your ideas. This is no matter of strength or weakness, this is caring about the quality of the result. For example there is no such thing as the perfect software architect who can think up everything on his own and always create the best possible solution. Architecture – and most other important decisions – should always be a team effort.
Question yourself whenever possible. Is this still the right way to do this? Am I rushing this? What are the downsides of my idea? Do I know enough to make this decision? Who could know this better than me? Is this the right way or the lazy way to do it? Can I learn something new here? Should I do this alone? What are the implications of my decision? Did I handle this situation correctly? How can I improve the way I work? One basic requirement for self improvement is being self-critical.
Don’t make yourself indispensable. There are companies out there where this might provide you with some kind of twisted job security but it neither makes you a likable colleague nor does it make you a good developer. Share your knowledge! Enable your team to do everything you build and learn by themselves! Create comprehensible documentation where necessary. Make everything as intuitively understandable as possible. Use methods like common code ownership, pair programming, daily standups! Always take care of the truck factor! Everything you can do should also be possible to do for at least two other persons, ideally your whole team. You have done a good job when you can leave your team without having to worry that anything goes downhill afterwards.
All this does not mean that it is forbidden to be self-confident. Be aware and proud of your capabilities and achievements! Sharing them is essential. Do good things and talk about them!
Being a good developer requires the willingness to interact with the people around you. All of the things mentioned above don’t require you being loud or an extrovert of some kind. The only prerequisites are an open mindset and active communication, which is something everybody can achieve. This is an integral part of „Code with Attitude“ and something that we actively encourage to the benefit of the people working at synyx and at our clients. Is it successful? Yes! And it feels great!