27

Just need to get this off my chest. Started a new job 3 weeks ago at a company that has been around ~18 years, it is only recently that they have started to grow more rapidly. I was brought in under the guise that they wanted to embrace change and better practices and so said I was up for the challenge.

In my 2nd week I was asked to produce a document on tackling the technical debt and an approach to software development in the future for 3 consultants who were coming in to review the development practices of the company on behalf of the private equity firm who has taken a major stake in the company. I wrote the document trying to be factual about the current state and where I wanted to go, key points being:

Currently a tightly coupled monolith with little separation of concerns (73 projects in one solution but you have to build two other solutions to get it to build because there are direct references.).

Little to no adherence to SOLID principles.

No automated testing whatsoever.

Libraries all directly referenced using the file system rather than Nuget.

I set out a plan which said we needed to introduce TDD, breaking dependencies, splitting libraries into separate projects with nuget packages. Start adhering to SOLID principles, looking at breaking the project down into smaller services using the strangler pattern etc. After submitting what I had written to be part of a larger document I was told that it had been tweaked as they felt it was too negative. I asked to see the master document and it turns out they had completely excluded it.

I’ve had open and frank discussions with the dev team who to me have espoused that previously they have tried to do better, tackle technical debt etc but have struggled to get management to allow them. All in all a fairly poor culture. They seem almost resigned to their fate.

In my first 2 weeks I was told to get myself acquainted and to settle myself in. I started looking at the code and was quite shocked at how poorly written a lot of it was and in discussions with my manager have been critical of the code base and quite passionate and opinionated about the changes I want to see.

Then on Friday, the end of my third week, I was invited to a meeting for a catch up. The first thing I was told was that they felt I was being too openly critical in the office and whether I was a good fit for the company, essentially a stay or go ultimatum. I’ve asked for the weekend to think about it.

I’ve been a little rocked by it being so quickly asked if I was a good fit for the company and it got my back up. I told them that I was a good fit but for me to stay I want to see a commitment to changes, they told me that they had commitments to deliver new features and that we might be able to do it at some point in the future but for now I just needed to crack on.

Ordinarily I would just walk but I’ve recently started the process to adopt kids and changing jobs right now would blow that out the water. At the same time I’m passionate about what I do and having a high standards, I’m not going to be silenced for being critical but maybe I will try and tackle it in a different way. I think my biggest issue is that my boss who was previously a Senior Developer (my current position) has worked at the company for 12 years and it is his only job, so when I’m being critical it’s most likely criticising code he wrote. I find it hard to have the respect of a boss who I had to teach what a unit test was and how to write one. It makes it hard to preach good standards when by all accounts they don’t see the problems.

Just wondering if anyone has suggestions or experience that might help me tackle this situation?

