3

A bit of context (and sorry for the bad English and the wall of text). This also contains a fair bit of me ranting as well. I'm very sorry. TL;DR at the end.

I'm currently employed in a relatively small company in Japan as a software engineer, which is not related to the company's main business.

Initially I was hired as a mechanical engineer, but was requested to work on the company's management system, along with another, who was hired alongside me, very shortly after joining. I do have some formal education in software engineer during uni, but I primarily worked on embedded system (my major was Mechatronics). My partner was a bit better, he has experience working in an IT company for a year as a Java developer. Still, not looking good. However, we were assured that we would be working with a senior, one who has worked on this for years, who will guide us on this project. Note that, this was back in 2020 when COVID was at its worst, we were basically stranded here. We only had just came to Japan as well, so the chances that we can get another job at that moment, while not non-existent, is very close to being so. Left with little choice, we accepted. I mean, how bad can it get, right? Well...

It turns out that the "senior" that we are supposed to be working with is in fact, just a contractor, whose main job is to maintain the old system (by old I mean, really, really old. Basically MS-DOS-based, barely any interfaces at all), and as a side job on our manager's request, re-implement the thing on to a more modern one. Contacting him was really, really hard, as he only worked on our project very late at night. There are multiple occasions where we had to contact him via Skype at 10pm (and apparently since these are all done at our home, they do not count as us working overtime, despite being organized by my manager). As a side note, apparently in his book, a modern system translate to Excel VBA. He also did some PHP pages as well, mainly to do some fast info querying. Nothing too complex, although he took his sweet time doing those, sometimes months to get a single screen done. But...

His work quality is also extremely appalling as well. Unreadable code, extremely un-optimized, and ridden with mistakes/bugs. One of our first jobs involve figuring out why one of his programs took ages to fully ran (more than 1 hour in some cases). Turns out, calling SQL queries within multiple nested loops is a dumb idea, who would have known. Worse are his PHP pages, which are just some structure-less, convoluted mess of PHP and HTML, also apparently he didn't know any CSS and JS, at all. Also, no documents whatsoever. There was even an occasion where instead of updating the stock of a specific product, he accidently update ALL product stocks, after which he has to manually re-update all of them back. This was told to us by our manager, supposedly as an encouraging story by the way...

And for some reason, the company was fine having this guy designing their database. I think only in our company can you see 6-column tables having a 4-column composite primary key. Other than that, the usual symptoms of bad database design, tables with no primary keys, no indexes, no foreign keys, inconsistent table, column name, etc., you name it. The data itself is also inconsistent. Apparently trimming and convert primary-keyed strings into consistent format before inserting are not a thing in his dictionary. Numeric values being saved as string in a table but as numbers in others. When we suggest that these things are not ok and should be fixed, he said that all of his old stuffs are using those so he can't and won't fix them. Clearly he doesn't care.

You are probably wondering why I'm spending so much time talking about this guy. Trust me, this information would be relevant later.

So basically most of our jobs involves cleaning after his mess. We ended up making a simple Express-JS React web-app, covering what the guy did before. The supposedly gargantuan 1-hour task now takes only more than 1 seconds, UI upgrades, etc. We also fix all the problems with the database that we can fix, replacing tables with no primary keys, fixing data inconsistencies, etc., but eventually came to the conclusion that the thing is unsalvageable, and after discussing with our manager, we decided that it's time to make our own. The first step of that involving mainly me figuring out how the new database would look like, and my partner who is more familiar with tech-stacks to figure out the framework we would build this onto.

This was probably my fault, but during this period I voiced out multiple suggestions about changes to the database, which caught my manager's attention. Meanwhile, he heard nothing from my partner, so he assumed that my partner is somehow free at the time. This is pointed out later on by him, which I regretted a lot. That is because, due to this, he figured that since my partner is not doing anything, and apparently since I was so capable, he can just assign my partner to a different job (read: manual labor). It's not that doing manual labor is a foreign concept during our work here in the first place, we were asked to do these work whenever there are too much work, and to be fair during those time even the middle-level managers join in as well. But this is not that, it's a full on transition from working in the office to full-on labor. And of course, mainly due to this, he quit. This was 2 months ago.

