Junior dev with boss who hacks exclusively - should I leave?
I have been working in my first programming job for the last few months. The only other developer in the team is my manager, who had previously been developing on his own for a number of years.
The code base that I have been working with seems to be of poor quality. The system that is in place makes very frequent use of public static variables, "God" objects, switch statements on hard-coded strings, magic numbers, copy-paste code, large patches of commented out code and empty catch statements. Database access, business logic and GUI-related code can be found in the same methods. Variable and method names are frequently confusing and inconsistent. Class and package names are often the default that are created by the IDE. Despite the system being relatively small (an estimated 10, 000 - 15, 000 lines of code), it is difficult to understand how it works.
We have no unit tests, little requirements documentation and no coding standards. We have version control but the only comments attached to commits are my own. Sometimes a new release is built and deployed before the code is committed. There is a single trunk and no branches. There are no tools or procedures in place for releasing the software to our in-house users. Instead, we rely on copying the binaries from the development machines and pasting them into the user's file system. Various exceptions are thrown on a daily basis in the live software. Debugging is difficult, not only because of the extensive modifications to public static variables, but also because about half of the code cannot raise sufficiently informative exception messages and cannot be "stepped through" with a debugging tool.
My manager, by his own admission, does not like designing or planning and prefers to cope with various crises as they occur. However he appears to get frustrated when he cannot find out the reason for software faults. This is happening more and more as changes are made to what I see as an extremely inflexible system. Curiously, when there are no fixes required or direct change requests, my manager does not seem interested in working.
I feel like I am learning how not to do software development. I believe that planning and object oriented design are important for creating maintainable and reliable systems, as are the use of tools such as automated testing and release management. I think that the system needs to be severely refactored or rewritten so that it is object-oriented. It should also have a suite of automated tests. There are plenty of other aspects of the system which feel dubious to me, such as the database queries and schema, but I'm not yet sufficiently knowledgeable about how to improve them.
I would love to be able to implement my ideas for improving the system. But I am inexperienced and I feel that I would be working against my manager. For example, I believe that he has little motivation to learn about object oriented programming or unit testing. I want to contribute to the company, but for a third of the time there is apparently no work, another third of the time I am guessing about what has caused an error, and the remaining third is spent tentatively making changes and praying that there are no knock-on effects.
I am tempted to leave, but I don't want to appear like I'm giving up, and I want to show that I've contributed in this role.
Do you think I am being over-sensitive because it's my first exposure to production code? Do you think I should stay and try to implement improvements? Or do you think I should hand in my notice before I pick up too many bad habits?
Advice is greatly appreciated. Thank you.
Re: Junior dev with boss who hacks exclusively - should I leave?
I'm not a software pro, but your situation sounds absolutely horrific. My guess is that you're not likely to be able to change him, at least not all at once, so your main options that I see are either to adapt yourself and work best with him as you can making incremental improvements in the code base, and maybe with time you'll be able to convince him of the utility of good software engineering, one small part at a time, or option two is to leave. If you're new to any profession it would be nice to work somewhere where there's a mentor, someone you look up to and who can show you the ropes, and you're not going to find it here. :(
Caveat: Again, I'm just a hobbiest, so let's see what the pros have to say, those who have worked on software teams. Best of luck, and I feel for you, I really do.