What did you learn this week? If the answer is not much or even nothing then maybe you need to step back and question the role you’re in or what you’re doing. This of course assumes that you actually enjoy learning and want to keep improving. Not everybody does.
Even a job that is hugely frustrating or has numerous challenges is one you can learn much more from than one where you just kind of coast from week to week. I often find myself frustrated and stressed but despite all my huffing and puffing I eventually get through the current problem and come out on the other side feeling a bit like I’ve just finished a tough workout, albeit a mental one. I sometimes learn that I can do better in how I design and implement something. Other times I find that the problem wasn’t down to me at all and that all the mental energy I expended was for no other purpose than to put out fires caused by poor third party systems that I have to integrate with.
This week was a great example of fighting fires. Recently I made some changes to a system I wrote that fetches parcel tracking information from two well known U.K. couriers. I added a new feature that would see our system fetch proof of delivery images from these couriers and upload them to Amazon S3 where we can retrieve them from various other applications such as mobile phone apps via a single unified url (courier independent). It has to be said that in my experience I have never come across third party systems that are as poorly designed and unstable as those of courier companies. We often find the data missing important events such as whether or not the parcel is delivered, and even when they tell us that it is delivered, the customer’s signature is also often missing but that’s a different story.
This week it was deemed time to deploy our new changes but Sod’s law showed up just in time and as soon as the new system was placed live suddenly all messages of type “delivered” were failing and being placed on an error message queue. I spent hours trying to track down what had changed. Surely it must be me, I thought but eventually I discovered that at more or less the time of deployment one of the couriers had changed their system too, only they’d managed to screw up the data they were sending us causing our end to fail. We made the decision to turn off our system for that particular courier until they resolved their end (we’re still waiting). Never mind though because, hey at least the other courier’s system was working, right? Well, it was the last time I’d checked but unbelievably on the same day some time in the afternoon, courier number 2 started failing when we attempted to retrieve proof of delivery images from them. After many hours of trying to make sense of garbage data and empty image byte arrays we eventually find out that their drivers had been manually, for want of a better word, “frigging” the data which only goes to prove the old maxim of garbage in, garbage out.
Whilst all of this was hugely frustrating at the time, having to dig in to all the parts that make up the system as a whole actually lead myself and a colleague to discover some problems in parts of our database and our system for marking orders as dispatched which may have well lay undiscovered for a much longer period of time than they did. By the end of the week we’d fixed those issues in our system, and I was able to make many subtle changes to the proof of delivery system to try and shield us as much as is reasonably possible from crap data coming in to us.
When I think of continuous learning and self improvement I usually think about new shiny technologies that I can get a handle on but this week I learned nothing new in that regard. I did however learn to never trust anyone’s code, mine included. I actually enjoyed digging deeper into some parts of our system and getting to the root of problems I know that we can control. I also know that my SQL skills are far too rusty (too long in NoSql land and ORMs before that) and need some TLC. Most of all though, I’ve learned that whenever you want to send a parcel somewhere, be very careful about the courier you choose! ;)
God knows there are times when I’ve felt down about situations at work but you can always take something from every situation. There’s always something new to learn and it doesn’t always have to be about tools or technology. To keep on growing you have to keep learning otherwise you just stand still until eventually you find yourself stuck in a rut or even going backwards. The trick is to recognise when there’s an opportunity to learn something even if at the time it feels like you’re just pulling your hair out (assuming you still have any). Acquiring knowledge of any kind helps build confidence and that’s something important to all developers so, if you want my advice, try to take something positive from every situation. It’ll only make you stronger.