You're dealing with multiple issues here... Let's start with the obvious...
Is This Normal?
Hell no. But... is it common? Unfortunately, yes.
Regarding Bug-Fixing Frustration
While that doesn't excuse the rest of the mess you have to deal with and the multiple projects they overload you with, I just want to make a quick note that the "bug-fix" only approach, while frustrating for you as a developer, can be a perfectly sensible approach for the company and its management.
Surface for More Bugs and Costs
The more code you touch, the more likely you are to introduce bugs, even if your intent is to improve it. That means extended dev time, test time, and costs. And if it slips through to a service release with a medium to high-defect, that's a big mess for them.
Noise / Fog in your Logs
From an SCM-perspective, it also makes a bit of sense if you work directly off a service release's branch, as you want to have a clean view of changes relating to bugfixing. If there are 15 commits with thousands of changes surrounding a bugfix that actually required maybe a 1 line code change, it's a tad annoying.
So, being a new hire, it's even more sensible to ask you to refrain from refactoring and/or enhancing the software, and quite OK in my sense to be as "surgical" as possible with your bugfixes. It just keeps headaches at bay.
Can You do Something About It?
Now, it does NOT mean that there would be ways of achieving both sanity of the code and sanity of the involved people's minds. Being junior, they should have someone review your changes, especially bugfixes, and make sure they are approved before making it to the service release builds. That would prevent or limit radical changes, and be safer.
The Project From Hell
Crap Code, Herd of Programmers, Duplication, Crap Architecture
Again, devil's advocate here, but just showing that your initial request contains a few non-consequential bits.
My point is this: I really really really rarely took over a codebase that wasn't in this state. And on the off-chance that I did, they were recently started projects or prototypes that had been kick-started by pretty stellar programmers. But the astonishingly vast majority of them looked like crap, and a scary number of these were actual crap. Even the ones started by good or great programmers can end up being crap, deadlines and other engagements helping...
Welcome to real-life industrial software engineering!
And you know what's fun? It's often way worse in the web-development world. Enjoy! :)
Too Many Projects & Requests, Not Enough Hands & Time
The problem lies here probably in:
- your management (maybe unconsciously) abusing you,
- your colleagues (maybe unconsciously) abusing you,
- your (maybe unknowingly) not covering your ass and fighting your battles enough.
Your managers should be aware that you are working on too many projects to manage. If they aren't, make sure they are ASAP. Make also sure they know it wasn't all a pick-nick in the park and that you felt pressured, and that it needs to stop.
Try to have a look around and make sure your colleagues do not deflect more tasks and projects on you, directly (by really saying "X will be able to take care of that") or indirectly ("I'm not the right person for this, find someone else" -> ends up being you).
Personal anecdote here: I did an internship a few years back, and just on my very last day, when I got my evaluation, my boss told me, despite being very satisfied with my work overall, that one of the managers had the feeling I had been unloading some "not so fun tasks" on another intern when they would have expected me to pick them up. I was mortified of having them felt let down, and at the idea that I would look like I was slacking off, when my intent was the exact opposite: I was trying to grab the harder tasks and have the other younger intern deal with less hair-pulling issues. Little did I realize that, had I been in his position, I would have been bored by the lack of challenge and probably felt the way he did. The point is, you need to communicate to make sure nobody makes false assumptions about 3 very distinct things:
- what you can do,
- what you want to do,
- and what you are willing to do.
So it's also partly your fault for letting it become this way. But it's normal, it's a lesson everybody needs to learn. It holds in two letters: N - O.
You usually employ it as a prefix for a more lengthy but not so much more charged answer: No, I can't do this. No, I don't know how to do this. No, I'm not sure I'm the right person for this. No, I've never done that.
At first, it's very easy to feel like you can just say "yes, I'll (eventually) do it", and pile things up and get them done, maybe by putting some extra hours in. That's all wrong. You need to understand that your time is, after your skills, your most valuable asset, to you and to your company. If it is misused, it impacts projects, deadlines, and budgets. As simple as that.
Also, it looks a bit worrying that you would have too many people to report to. It's OK to have multiple customers to deal with, and multiple project owners or even principal stakeholders you need to communicate with. But, overall, especially as you're a new hire, you should mostly report to a few managers only (and most likely only your direct manager, and possibly a lead or senior developer). How did it get this way? I don't know. It can be an organizational issue at your company, or it can be the result of you doing a favor and of then being contacted directly, and failing to say "no". Or it can be that your direct manager as issues with dispatching tasks, for all I know (I'm really guessing, but the pattern are recognizable and well-known).
I'd recommend you do the following rather quickly: go talk to your direct manager in person, explain that other managers might be a bit pushy, or (probably less whiny) that you
have too many stuff piling on from too many people, and that you need his input (and possibly theirs as well) to know which ones to prioritize.
180-degrees Change Requests
These are another big issue. They're probably not your fault, but you can try to help them address it.
"180-degress change requests", as you beautifully and acurately call them, are a clear sign that requirements are fuzzy from the get go, and that nobody tries hard enough to have them chiseled and cleared up over time.
That's usually when someone needs to get on the phone (or better, on their feet), and grab stakeholders by the hand and tell them clearly: "that's where we are, that's where you want us to go, do you confirm we're heading in the right direction?". It's OK to not get clear answers at the beginning, but the more time passes, the clearer they should become, or this project is a disaster waiting to happen.
Usually I'd say grab all the stakeholders within reach, put them in a room, drive them through litigious issues and incrementally try to resolve these - and get priorities while you're at it. However in your case, this may not be your call to make already. But you mention they really gave you the responsibility of the projects; so if that's really the case, then do take responsibility and do that. And DO NOT shy away from saying "we CAN'T do that", or even "we WON'T do that". It's really important to limit the scope of a project.
If there's no scope, there are no clear-cut requirements at the end of the discussion.
E-mail Overload
People tend to behave differently based on the communication medium they use. Personally, though I'm a rather soft-spoken person (and have been working mostly in foreign countries, so I also end up not liking to talk on the phone to much), I'd favor in order of preference based on productivity:
- talking to people face-to-face,
- talking to people on the phone,
- talking to people via IM,
- talking to people via email.
E-Mails are nice for tracking, for getting confirmations, for sending notes.
For scheduling, planning and discussing problematic points, they're close to useless. Go knock on the guy's door until he/she opens it and sit down with a notepad and a copy of your documentation to clarify things. Once you're done, then send an email and ask for confirmation. If it comes back with a negative answer or a slightly hidden attempt at sneaking something else in the envelope, go make the siege of your interlocutor's office again.
This is software engineering. It's often more productive when you don't type away on a keyboard, and can actually cut down upfront on the crap you'll need to deal with.
Doing a Team's Worth of Work
Are you doing the equivalent of a team's worth of work? Maybe.
Are you doing the equivalent of your team's worth of work? Probably not.
What I mean is that your team is probably busy working, and you are overworked. And that's the issue: you're overloaded with things that should be pushed out of the current project timelines, or given to someone with time on their hands.
Was I an idiot when I initially expected things to be different?
No; just new to the party. It's like a first hung-over or relationship. You'll get over it.
I guess this post has turned into a big rant, but please tell me that this is not the same for every developer.
This is the same for every developer in chaotic organizations, be them startups or well-established giants, and with no experience or confidence to get things to move one bit to tip your chances of survival on the right side of the scale.
P.S. My salary is almost equal if not lower then that of a cashier at a supermarket.
I did decent salaries on jobs that would appear crappy. It's not the number on the check that counts, it's the context. What you do, your age, where you live and work, etc...
That being said, if you are grossly underpaid, working too much, and not entirely junior, go ask for that raise or get a new job!
It's simple:
- if they value what you do, they'll gladly agree to a raise,
- if they don't, future in this company doesn't look very rosy (for you, at least, which is what matters), so don't feel bad about leaving.
Be aware that asking for a raise is a good thing, even though you wouldn't be enclined to think so at first. It proves you keep track of what you do, and hints that you keep an eye on other option while still being willing to stay onboard. And it's a good thing to get used to request them, as they are like job interviews or bargaining in general: it's something that requires practice, and they don't fall from the sky if you don't reach for them yourself. Some companies will distribute raises regularly without being requested to, but that's only because they are clever enough to know that it keeps you half-happy and less willing to change, and they want to cut the grass under your foot (most people would feel a bit uneasy about upping a raise offer they've been offered directly).
How to proceed with this request is a bit out of the scope of THIS project right here, so I won't go into the details. But I'd recommend you prepare a record of your SCM commit IDs, of your fixed bugs and achievements, and that you also prepare reports comparing them to the team's overall effort. This way:
- you can measure for yourself if you effectively did a lot more than your peers or not,
- you can stand your ground if they say your request is not justified.
72As I see major problems here is underpaid salary (this hits motivation real hard) and multitasking - 7 projects to support and 2 new projects to write sounds really awful to me. I suggest you need to discuss both those points with management to find a solution which allow you feels much less exhausted and demotivated. – artjom – 2012-06-12T07:15:24.503
84
I can totally relate. Maybe this cheers you up a little (my daily work): http://i50.tinypic.com/j8ipvp.png
– Dante – 2012-06-12T07:37:18.4876@John Nevermore 3k+ lines classes makes me soooo sad :) – artjom – 2012-06-12T07:58:42.853
1510% new development? You're lucky. But it doesn't sound like that's the real issue. – Michael Borgwardt – 2012-06-12T09:23:26.250
@JohnNevermore that made my day a little better(tip: don't imagine that code in VB.NET, oh wait it's too late x_x) – e-MEE – 2012-06-12T09:32:12.037
@JohnNevermore I once handled a 9k line Cobol program. 3k line java is nothing. Most of the code are unreadable. – lamwaiman1988 – 2012-06-12T09:45:08.187
207I'm still waiting for someone to say, "I just started working at this company and took over work on this existing application, and it's really cleanly coded, easy to understand, and a breeze to make changes to." I don't think such a thing exists. – Scott Whitlock – 2012-06-12T12:15:52.727
2Let us know how things improve. i think a lot of people could benifit from your experiences in this instance. hang in there pal – ldgorman – 2012-06-12T13:24:52.250
102@ScottWhitlock - It happened to me once. I was asked to make changes to a fairly complex codebase. Halfway through my task I realized that the code was at a level of clean I'd rarely seen. Responsibilities were clearly defined, the logic was easy to navigate. The coder who wrote it had gone the extra mile to make her system maintainable. As a result, my fix took about half the time I was expecting. I promptly went to management and sang that coder's praises, told them she was a better programmer than she had been given credit for, etc. – rtperson – 2012-06-12T13:28:05.073
1
@JohnNevermore At least you don't have to work in VB.NET with a 15,000 line class. http://oi50.tinypic.com/rusenn.jpg
– ROFLwTIME – 2012-06-12T14:25:40.4072@TiredProgrammer, Are you the only developer there? If so I would suggest maybe finding a place where you'd be part of a team. Software engineering and development can be a lot more interesting there than by yourself :) – Svish – 2012-06-12T16:14:01.637
2@JohnNevermore there are better ways to code that. Refactor it! If you can't figure out a way, there's a Stack Exchange site for that. People who tollerate bad codebases are as bad as those who write them. – Bill K – 2012-06-12T16:17:38.003
I swear we've had this exact sort of question before...don't see such a question in the related list though – Ben Brocka – 2012-06-12T18:26:45.187
@ScottWhitlock I can also confirm it happens, though I think it may also be a relative thing. If you're used to seeing awful code and someone presents you with code that's maybe not super-clean, but at least well-commented, tested, and works as intended, you may find yourself feeling quite positive about it. – Bob Aman – 2012-06-12T19:20:53.073
141"My salary is almost equal if not lower then that of a cashier at a supermarket." - Find a new job and give them your 2 week notice. Being paid min wage is crazy. Do NOT accept a wage increase at this to company they do not appreciate you. – Ramhound – 2012-06-12T19:57:40.940
3@rtperson I try to write such code and sometimes just for the fact that I'll feel really happy if someday some programmer working on my code really feels grateful about this and drops me a thank you mail. But nobody did it so far :( , so I have doubts about whether I do a good enough job. – Optimus – 2012-06-12T20:03:35.343
8Look at getting some kind of ticket system (Jira, Mantis, Bugzilla, etc). That will greatly help you keep track of bug reports and change requests. You can have a definitive list of open tasks and you can be sure your business users agree that a task has been closed when you are done on it. You can also use this to demonstrate how many small requests you deal with and show your current workload. – MightyE – 2012-06-12T20:48:36.917
@ScottWhitlock I wanted to tell you that about 6 years ago I joined a team that worked on a specific product which was not only really clean coded, but also very sophisticated and smart, easy to change/add behavior and to sum it up - a pure pleasure! – alfasin – 2012-06-12T21:33:21.877
@TiredProgrammer Are there other developers there or are you the only one? – hafichuk – 2012-06-12T22:48:19.273
1You should mention if you're at a software firm, or a company where software is supporting their main business. In both cases it's a mix, but in the latter case, the support burden is generally higher. It's also higher earlier in your career. That said, nobody can put you into the job you want better than you - if the pay and work sucks, learn what you can and go somewhere else. Life's too short, and you have marketable skills. If you were a comparative literature expert, I'd say suck it up. – MathAttack – 2012-06-13T01:48:32.610
8"My salary is almost equal if not lower then that of a cashier at a supermarket" = you are getting screwed. And based on the quality of previous code, I'm guessing other's have gotten screwed before you. – DA01 – 2012-06-13T01:57:20.567
3Leave. Why waste your time in such a crappy situation when there are thousands of high paying jobs in other places!? – rburhum – 2012-06-13T05:48:12.963
1IEEE (SWEBOK) says that in maintenance projects, your effort is almost 60% in just understanding than actually implementing any thing for real. – Zenwalker – 2012-06-13T17:14:57.387
Entry level to senior, most jobs consist of working with horrible code. – lucian303 – 2012-06-13T23:27:31.263
There is a lot of long answers but the thing I don't understand why are you trying to justify your discomfort with the opinions of other people. – Nek – 2012-06-14T05:19:31.887
I see people have given some good points already. My two cents: fight for your right - if you see a possible long-term gain by refactoring code then tell them. Make them understand it's good for the company in terms of maintenance cost, bug fix reduction and potential gains in development. I'm sure you can think of more.. :) also, you should consider introducing a task management system which you and your company uses to assign and administer your tasks. Good luck:) [i would've written an answer but need rep on programmers.stackexch – kjetilh – 2012-06-14T07:08:16.540
I would hire you and you could work from home to if you want. Just quit. – CharlesS – 2012-06-14T13:27:47.360
When did you start? Sounds like the job I left in early May, hopefully you aren't my replacement! – Jetti – 2012-06-14T18:06:59.833
This question is not about salaries. It is about whether or not the job of a programmer includes maintaining code, and if it's a reasonable expectation that it makes up 90% of the work of a programmer. The answer is definitely yes, programmers maintain code. If TiredProgrammer wants answers about management or salaries, he should ask about that. – jhsowter – 2012-06-15T03:22:09.660
As someone in their first programming job, the best thing I have done is work with management to create a bug tracking sheet (in Sharepoint), a change request form, and a reasonable development process that requires sign off from key people, testing, and requirements gathering. It's best to create a first version of these and iterate on them until they work well for everyone. Admittedly you probably need receptive management for this. – MattCan – 2012-06-15T05:16:27.710
"My salary is almost equal if not lower than that of a cashier at a supermarket." - is this common in the programming industry? – Andrew Grimm – 2012-06-19T08:40:18.683
@AndrewGrimm only if you are junior, its your first job eg a school leaver. Uni grads would get double what a cashier gets on their first job, if not more. I am in the uk. – NimChimpsky – 2012-06-25T12:01:51.633
@TiredProgrammer It's definitely normal that you have to maintain code, and quite a lot of it. Most of programmers' jobs require a high level of maintenance and a relatively low level of research and innovation. Although improving existing code would pay off in the long run, such practice is frequently rejected by companies as they don't see value in it. It's the Programmer's job to evolve and be able to communicate the benefits of the suggested improvements so that the company accepts it. In short, you can make your life easier, but you must show your employer what he's going to get from it. – Diego – 2012-07-29T21:52:00.207
Can't believe how many upvoted answers happily tells you that yeah-you-don't-always-have-what-you-want-in-life-yada-yada.
So :
One good bit of advice would be to learn to identify and articulate exactly what makes the code bad. You will learn the most from your experience if you o this. – ardave – 2012-11-21T09:00:21.493
1better to quit this job.. working with smarter people than you & good environment is important at your first programming experience – Sungguk Lim – 2013-01-01T00:09:42.083
@sunglim where can you find such cases? It is sad to get into company where top devs say
"I don't know Perl/etc"when the real problem is that they do not know basic Unix file permissions or similar basic thing, a bit frustrated. – hhh – 2013-05-18T21:47:03.103@TiredProgrammer This is completely normal for an Entry Level Programmer. But, with all the experience you have now, that no longer describes you. You could go to management about your your pay, but they hired you at that rate for a reason. And, it's been worked on by many others for the same reason; they don't want to pay for good development. Its probably time to leave for better opportunities. Unfortunately, that is how you usually advance in your career. – L_7337 – 2013-12-07T04:05:00.440
For all those telling you to put in your 2 weeks notice and get out of there, well, I'd say to not be that aggressive. I've got numerous programmer and IT friends that can't even get back into the industry right now. They'd kill (probably not literally, but I dunno, some have been out of work for a couple years now) for even cashier level pay at this point. Don't leave one job until you've got the next one in the bag. – Brian Knoblauch – 2014-06-20T18:48:44.587