It was during this time that my initial design of the new database was done. It took me 3 months doing this, I did a lot of self-education and research for best practices, however, with me just joined this company for just almost 2 years at this point, there are a lot of business logic that I don't know/confident of getting right. So I consult my manager, hoping for more people in the company to join in on the design. It turned out terribly, nobody want to work on it, so final verdict was for me to figure this out myself. I don't think that kind of job is something someone like me can do, I voiced my concern, and ask the company to at least hire someone more proficient in the field. The thing is, my manager told me that, at an unknown point of time, he consulted that guy, multiple times already and the guy said that this is something that I can do. All of this is without me knowing. Now that this idea is ingrained in my manager's mind, he insists that I continue implementing this project, despite my protests, even cleaning out my full schedule and cancel my other side project, of which I also spent a significant amount of time on.

I know that it is not advisable to talk badly of my co-worker, but at this point I had enough. During one of the recent 1:1, I talked to him about the mess me and my partner worked worked our asses of to clean up, how out of all people he is the last person to consult to when it came to our job. And can you guess what he said to me? "At least he can tell me that he can do the job I give him, unlike you". At that point I was this close of screaming out.

For obvious reason, I can't really continue working on the new system. And since little to no work came to me, I just self-educate myself of related tech in the meanwhile, and go home on time. My manager doesn't like that. A lot of 1:1s recently just revolve around this, about how I apparently lost my initial enthusiasm and what-not. I really don't know how to respond.

I'm brushing up my CV looking for a new job. Worst case scenario, if I can't get a job in Japan until the end of the year, I would be going back to my home country. I feel bad abandoning ship, but I can't take it anymore. But while I'm still here, I don't really want to strain my relationship with my manager further. Outside of work he is a nice guy, and has helped me a lot during my stay here.

TL;DR: Circumstances leads to my boss insisting me of doing a project I'm unqualified on. How do I resolve this?

