Early in my IT career, starry-eyed and naïve, I landed a job that put me in a terrible situation -- and I made a few mistakes myself. At least I can now say that I'm older and wiser to the ways of the tech world.
About six years ago, I was contacted by a temp agency with news that I'd landed a job at a small software development company. I was slated to handle a short project first, then move to a larger one with a chance of permanent employment. The agency sent me the contract to sign and told me where to report for work. At this point, I hadn't interviewed with anyone from the temp agency or the company, and I didn't think twice about it.
On the first day, I discovered that the company was located in a converted family home in a suburb of a large European city. I was greeted at the reception desk -- smack dab in the entryway -- by my project manager. He led me past the living room/conference room to another chamber that was so packed with worn-out office furniture and my new colleagues that each workplace was smaller than 10 square feet.
My task sounded easy. The company had one customer (the second red flag I missed, if you're keeping score at home): a financial institution that had tweaked its corporate look -- most notably, a lighter shade of its chosen color. The external design agency had already updated the templates for the Web application. I was to implement the new templates in the legacy system, one of many apps the company had designed and developed for this customer.
It seemed simple, especially when the project manager confirmed the system's MVC (Model-View-Controller) structure. I assumed the task had been handled adequately and I could switch out the parts quickly, without repecussions for the rest of the software.
He then asked how long I thought it would take to complete the task. Thrilled by the job and foolishly expecting no problems, I told him a couple of hours, including settling in. He was glad to hear this and left me to it.
Then the unpleasant surprises began to surface. I first suspected that the software was not structured when I looked at the new templates and found that they were different from the templates in the system. Then I noticed that parts of the old system interfaces didn't come from the old templates, but were mixed into the Controller, which is meant to prepare data, not format and display it. Then came the realization that the new templates didn't match the old ones at all and had been entirely redesigned.
As I uncovered these problems, I started to get to know my co-workers. What I heard didn't make me feel any better.
They told me about my predecessor. He had worked alone on the system, designing and building it by himself for eight years. Out of the blue, he quit his contract and left immediately. He didn't even take the time to document or hand over his software project. As the story went, he was last spotted at the airport with a large backpack and a one-way ticket to a faraway country, with no way to communicate with him.
In his absence, I found that the software he had designed, built, and deserted was not one system, but three. They were separate in coding, but united in appearance to the user, and they didn't share storage for keeping the users' data in memory.
Whenever a user's tasks required switch between systems, the user saw a screen with a message along the lines of "Thanks for your input, please click this button to continue." Behind the scenes, the sending system created a form, invisible to the user, and transmitted it to the user's browser. Upon clicking that button, the user would submit the hidden data to the receiving system. The trouble was that the redesigned templates asked for those intermediate screens to be removed. Thus, I had to build tunnels into the systems, so they could talk to each other.
Rerouting this information through the database wasn't possible: There wasn't just one database connected via a wrapper, but two databases intertwined among three levels of software. And normally the wrapper wouldn't know the structure of the database to make it easily exchangeable, but these three did. Any addition to the databases' structure required changes to all the wrappers.
I dealt with it by adding a fourth system and dedicating it as the one all systems turned to for session data -- but all activity ground to a halt. In implementing the fourth system, I had corrected the output of one class (software component) that was erroneous.
I soon learned that the erroneous output was going through other classes that fixed the output -- actually, several classes, depending on the origins of the class first mentioned. Each fixed the erroneous output in a different way, based on its intended usage.
I tried to track down where this class was called from and who expected what of it. But it was impossible to tell because there were so many places. Instead of fixing it, I made a copy, corrected the copy, and used the correction in my design -- never again touching the original.
From bad to worse
I hadn't given my project manager any updates (another mistake), and he hadn't asked for any. After three days I dug myself free and informed him I might need another three days.
He was not pleased. Based on my estimate, he'd put in a contract for six days and planned on the project taking a fraction of that stretch. He'd also notified the customer that we'd complete the project faster than expected and calculated a bonus based on the free time for which we'd bill the customer. Already informed, senior staff were expecting this windfall.
He ordered that I finish the project, then dismissed me. I wasn't given an opportunity to explain myself -- or a second chance. A week later, I found out through the grapevine (nobody talked to me in person) that I wouldn't get a follow-up assignment. I was to leave as soon as I finished.
The temp agency must have heard the same. Before, it'd been quick to communicate and eagerly promised follow-up assignments. Now it went silent except for a registered letter severing future contract between us.
At the end of my last day, my soon-to-be ex-colleagues readied themselves for a holiday party with the customer. That software was live on the customer's site for some years after, unchanged, from what I could tell. I wonder if the customer ever learned or even cared what lurked under the hood.
I moved on to a much better job with a better sense of how to manage expectations -- and an eye for red flags.
This story, "Congrats on the new job! Please disregard all the red flags" was originally published by InfoWorld.