Comments
  • 6
    It sucks that they seem to have shifted gears on you. If you need that specific job right now then my advice would be to not drop your standards but not be so brazen about it.

    In the spirit of Martin Fowler's book Refactoring, implement the code improvements with each individual new feature to be added and each bug that needs fixing. I've never been in a place where management says "use the next couple months to rewrite what we already have even though what we already have makes money". That's a dream that will never be reality.

    I feel for you and your situation. I don't think there is one clear answer other than making it happen through your own efforts little by little.
  • 7
    I don't mean to be overly pessimistic but in my experience "some point in the future" is another way of saying "never".

    This doesn't mean you can't sit with your manager and lay some concrete plans; I'm just saying that you could be stringed along with "of course we'll do that, but later when we don't have to <excuse>" for years.

    So I guess my advice is to get some concrete plan out of your manager, something along the lines of:

    1. The new feature X will be unit tested
    2. We're putting a high priority task in the backlog of automating the Y thing.

    ...

    Hope this helps, and good luck.

    edit:

    3. When implementing Z which interacts with Foo, we will refactor Foo because it.... could use some work.
  • 2
    @duckwit Thanks for responding and I entirely agree with you. I was lucky to have worked in a great organisation prior to this one that was genuinely forward thinking, gave developers space to improve the code, learn etc. Sadly the U.K. government reduced their funding and a round of redundancies started to happen, I jumped before being pushed.

    I think for now I need to get through the first six months, tone down the rhetoric but quietly start to slowly improve the code base. I was never advocating a full re-write as there would be no love for that but more just a commitment from the team to making improvements. At the moment it looks to me that management are dictating arbitrary deadlines that are often unrealistic with little or no discussion with the development team. I need my manager to fight our corner a little bit to give us the space we need to make those small improvements.
  • 1
    @ihatecomputers thanks for your good advice again, really much appreciated. I pushed them in my meeting on Friday to something more concrete than just “in the future” and asked if that when they delivered the roadmap any consideration had been given to paying down the technical debt. I will reiterate the same words on Monday, try to remain calm and objective as I think I’ve let passion/emotions get the better of me when I was blindsided with the stay or go ultimatum.

    I need to give it more time, I feel about 6 months feels a good time frame and if I’ve seen nothing concrete in terms of change then it’s time to re-evaluate.

    Thanks again, really appreciated.
  • 2
    That's a great rant!

    I feel your pain... I worked for the government for some time and I was in the same dilemma... sort of, anyway... I can see you have bigger responsibilities you need to take care of... me: it's just myself... I couldn't cope with the bureaucracy and absolute lack of knowledge from my management and decided to quit...

    But the way I see it, you should keep trying to improve things, little by little even, don't change your perspective about quality and correctness but adjust your approach to a solution... in the long run, your input will be valuable only if you keep it consistent. Try to introduce non-radical changes that are attractive to management and can lead to flexibility in their view of the bigger picture...
  • 1
    Companies are allowed to shoot themselves in the leg and it's a bit pointless to try convince them not to. You can only "recommend" unit tests, just like you can only recommend your aunt not to smoke. If you are too pushy about it, she will stop talking to you.

    You can mandate your own quality standards when it is 100% your own company and your own customer.
  • 2
    @duckWit this is great advice.

    If
    I have to fix
    Something and I see an
    Opportunity to refactor something near it, touching it, calling it etc, include it in my work for the day.

    Small tiny improvements everyday
  • 3
    You said, that it feels like management just pushes unrealistic deadlines on the devs. Try to tackle the problem that way. When they give you a deadline tell them, that it will take some time with how X is set up currently and ask them to rewrite X which will speed up/streamline development in the future. Then go and refactor X.
  • 1
    Thanks @wack I’m waiting to be involved in discussions with new work and hoping to be able to get some refactoring work in with the new work.
  • 0
    4 months ago I was in the same company like you. Managment was interested in output on daily basis.

    No use of best coding practices , no use of productive tools like trello or even git.

    I stuck with job for 2 years. I am single but before that job I suffered hell financially. So, I had no where to go. So I stick with the worst working environment.

    Company has solid foundation means anyone can survive for 15 years least. You know gov job like.

    Here is the dark side of it. In such companies people exist who have no talent. They exist because they have taken credit of someone else work.

    They survived because of politics. Giving you ultimatum for being too critical is just that. You managment get scared that if your voice get in ears of top managment they could be question.

    It's happen jungle kill or be killed. As you have responsibility I suggest stay low, add good thing in project staying low.

    On other hand look for other job. As soon as u get change the job.
  • 1
    In software, oldtimers tend to miss how shitty their sofware has become. Even if they are otherwise intelligent people, they don’t understand that the system is fucking hard to be introduced. All the nasty hacks and overengineerings are justified in their heads, while newcomers only see a mess.
    That’s why I would advice removing any programmer with more than 5 years experience in a project. Yes, that is painful, but having to introduce new people frequently forces you to create software that follows well established conventions and patterns.
  • 1
    Your job is to be critical. If in any way they want to improve they need to hear things they did wrong.
Add Comment