Edit: From the provided answers I can see that some people are having some confusion regarding my situation, due to my original extremely rambly post. I'm very sorry for that. Here are some clarifications:

  • In 2020 me and another guy (let's call him T) joined this project under the management of, let's call him M. I have no problem with T, in fact we made a very good team, at least from my point of view, and even as of now we still chat with each other from time to time. The one who quit was T.
  • The "senior", S from now on, is still working with our company. He was a full time employee in our company (for a presumably very long time), until 10 years ago. S's main job was to maintain the ancient DOS-based system, and as a side job, under M's request, re-implement the old system into a more modern one (this is now delegated to me). Possibly due to his seniority (technically if you count his contract job, S would be M's senior), his opinion is very respected.
  • It was under S's advice that I have been put to my current situation (this is confirmed by M) and possibly M's decision to switch T to the other position, leading to T quitting (this is my guess, but extremely likely).

So my current situation is:

  1. The people working on the project is now reduced from 2 to 1. I also have to continue handling T's previous work, well supposed to anyway.
  2. M insisting that I continue the new project, and refuses to except my reasoning.
  3. The very first step of database design was met with set-backs, as, from M's words, no one in our company knew anything about data analysis, which I find extremely unlikely. The future system is supposed to handle most of my company's finances, in place of the DoS-based system as well, obviously well beyond my ability and paygrade. Also, just my assumption, but this is most likely the case, that this is also way beyond S's depth as well, he doesn't even have the basic of database design and program algorithm.
  4. Attempts of getting M to hire data-specialists have been unfruitful, with him constantly switching subject whenever the problem was mentioned.
  5. I don't think this is too relevant to my predicament, but still a very interesting fact: T's current pay under his new company is now literally double mine, which, good for him, he very much deserves that. On the other hand, S's pay is roughly triple that of mine. I don't mind this way too much, as I'm living in the suburbs alone, so my monthly costs is not that high. Still a thing to keep in mind, especially when the price of yen is still dropping.
0

5 Answers 5

3

What you're describing is a common issue.

You're looking at this situation like, oh, they're hired this guy to do HTML and JS and CSS and PHP work, and he's unqualified! He doesn't know what he's doing!

In reality, it sounds like he was hired for one job, perhaps maintaining this very old system, and then as happens in IT, many many many additional things were lumped onto his plate.

At some point, someone asked him if he could write a page in HTML/PHP, and as he was an eager younger lad at the time, he probably said "Sure thing!" trying to over-achieve.

Then the next time they needed something... suddenly he was the guy managing that page, and they gave him another. and another. etc.

All of this and other things while he has his main set of responsibilities.

Low quality spaghetti code is often a sign of someone being tasked with work they weren't originally hired for, and who hasn't been given enough time to actually organize it and make it look good.

There's no company that will give you enough time to actually beautify your code and write up documentation for it. It's horrible. Ideally, you can include time to document as you set expectations on deadlines, but more often than not you get a manager who's pushing again and again for a deadline you can barely meet, while also asking if you can handle this other request.

This is a topic that comes up quite often here on Workplace stack exchange.

Your situation, unfortunately, is one of the more tragic ends to it.

The manager's words summarize the reason the other guy's poor quality work was tolerated - when they asked him to do it, he was at least able to get it done, even with poor quality code, and even if it took a LONG time for him to fit it into his schedule.

The reality is, there are some Very competent developers in the market, ready to be hired. However, if you were to just hire the greatest Java developer in the world, they'd still have no knowledge on day 1 of how your business is set up. How your applications are designed, what your databases look like, how your API's are structured, etc.

It's that other guy's organizational knowledge that is so important here.

This is sadly a lesson you only realized after he was out the door.

So, what now?

If you're interested in keeping this job, there's very little you can do at this point.

You can try to salvage the project - Really, muster up that enthusiasm, break it into steps, identify the areas you think you will struggle with, lay those out to your manager as items you may need help with, and work on them the best you can. Show progress with periodic updates on how it's going.

You could also tell your manager - This is a failed project. It's my fault - I have done the classic naive developer move of looking at existing work, and bad-mouthing how low-quality it looks as far as software development standards go, without understanding the reasons why it was that way and that the developer had important organizational knowledge and did the best he could with the time and resources available.

This depends on the project - If it's something that can be scrapped, that 2nd option of letting them know it's failed may work. If it's actually extremely important for the organization - Who knows. I suppose you're still there? There's not much use in firing you just to replace you with someone who has even less org knowledge than you.

In conclusion... Sorry to hear your situation. I would suggest letting your manager know that you've screwed up this situation and you believe it would be best if the organization tried to re-hire the old developer, even if it was at significant cost. Maybe tell them you'd be willing to personally apologize to the other guy. Who knows, he may come back, or maybe could come back for a few months to transition if the pay was right.

3
  • 2
    What evidence do you see that the other guy had important "organizational knowledge"? For example, he's only a part-time contractor, not core staff. My reading of OP is that he's simply a yes-man, and that's sufficient to satisfy this manager. May 30, 2022 at 15:02
  • I don't know if it's appropriate to edit my original question, but, even as of now, that guy is still employed as the maintainer of the old system. From what I gather, he used to be a full employee in our company until 10 years ago. Lots of things has changed since then, business logic is no longer the same. So even on the organization knowledge front, he doesn't know much either, as there are numerous erroneous details in his design of the database, leading to hours of (unnecessary) overtime. So yeah, there's that.
    – randomguy
    May 30, 2022 at 23:27
  • It is possible to reconstruct business logic from bad code, and rewrite it better. But that requires experience. But I've seen plenty of examples of bad code that weren't saving anyone time, but simply a result of bad programming. Lack of expertise, talent, education, all of the above. So while I appreciate the devil's advocate idea, I wouldn't sign up to "the guy has organizational knowledge" necessarily. I've seen places where people produced this kind of crap and - surprise! - still didn't know what they were doing years later
    – bytepusher
    May 31, 2022 at 14:48
3

It sounds like your previous colleague is exacting his pound of flesh. You complained about him, so he built you up in management's eyes.

You also learned several things about the business world.

Every last working business application, if it were handed in for credit, would get an F, including the internet.

Another rule of thumb: ALL CODE SUCKS. Often times, people quit, and untrained and unskilled people will patch things together. In my own case, our C++ programmer quit. I had taken a class in C a few years prior. I was suddenly the expert because I knew more than anyone else on the floor.

Crap code continues to exist because of tight deadlines, old systems, unreasonable demands, people quitting, emergency patches that the poor overworked programmer doesn't have time to fix, and so forth.

You could hire the worlds best programmer, and STILL end up with crap code, because of institutional idiosyncrasies, incomplete specs, (Oh, we forgot to tell you about that. You should be able to fix it no problem).

Bottom line, the better programmer is the one who gets things done.

Either suck it up and find a way, or move on. perhaps with a bit more wisdom knowing that there are reasons for things being the way they are. and rather than work against your coworkers, you should work with them.

2
  • 2
    It's true that all code has "issues" (shall we say), but some code really, really, really is unusable. So I don't think you can put all code at the same level. I inherited some code at my last job that was some of the worst I had ever seen. At one point I remarked to a coworker (not a programmer) "it's like this guy was stoned when he wrote this". My coworker looked thoughtful and said "yeah, that would explain a few things".
    – DaveG
    May 31, 2022 at 15:51
  • 2
    @DaveG Oh, I know that there is crap out there. One thing I fixed was a program that took 10 hours to run, and completely crippled the machine it was running on. It was so bad that my first half-assed attempt, not even two months into the job, brought it down to 6 minutes. But, again, there was a reason. It did the job well enough for small records, but as the company grew, and records ballooned from 500 to 25,000 it grew exponentially slower. It was written by an intern. And that's the point. I have been doing this since the 80s, If I could rewrite all my code, I would. May 31, 2022 at 17:19
1

You seem to have the impostor syndrome. Even if your boss doesn't budge on your colleague helping you, it's not like you'll do a worse job than the previous guy/consultant. And it's not like your boss wants you to build him a cathedral, it sounds like he'll be satisfied with a tarp held together with staples and some duct tape.

So take this situation as an opportunity and give him what he wants (until you can find something better).

And if you want your career to improve, yes, you should definitely look for a new employer (both you and your other colleague). It's difficult to get good at something if your boss gives you side-jobs that have nothing to do with software development. It's also very difficult to become good at something if your boss doesn't want to pay for adequate resources/expertise. Also, this unpaid overtime has got to stop (unless your employer is paying you extremely high wages).

And the next time you get interviewed by a potential employer, insist on speaking with your future colleagues. An interview is a two-way process. You should be screening them as much as they should be screening you.

0

TL;DR: Circumstances leads to my boss insisting me of doing a project I'm unqualified on. How do I resolve this?

Like this

I'm brushing up my CV looking for a new job.

This has gone too far to do much else now. In your head you have already left, so focus on where your career is going not where it has been. Once you get to this mindset doing anything else is procrastination rather than constructive. You will only become increasingly frustrated which leads nowhere good.

0

You seem to have done all you can do:

Step 1 is trying to figure out how to resolve the issue. You tried that and you couldn't because the code you were given was too spaghetti and filled with bad practices.

Step 2 is rebuilding the thing yourself. You started on that but were not given enough resources (read: competent people).

Step 3 is complaining to your manager that you don't have enough competent people and to ask for more resources. You tried that, manager told you to just get it done.

Here's where you go from now:

Step 4 is to just get it done. Tell your manager it's getting done and provide updates as best you can, but in the meantime you're just "working on the project". Forever, if necessary. This is why "man-hours" is a terminology commonly used in business to measure work: If something takes 300 man-hours, then it will take 300 hours for a single person, or 30 hours for 10 people, or 3 hours for 100 people (it doesn't always break down nicely like this, but it tends to break down to a point). If a company wants to get the work done faster, measuring the work in man-hours is the way to tell them "I need more people or this isn't getting done".

Don't tell your boss you can't do it. Tell your boss it will get done, but it will take some absurd number of man-hours to do. Then it's up to your boss: Does he want you to spend your entire career (and likely his entire career) doing only this, or does he want to try to subdivide the problem by giving you additional resources? Fortunately you've already shown him results by reducing a huge job into something that takes a matter of seconds, so you've shown the importance of your work and that you're not just bullshitting him, that's an advantage.

When your boss understands that this project will not be done before the heat-death of the universe unless he provides additional resources, this may give him enough perspective to give you additional hands. If he doesn't, then just do it as best as you can, and if it takes 10 years, then that's how long it takes.

Step 5: Of course, the above scenario isn't optimal for you; spending your entire career rebuilding someone else's shitty work doesn't look great on a resume (actually it does, but not if it takes 10 years). Plus, it's boring, and it's frustrating if you don't have the required background or mentorship. If this is too much for you (and there's no reason to be embarrassed if it is! I would probably say the same thing in your position!) then find another job.

Once you're out of the company, your manager now faces the classic "bus problem": "What happens if your lead developer who is the only one working on your most major projects gets hit by a bus?". Now he has 2 systems, both of which are half-baked, neither of which work properly, and, most importantly, neither of which are documented, and he has to figure out how to make his deliverables to his boss not look like a pile of dogshit. This is where he pulls out the last of his hair and cries himself to sleep and probably loses his annual bonus (as someone well-versed in Japanese business culture, this is a VERY big deal), but none of that is your problem, because you're out of the company. That's what he gets for treating you this way.

Conversely, if your manager has any amount of forethought at all, he may see this coming, that you're frustrated and not happy and not able to deliver anything on any sensible schedule. This would mean giving you additional hands, which, at the end of the day, is your end goal.

TL;DR: Your manager has told you not to say you can't do it. So don't. Tell him it will take an absurdly long amount of time, and then if he doesn't offer you assistance after you provide a reasonable estimate, find another job. For what it's worth, saying that you took a monolithic data processing job and made it run in a matter of seconds is a huge, huge achievement and if you plaster that front-and-center on your resume you should have no problem getting hired elsewhere.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .