I'm a newbie programmer in a troubling situation and wondered if anyone knew best practices for dealing with this type of project management problem.
After a rough job-search, I finally found a contract job to port an arcane system from an old OS to a new one. I was up front about having little proficiency in the languages and systems involved, but by demonstrating sharp thinking, determination and analytical skills in the test interview I got the job. A project manager even told me I was hired precisely because I had no preconceptions about the "way things should be done", and could adapt to their "way of doing things".
So, I went into the project excited, and was asked by the tech lead (the only person I directly report to and work with) to start looking through the manuals and original code for the system.
Well, I started looking... and it was vast. The manual was voluminous, the system complex, and the code running for hundreds of thousands of lines. I was immediately struck by the enormity of this task. It was clearly a system designed and built by a large company over a period of years, modified many times since. One year and only two people didn't seem nearly sufficient for the needs of the work ahead.
I asked the lead his thoughts on the original code, and surprisingly, he didn't seem to have looked at all, and didn't intend to. I asked him how he knew this task could be done within a year without even knowing what the system already does. He told me he had seen the system in operation once before, and it looked pretty basic and straightforward to him.
I know with certainty he's a highly intelligent, sharp, fast and skilled programmer, as I had the opportunity to look through and analyze code he had already written. So I thought that his confidence was somewhat reassuring, and maybe he already had this whole project figured out. So I decided to ask him what kind of design he was thinking about overall... and his answer was that we would just start coding different parts and kinda fit them together.
This immediately sent up red flags for me. So first there wasn't any thorough analysis, and now there wasn't even a design. How could we even know what parts to code, or that our parts would fit together? How can we communicate progress to stakeholders without knowing what and how much work needs to be done? I asked if there was a project schedule... and he said he had submitted one, but not to take it too seriously, he considered it a "loose guideline". He showed it to me, and apparently we were already well behind on what he had communicated to management.
Okay, I thought, I was told I was hired because I had no preconceived notions, and wouldn't be a "no, that can't be done this way" kind of person. I figured it was just a quirk of this new workplace I needed to adjust to.
Ironically, project management held a meeting a few days later, to discuss the scheduling of a big design review with major stakeholders. The project schedule that was once a "loose guideline" was now suddenly a concrete baseline, and my tech lead was visibly shaken and tried to get a later date, and now management seems suspicious and concerned.
What should a person in my position do? I had a difficult time finding work as it was, and if I do well in this job I might get future work, or at least good references if I move on. So of course I don't want to get on the bad side of the tech lead who hired me, but I've tried talking with him and he only seems interested in coding now and worrying about everything else later.
Should I air my concerns with project management and risk getting my tech lead and only co-worker on this project into trouble? Or do I just work even harder to make up for it? Or should I trust my tech lead and not worry so much, and let the cards fall where they will? I'm new to all this and facing many mixed messages, from outside and inside, and have no idea what to do. I think there's a phrase for this environment: cowboy-coding. Thanks for any help!
Edit: I'll add more details here:
- I've only been working at this company for little over a month so far, mostly reading through system manuals, analyzing code, learning as much as possible about the languages and tools we're using, etc., to get familiar with the project. Right now I basically ask my tech lead what I should work on, he thinks about it, and then sends me off to do things. For example, he might say "get familiar with such'n'such versioning software", or "find a good library we can use for network communication", etc.