Apparently 10 wasn’t enough.
Thanks to some great feedback on my last post, you guys forced me to add 5 more questions. I really wanted to keep the count below 10, but it hard to argue against the wisdom of the crowd.
So let's get right to it…
Am I Learning the Right Things?
I assume you are already actively learning.
You wouldn’t be reading this post if you didn’t want to learn. Are you learning the right things though?
People often tell me: “I’m learning a new language” and they invariably mention another language just like the one they already know. If you have a toolbox full of hammers rather invest in a screwdriver.
If you know OO, learn a functional language. I recommend Haskell since there is no way to cheat, be warned, your brain might melt a little.
If you have those 2 under the belt, check out a logical language like Prolog. Make sure you know a dynamic language like Ruby. And if you get a chance, check out APL. It’s beautiful.
How Can I Make This More Transparent?
The hardest part of fixing a problem is finding it.
Do everything in your power to make your solutions transparent. Write lavish logs, throw exceptional exceptions, make your code clean and sparkly.
Every time you struggle to find a problem, make sure the next guy can find it with less effort.
What is the Return On Effort?
Everything comes at a cost. Not writing that unit test buys you a few minutes right now but at what cost later on? Taking a week to research existing algorithms might save you 3 months in development time by the end of the project.
If it takes you 20 minutes to do a deployment and you do 10 deployments a week, how long until taking those 3 hours to automate it is paid back?
That plugin framework that might possibly save you 2 days one day. Does it make the things you do everyday take 5 minutes longer? How long until those 5 minutes add up to more than those mythical 2 days?
This is a marathon, not a sprint.
Am I Solving the Right Problem?
Writing a script to periodically restart a service to improve stability is awesome. What’s even more awesome is fixing the memory leaks that make the service crash.
Created a marvellous multi threaded app to generate 20 concurrent crystal reports? Nice! Why not investigate a switch to XSL-FO so each report doesn’t take 3 years to generate.
If you get a set of requirements that don’t solve the right problem. Speak up! You are more than a code typist, you are a problem solver.
Does Anybody Care?
This is probably the most important one of the lot.
If what you are building doesn’t make somebody's life better, gives them more time, saves them money.
Why are you doing it?
I know this list is long and it might seem like a lot to take in.
You don’t have to do it all at once though. Try this; find somebody you work with who is also on a mission to be the best they can be. Pick one question per week and commit to asking each other that question at least once a day. Think about your answers, be honest, be better.