This post came up as a result of the discussion with one of my colleagues.
Many times people around me do not understand my intentions and strategy, and I like to be explicit and transparent about those things.
I believe this is a mutually beneficial way of sharing knowledge and opinions - being honest and explicit.
So, in this post I will share with you my thoughts on the topic of being an effective engineer.
Note: some of those ideas will make your cry out "It is a complete BS!". Please, give it 5 minutes.
What does it mean "to be effective"?
"Being effective" means, well, being able to cause some noticeable and positive effects on the surrounding reality.
The effects I want to emphasize are:
You are able to add values to the business you are in.
You can seize your own opportunities without regrets.
People do not hate you and stay in a positive mood after working with you.
You can learn and improve yourself constantly.
So, long story short. Here is a rough map for your journey. Explanations included.
Step 1 - Be Responsible
Responsibility means the ability to respond to challenges in a sane and efficient way.
But how do you put it in practice?
Deal with your own mistakes. There is nothing wrong with mistakes and failures, if you fix them and get some knowledge out of it.
If you need some strategy for dealing with mistakes, read this explanation article.
Find the root cause of all mistakes. You need to learn how to prevent things from breaking and how to quickly fix stuff.
Find the driving factor of all decisions. You need to understand what is going on and why. It will help you make correct decisions.
Do not be afraid to say "No" and "I do not know". This will be tough, but you will make uncertainty visible. This is really helpful to provide correct expectations. And for preventing bad things from happening.
Give feedback. It will help people notice bad things faster.
Step 2 - Create End-User Value
The main driving factor, which drives me to write clean code and simple systems, is end-user benefit.
"How does it relate?", you may ask.
Let's have a small detour in a separate article :)
And now, here are the set of things to keep in your focus:
Keep your system under control. You need to know how to change the system when user demand changes. Or when business model is refined.
Cut ticket/help request turnaround time. Users really love to have their problems magically disappear on a whim.
Improve UX and system responsiveness. This will add more "Aha!" moment for your users and will keep them happy. Happy users == happy business.
Go talk to your customers. I mean it literally - go and talk to real people using your stuff. It is invaluable!
Step 3 - Be Efficient
To make positive effects you need to understand all culprits of your environment. Otherwise, you will just make wild guesses.
Here is the way of getting a better understanding:
Analyze surrounding business processes. Your work is basically a problem solving automation. You need to understand what you should automate.
Try to optimize things for making profits. Your business always wants more money.
Try to optimize things for cutting costs. This is the other way round to make more money.
Try to bring new knowledge and ideas. This is the best investment you can make to let business make more money :)
Step 4 - Be Replaceable
This is the most controversial step, but it is valuable both for you and for the business. By keeping this target in mind you lower the risks for business, which actually boost your value (the perceived benefit you bring to your organization).
Read on and you will get some insight, I believe.
Share ideas and insights. It will help people around you be more efficient.
Write clean and maintainable code. Do not make others suffer in the future.
Mentor other people on topics they do not know. Spread the knowledge, make your teammates more capable and skilful.
Learn new topic and let others lead you. This will help you recognize and seize new opportunities and unforeseen perspectives.
Incorporate your knowledge in the code. No one likes to read docs.
But everyone have to read code.
Use this fact to leave useful hints for your teammates (read on details here).
The basic idea of being replaceable is to make people around you being capable of fixing problems without you being involved. When this is the reality, you will get some really cool benefits: easy communications, ability to delegate stuff, shared responsibility...
But this is another story :)
And here is a takeaway mantra:
To be an Effective Engineer you need to be responsible, valuable, efficient and replaceable.