“Tell me about a time when you ran up against your own brick wall, and how you worked it out or dealt with it.”
Gather around for story time as I relate a story from the field.
Prelude – Hard Times Coming
If you work in our field, your career will likely be filled with hardships. Working with software has its perks but can be very demanding. It isn’t until you have been around the block (worked at many places) that you realize there is no floor stopping us from dropping lower.
Things can always get worse. You likely won’t be told this in your first entry level job. However, as you progress your career from the ground up you find the problems are a little different. The challenges are less about learning new things like in school but in dealing with the hardest engineering problem known – dealing with people.
People Are The Hardest Bugs of All
Sure there will be many programming challenges over the years but I bet you won’t rate any near the top – that spot is reserved for the bad managers, difficult coworkers, and unpleasant people you will have to work with. There is no escaping office politics and bureaucracy – these are a part of being human and you will find this everywhere you go. The real question is how tolerable is it and what will you do when faced with the situation.
People issues will accompany and amplify any project you work on to the point where the overhead is higher than the technical challenge.
Cursors with Spaghetti
I can illustrate several obstacles and the different ways I overcame them with this story. I used to work a position where I was the responsible developer for a big project. A developer had left and I took their job.
When the initial handover was completed I knew there were a lot of coding horrors to vanquish. There were cursors everywhere. Cursors have their place but are often misused. The people notorious for this are non-database programmers. They are used to handling data their way and not in a set oriented way that a RDBMS will like.
There were several thousands of lines of code that made up this mess. It was spaghetti code. To give you an indication of how bad it was – I actually came across GOTO statements in the control flow! Edsger Dijkstra would be rolling in his grave. This long convoluted process also had no unit tests. I had to create them because if you don’t test or know what you are testing for then how can you trust it is accurate?
As if it wasn’t bad enough to unscramble and refactor spaghetti code with cursors everywhere, the people issues made it much more difficult. It was one of those companies that has this military style attitude. I assume their motto was:
This is going to hurt and you are going to do it anyway. Now hurry up and wait!
The project had a lot of visibility and impending deadlines so there was a lot of senior management oversight. Their presence ranged from indifferent to ominous – like how ancient people must have seen Greek gods. The climate was like a dog who had been hit and sees the hand raised again i.e. people were afraid to do anything other than try to be as visibly busy as possible.
Usually when you work as a developer on a project you experience the joys of Matrix Management. Simply put it is the authority over you by multiple cross discipline managers all trying to be the ones to carry the football into the end zone. Do you like having multiple bosses to keep happy? Then you will like matrix management.
I have worked with many project managers over the years – some better than others. The PM for this project was in too deep and didn’t know what to do, how to motivate a demoralized staff, and how to turn this around before we ram into the iceberg.
Lastly, the business process for change management and release management were quite involved. They were difficult to the point where it was hard to get the job done.
How I Overcame
With all that adversity how did I overcome? Well I am still here but each of these leaves scars over the years.
I overcame the programming part ultimately by throwing everything out and starting from scratch weeks before the deadline. I’m not proud of this but desperate times call for desperate measures. It wasn’t my first response. I tried for a long time to get the software into a working state and there was bug after bug and problem after problem. It was then I realized it was rotten down to the core and the only solution here was
holy water and garlic to destroy and rebuild.
Overcoming the management was best done by trying not to let them notice you and if they do point them in someone else’s direction pretending it was the bigger emergency. I am a proponent of writing everything down. Email is an excellent option to document your doings – especially when send to a distribution list. In a place where everyone was trying to CYA this was a vital skill to have.
The project manager was difficult but I got through that by building some trust and tasking them with keeping people from bothering me while I scramble to get the code right.
Lastly, the job as a whole was an obstacle too because of the toxic organizational culture. How did I overcome that one? I left for a better job with significantly higher pay, better working conditions, and future potential. I don’t recommend this as a first action but sometimes when things are so bad and the writing is on the wall it is best to jump ship while you can. There is no glory in a sinking ship.
Do you feel bad after reading this? I do so here is a picture of my cat to cheer us up:
Thanks for reading!
If you liked this post then you might also like: T-SQL Tuesday #104 – Code You Would Hate to Live Without