When you go through life and your career many things change: your needs, your convictions, your boundaries, your communication style, your understanding of yourself and of other people.
At least that is the case with me. So many things changes in the past 15 years since I got my first job as a software engineer. And they continue changing. And I hope they will do that forever.
I’ll try to document some of my current beliefs about how I work and how I would like to work. This is only accurate as my understanding of myself circa Oct 2022.
Strategic and tactical synchronization
This sounds too abstract but what I really mean is simple. Synchronize on the direction - that is strategic thing. Direction can be written down as goals 3-4 months into the future. The goals can also change once discover some new information.
Synchronization on the tactical things (day to day and weekly work) is not important. You can write down whatever you did last week and brief plan for the next week. Other people can read it if they want. But there is no need to synchronize on those. Everyone knows the big goal and makes their own tactical decisions to achieve the goal.
The most important form of communication is asking for help. Everyone works on their own thing. The only time you get involved into day to day issue of another person is when they ask you for help.
I don’t like micromanagement and I don’t like pushing. There is no need for me to ask other person what is the state of their task. And I expect the same thing in return. If you need help - ask me for help. Don’t ask me for the state of my tasks. Don’t offer help with my tasks. If I need help - I’ll ask for it.
Inversion of responsibility
If you are not getting something you want instead of finding the root of the issue externally (eg thinking that something is wrong with your peers) - invert it. Ask yourself why is that that way? Why did I get that response? Search for the answers inside yourself first.
I you are not happy with your team, treatment your get, your work, your family life - the first solution is always to look inside. Did I get something wrong? Am I not seeing something?
Once you inverted it and asked those question you can find the proper answers and hence solve the the problem.
Communication overhead inversion
We live in the age of Twitter. We are bombarded with information every single day. We quickly learn that most information is not important. We can miss 90% of tweets just fine. This attitude creeps into our work life. We have hundreds of messages every day - most of them can be missed, we get hundreds of emails - most of them can be ignored, and we have too many meetings - most of them can be skipped.
I prefer the inverse. I want to have close to 0 meetings. And I want to have only few messages. Good messages in my opinion are sharing either good news or requests for helps.
Because there is no informational overhead - every message becomes important. If we have conversation one week ago or one month ago I expect it to remembered.
Often you have situation when two people have different opinions. I have following heuristics that help resolve a tie and make resolution.
Often responsibility is nicely split. Eg some person is responsible for design, some for engineering, some of product, some for marketing, some for business development. The person who is responsible for the domain usually have the highest priority for her opinion. Because that person works on the thing and supposed to know it inside out.
However, there are exceptions. Sometimes the proposed solution makes no sense. So the simplicity of the solution is the main criteria for finding the resolution.
Simplicity is the key. Eg if you cannot decide on the pricing model and have infinite arguments. Those arguments should be halted and simplest solution should be picked.
Simple solutions are faster and cheaper to implement. And in most cases all the solutions can be improved iteratively. You can always add more complexity later to the pricing model if needed.
Simplicity is the guiding star. It helps to save time, it helps to find resolutions to the questions with no consensus.
It has many more implications. Simplicity applies to everything. Eg how can I make product more simple for users and not more compact. How can I make my life more simple. So when people make your life more complex - it is a big red flag for me.
I’m ok when people have issue and they ask me for help. But it’s up to me to decide if I have capacity to help anyone today.
The world is complex. No-one understands the whole world anymore. It has been said that the last person to know everything was Goethe. And that was almost 200 years ago.
The complexity of the world increased so much that the same thing applies to the companies now. In any decently sized company there is not a single person who knows it all.
And this uncertainty should be embraced from the start. There is no need for everyone to know everything. Simplify the scope of responsibility for yourself. Become good at it. Show results. And once this is done, you can expand scope a bit. But at the beginning you want to simplify everything.
Embracing uncertainty is important to help you focus on the immediate strategic goal. Don’t think what should happen happen. You will use so much cognitive and emotional energy thinking through all the variants: all the countless “if-else” branches. And because you most likely will not be able to think through those branches - it will become extra source of anxiety. I do this in my own life. Eg when I need to move out of the apartment I only think about all the tasks that I need to do to accomplish this. I don’t think about tasks that come after the move.
Question the hype and fad
There is a lot of hype in the industry. Hype for the tools. Hype for the approaches. Eg at some point Agile was a thing. It became so hyped and it evolved into the separate industry - people make money training coaches and selling books.
It’s important to filter though the hype. When picking tools, processes or even basic beliefs.
Eg people often talk about “collaboration” as something amazing. But to achieve positive effects of “collaboration” is really hard in reality. And it has negative side effects too. It’s not a thing that magically works. Especially problematic is the way how we imagine those things. “Collaboration” is imagined as a multiple - preferably offline - sessions with whiteboard, stickers, coffee breaks and so on. Open source community proved many times that such setup is not important. Write your ideas and your code, push it online. Someone can take and continue your work if they are interested in it. That is it. No meetings. Just do the work.
I see it this way.
The productivity output for one person is 1.
We want to think that output for 2 people due to “synergy” and power of “collaboration” is 3. We have this romanticized dream that that is how it works.
In reality usually output of work of two people is not even 2. Once you add people - you also need to do communication and coordination. And this is separate job. So 1 plus 1 usually means 1.5. And in some cases it can even be below 1. Like 0.7. There might be the higher(or equal) chance that productivity will decrease after adding new person vs probability that it will magically skyrocket.
Getting 3 is an incredible thing and when you have it - enjoy. However, I don’t know of any defined and predictable way to get there. It is more like a lottery. What I really want is not end up with 0.7. So minimizing that risk is more important than optimizing and shooting for 3. Avoiding getting 0.7 is way easier and there are heuristics. Some of them are described above.
Single responsibility principle is important here. Eg when I need help with design for my project I don’t want to “collaborate” with designer. I want provide her as much information as I have and then I want her to go and do her job and express her expertise and creativity and come back to me. I might provide a bit of feedback from my side - to self correct for insufficient input I gave at the beginning. But that would be it. I don’t need to provide my “valuable” opinion to another person all the time. They do their job.
Anti-siege and the power of no
I saw many times in my life people would do this thing when they don’t like the answer they get. They would ask the question “why?” a lot. But not in the famous "Five whys" way from Toyota. But in an infinite and destructive way. Where each response to “why?” leads to another meta discussion. This leads to being something similar to the siege, where you are bombarded with irrelevant questions and discussions until you exhaust your resources and give up.
This is the popular technique used on Twitter by people who don’t care about actual work and consensus.
“No” is a proper answer. If you asked someone for opinion and they told you you how would they do it that should be usually enough. They probably give you few reasons already in their response. Go and think about it. Maybe you miss something.
Stop bombarding people. If you get “no” as an answer instead of asking person infinite number of “why” take your time and try to list all the reasons why that answer was provided. Given enough time you will find many reasons yourself. World is not black and white. There is no ideal solution. There are many trade offs. Poke your own idea. Be the biggest critic of your own ideas.
Contributions and the power of iterations
My contributions differ day to day and week to week and month to month. I have different states during the year. And it’s ok. What matters is incremental progress. If I can add one small thing this week - it’s still progress towards the goal.
The same way my contributions are not equal I don’t expect everyone on the team to contribute equal amount. Bring whatever you can. It all makes the difference.
I use the same heuristic for quitting personal relationships and teams. If personal or work relationship feels worth than being on your own - then quit.
Also, it’s important to remember that work is not your family. You can quit it.
Another important thing is to not put the burden of your emotional issues on your team mates or your partner (they can offer you help if they have desire and resources, but you can never expect it). You should have appropriate structures in your life for that: your therapist and your coaches. If you don’t have that, it means being lazy and disrespectful to others.
Another important heuristic is frequency and length of “difficult” conversations. This applies to both personal and work relationships. If you have unproductive repetitive conversations - think more than 1 hour long every single time - it’s a sign of a big trouble. There is a huge misalignment and extremely high chance that this dynamic will continue.
As I said, my style of work changes all the time. But I also think that with each year I have crisper and more clear vision of what I want.
My style is not for everyone. And this is completely fine. Important thing for me is to try to build my work around the style that works for me. And communicate to other people what is my style so they can decide if it works for them.
After writing this I realized that the big theme I care is the respect for other people time, boundaries, cognitive and emotional resources.