If you "write code" for a living, chances are you have a one time described yourself as a "Software Engineer". And chances are, you are not.
Personally, I graduated with an Engineering (Software Systems) degree and have frequently and proudly described myself as such.
But, only after "slinging code" for a lot of years have I come to understand that describing myself as an engineer is a right that doesn't come from a university but something that must be earned.
How many "Software Engineers" can claim they are in the same league as Archimedes, Henry Ford or Nikola Tesla?
Let's set our sights lower, how many of us can claim that we make products that last 10 years? 5 years? 5 months?
If you have not yet earned the right to call yourself an engineer, fear not, I believe you can.
I believe the most important aspects of an engineer is that they are principled and they truly believe that they can always get better.
By being principled, you know what you stand for and why. And perhaps more importantly you are able to share this knowledge with others.
When you believe that you can always get better, then you will never stop learning, listening to others or aspiring to be better.
To that end, this is (hopefully) the start of a series of posts where I will endeavour to share my principles and learnings from over the years.
Constantly Examine Your Day With a View to "Optimize for Value".
There is a surprisingly large part of a coder's day that is wasted on things are frankly not worth the effort.
If an activity brings you or your company no value, then why are you spending time on it?
Often time this might take the form of meetings, people or "process"
Recently a friend of mine lamented to me that since being promoted to "Team Leader" he felt like he could never get anything done.
So he decided to track his time. At the end of the week he had discovered that he had been able to spend a total of 20 minutes on engineering.
Now, if the rest of his time had been taken up with mentoring or leading his team than this would not be a bad thing but sadly most of his time was "spent" by others; Other teams; Other departments and so on.
Please don't let me misguide you into thinking that collaboration and communication is not absolutely imperative.
My point is as engineers, we should focus on finding the best solution. That is what an engineer does.
- If a meeting is about "syncing up" then consider being proactive and publishing your status on a wiki, internal blog or via email distribution. Let other "self-service" the information at a time and rate that suits them.
- If you are a team or department lead and feel like you spend your entire time in meetings that achieve very little then delegate. This not only frees you up but it will allow your team members to experience more and grow. Be sure to empower those your delegate to make some or all the decisions, otherwise people will insist on your presence. Also be sure to back your team members decisions; they need confidence to make decisions and represent your interests without fear.
- If your boss wants on know "what's been worked on" or "what was achieved" then find a tool that works for you and use it. Keeping a list of tasks up to date is a minor task that all team members can do at little cost.
- If the "process" requires that you take 5 steps to complete a task but most of are mind-numbing mechanical stuff. (e.g. generating a change log or sending an email notification) then use your skills as a programmer to automate as much of it as you can. Consider a simple the task takes 10 minutes and you must do it once a day. If you spend 2 hours to make a script that reduced that task from 10 minutes to 2 minutes then your time would be "paid back" in 15 days!
- Find yourself constantly distracted by email or IM notifications? Close the apps! As programmers our work requires a great deal of concentration and any little distraction can upset your flow and otherwise slow you down. One of the great advantages of text-based communication is that it's designed to be "disconnected"; this means you are free to interact with it at your pace. Some people take this a step farther with concentrated bursts of concentration using the Pomodoro technique. While I recommend trying this, it's not for everyone and I frequently find it hard to stick to.
In the fast paced environment that many of us now live in, it's very easy to get swept up with whatever is right in front of us and bounce from task to next without any thought about why.
I strongly encourage you, once in a while, take a step back and ask:
- Where did my day go?
- Did I work on the most important/valuable things today?
- Could I have done anything more effectively?
In the end, Value your time; You can "engineer" a better solution; Use your skills to make your life better.