Soft Skills Engineering - Episode 452: Consulting refactor and extra work, extra scrutiny

Episode Date: March 17, 2025

In this episode, Dave and Jamison answer these questions: I’ve been a developer for about 1.5 years. I work for a large consultancy. we provide services to big clients. I’m working on a f...ront-end codebase that has been through three consulting companies already. Tired of just moving tickets and fixing bugs, I decided to refactor the front end of the entire application we support. Touching the codebase to add features gave me a pit in my stomach. No integration tests, no staging environment, huge functions with tons of parameters, etc. The client provided technical guidelines that were pretty solid, but the code just didn’t follow them at all. In the time left on the contract, I refactored the codebase to fix the biggest problems to align with the client’s technical guidelines. I did all this without my manager/PO/PM asking me to. But now, how do I communicate what I’ve done to the client and my manager? Can I get any recognition for it? A listener named Mike asks, I’ve been in my role for about 1.5 years in a dev team of 7. I really like the job, it has a good culture and I’m learning. Sometimes I channel my desire to learn into improving our projects with small, self directed changes on my own time. I these changes are useful but aren’t high enough priority to make it into planned sprint work. I don’t inundate the team with these requests, it happens maybe 1-2 times a month. We make a point of working in small steps, usually submitting several PRs per day each. I really like this approach, and I also keep my occasional self-directed bits of work small in scale. However, I’ve noticed these PRs receive more scrutiny and more “whataboutism” that our regular on-the-books PRs. For example, for regular sprint tickets there’s an understanding that we’re making progressive improvements or building small pieces of features that exist within the constraints of our systems. We might flag broader improvements to consider, but there’s no expectation to re-boil the ocean every time we want to merge code. When I submit a self initiated piece of work there can be a long back and forth of suggestions that can involve changing other dependent code, changing internal APIs which may have side- effects, and generally a level of defensiveness in the code that we never normally expect. I understand that by submitting off the books PRs I am requiring some work-time from reviewers, but there is more pushback than I’d expect. It feels like because I get the ball rolling on my own time the normal cost-benefit constraints go out the window, and the code purists come out to play. Could I be annoying the team with these submissions? Have you experienced team members doing the same thing? Is there a way I can scratch my own itch by learning against our systems without creating this resistance?

Transcript
Discussion (0)
Starting point is 00:00:00 it takes more than resolving deadlocked technical disagreements by picking number three to be a great software engineer this is episode 452 of the soft skills engineering podcast where i am your host jameson dance i'm your host dave smith soft skills engineering is a weekly advice show about all the non-technical things that go into the technical field of software development like arbitrarily deciding to move forward i love it it's like the simpsons movie yep president schwarzenegger yeah option three i was elected to lead not to read that's what you shout as you arbitrarily decide yes that's leadership yeah yeah it's not reading that's true dave do you want to thank our patrons yes i do big shout out to those who contribute at
Starting point is 00:00:56 the just absolutely unhinged level that causes us to read whatever they type in for their patreon profile name they are noah labhart it takes more than a witty name on patreon to be a great engineer do you really love us or are we just means to yacht can it be both alexander kuznetsov chris morton nick molyneux attribute error none type object has no attribute to string javier gonzalez chewy ted timbrel i quit my job it's 2025 oh my god what have i done alexa alexa alexa alexa turn off all the lights become a senior engineer.com is a newsletter you should read unsalted french fries are morally objectionable generating side projects with ai so jameson notices my resume dan from drone deploy chase w norton never is not just
Starting point is 00:01:44 a creator on mars flamingo emoji i like chicken i like liver meow mix meow mix please deliver trash panda get status kyle boss can't see dodds hold on a second i have to sneeze nevar is not just a planet in the vulcan system jenny kim the stochastic parrot helicone.ai best observability tool for ai red panda is best panda java is just discounted c-sharp with worse documentation Jonathan Kings and I beautiful functional user documentation Polish words that are
Starting point is 00:02:08 impossible to pronounce dang it I told myself I would learn to pronounce these this week and I didn't the letter W that's probably wrong okay
Starting point is 00:02:24 William Angel dot net has cookies please accept all cookies we process your data in the United States to opt out go to Oogala Boogala
Starting point is 00:02:31 not my chair not my problem that's what I say Brayden Keynes John Grant Brittany Ellick Joe Grossberg wow I really botched
Starting point is 00:02:37 the pronunciation of that one sorry about that please write in and we'll send you some stickers if this is the best part of your week please spend more time
Starting point is 00:02:46 with your kids oh I feel called out but also appreciated simultaneously by our wonderful listeners yes and we also appreciate you thank you so much
Starting point is 00:03:01 wow that was a great one great round Appreciate you. Dave, I want to tell you about WorkOS, which is sponsoring this episode. They have launched a ton of new, useful stuff that you should know about, which we will tell you about a bit later in the episode. Thank you to WorkOS for sponsoring. Yes.
Starting point is 00:03:17 Go, WorkOS. Do you want to read her? Sorry. I'm just randomly inserting things here today. It's all good. Randomly read our next question. I will. This comes from an anonymous listener who says,
Starting point is 00:03:28 I've been a developer for about 1.5 years. I work for a large consultancy. We provide services to big clients. I'm working on a front-end code base that has been through three consulting companies already. Ugh, that sounds not fun. Okay, tired of just moving tickets and fixing bugs, I decided to refactor the front-end of the entire application. Touching the code base to add features gave me a pit in my stomach. No integration tests, no staging environment, huge functions with tons of parameters, etc. The client provided technical guidelines that were pretty solid, but the code just didn't follow them at all.
Starting point is 00:04:03 In the time left on the contract, I refactored the code base to fix the biggest problems to align with the client's technical guidelines. I did all this without my manager, product owner, product manager asking me to. But now, how do I communicate what I've done to the client and my manager? Can I get any recognition for it? How do I communicate what I've done sounds vaguely guilty. Yeah, that's what I was thinking. what have I done? The next sentence is, how do I get recognition for it? And I was thinking, oh, that's not where I thought this was going. I've never worked at a large consultancy. I have
Starting point is 00:04:38 been a consultant though. I don't think I would have done this without some kind of communication upfront saying, look at this awesome thing I'm going to do. I have done, I mean, I've done small refactors and just kind of the normal cleanup that you do as you're building stuff. But I haven't just said, hey, I'm going to take these hours that you're paying me for and use them to completely overhaul the code base. And I think it's hard to tell them after the fact, because what they might think is, wait, what about all the features that we wanted that we didn't get because of all this time that you took? I guess it depends on the contract. And maybe you did deliver all the things they asked for, and this was just sort of extra that you added on. But if it wasn't,
Starting point is 00:05:22 If delivery of the stuff they explicitly asked for slowed down, then you're probably in trouble for getting credit for this. Right. It's so tricky because there are things that as a developer you know are going to make the work go faster and have fewer bugs in the end. But sometimes it's really hard to explain those things to the person signing the check. And it's even harder when it's a consulting relationship. I think those incentives and that communication is tricky when it's working for the same business and you expect to have this long relationship with the code base and the people signing the checks. But often consulting is like explicitly like cowboy code this thing out as fast as possible. We just want you to crank out these features and ship it and not worry about tomorrow because tomorrow will be another consultant. Right.
Starting point is 00:06:11 Get in, get paid, get out. Yeah. But I think what you do have going for you is these client technical guidelines. And I think the way that you can pitch this is if you have delivered all of the features that they asked for and you're not behind on that, they're not going to say, wait a minute, but what about all this stuff you didn't get to? Then I think you can pitch it as I also kind of went above and beyond to help follow the technical guidelines to make sure that the people who work on this code base in the future
Starting point is 00:06:40 will be better off. So you should see benefits in the future from this. That's kind of like the classic pitch for it. But I think you can say that and explicitly point to the technical guidelines. There is a risk. You've been a developer for a year and a half. I feel like that's still kind of the youthful exuberance phase. And there's a risk that you've been like blog post sniped into like, I don't know, everything.
Starting point is 00:07:01 You read a blog post about reverse Polish notation and just decided like, ah, that's good code. That's what good code means. and you just got really passionate about something that doesn't actually make a huge difference in the code base. So maybe get some eyeballs from other more senior folks to kind of back you up on this, that you're not just like following
Starting point is 00:07:20 your preferred linting style or whatever. But I think you can say, basically, I've bought you future speed. You're welcome. Yeah, like, hey, I went above and beyond and I got the project done on time and in scope and under budget. And while I was in there, I did a bunch of cleanup.
Starting point is 00:07:36 Yep. So as a result, we should see fewer bugs in the deliverable immediately. And long-term, our next feature request will be able to go faster. Yeah. Great. That's a good internal message. Now, should you tell the client, and I think there's a real chance that you tell the client, hey, we delivered everything and we made a bunch of improvements as well. The client might come back and say, I don't want to pay for that part. Yeah. I think that's what your manager gets paid for. You should tell your manager this and leave it to them to decide whether to communicate it to the client. Or should you give your manager the gift of plausible deniability? Wait, what do you mean? Your manager is unaware of this extra work that you did, so they can't
Starting point is 00:08:16 bring it up in a meeting and it can never be a question from the client of whether they should pay for it. I will tell you what you shouldn't do is you shouldn't say, man, all these consultants that touched this code base before were horrible. They just made the dumbest decisions. They totally screwed this thing up but good news i fixed it because they have heard that so many times the developer who cried wolf it is it is classic to say hey everyone who touched this before me was a moron yeah but good news i unlike everyone else that has ever touched this code base i am not and i did it right and the next person that touched this code base will surely not say hey everyone else who touched this is a moron but i fixed it i did it right and your client will say
Starting point is 00:08:58 you know, the last two consultants said the same thing. Yeah, exactly. Yeah. You kind of lose credibility by saying that. Hmm. Well, have we answered the question? I think so. And the summary in my mind is that, yeah, it would be great to take credit for this, but only take the credit after you can show the results. Like, hey, remember those features we shipped a few weeks ago? Well, that's thanks to a little bit of cleanup work that I did while I was in there. You know, hey, I was already there. You know, I really don't think you should pitch it as I spent a bunch of extra hours but rather i did some cleanup the code's in a lot better shape now notice how there hasn't been bugs and notice how we've been able to deliver features faster well that was thanks
Starting point is 00:09:36 to all that cleanup i did and it is it is a good idea to take credit for that and get recognition and especially internally but but probably not externally i think the client would just be like what do you mean you didn't clean it up like if you you know it's like would you say the opposite like hey this code's a mess but i left it a mess you know probably not right yeah so yeah i think that's what I would do. Jameson, we've been talking about WorkOS a lot, and they have added some very useful stuff to their product. Now, WorkOS is not just for adding SSO to your app. It's so much more. They've launched some cool stuff, and we will tell you about it. WorkOS lets you not reinvent permissioning with their new fine-grained authorization system,
Starting point is 00:10:16 which is based on a Google system white paper thing called Zanzibar. Very fun word to say. I've actually built some fine-grained auth systems myself, and they had a way more boring name. and also i had to maintain all the code myself yes also check out work os's radar feature which can block bad signups from your app so things like bots fraud and impossible travel like someone using a vpn or proxy to trick your signup system they can detect all of that for you and help you avoid fraudulent signups they launched an entitlements feature that integrates with stripes your app can automatically give access to accounts that have paid for new features I've also built one of these myself and it can be a huge pain in the butt so nice to put that
Starting point is 00:10:57 on someone else yes totally to me the coolest feature they launched is a b2b app starter kit for next.js work os will actually help get your next.js app essentially from zero to one super fast they provide authentication billing user management audit logs and a ton more and I gotta say if there's an easier way to start a b2b sass app than work os I can't think of it do not forget the passkey support it's effortless for you to add passkey support and your users will love it check out workos.com and try out all these amazing new features shall i read our next question yes you shall i command it all right my wait my wish your wish your command is my command i think that's how it goes i think that's right a listener named mike asks i've been in my role
Starting point is 00:11:46 for about a year and a half on a dev team of seven. I really like the job. It has a good culture and I'm learning. Sometimes I channel my desire to learn into improving our projects with small self-directed changes on my own time. These changes are useful, but aren't high enough in priority
Starting point is 00:12:02 to make it into planned sprint work. I don't inundate the team with these requests. It happens maybe one to two times a month. We make a point of working in small steps, usually submitting several PRs per day per person. I really like this approach and I also keep my occasional self-directed bits of work small in scale. However, I've noticed these PRs receive more scrutiny and more whataboutism
Starting point is 00:12:24 than our regular on-the-books PRs. For example, for regular sprint tickets, there's an understanding that we're making progressive improvements or building small pieces of features that exist within the constraints of our systems. We might flag broader improvements to consider, but there's no expectation to re-boil the ocean every time we want to merge code. When I'm submitting a self-initiated piece of work, there can be a long back-and-forth of suggestions
Starting point is 00:12:45 that can involve changing other dependent code, changing internal APIs, which may have side effects and generally a level of defensiveness in the code that we would not normally expect. I understand that by submitting off the books PRs, I'm requiring some work time from reviewers, but there is still more pushback than I'd expect. It feels like because I get the ball rolling on my own time,
Starting point is 00:13:05 the normal cost benefit constraints go out the window and the code purists come out to play. Could I be annoying the team with these submissions? Have you experienced team members doing the same thing? Is there a way I can scratch my own itch by learning against our systems without creating this resistance? Hmm. I got distracted looking up whataboutism.
Starting point is 00:13:25 You have a definition? Yeah. Well, I have a Wikipedia page. That's authoritative, right? Yeah. It's whataboutism or whataboutery, which I kind of like. I have not heard that one. I kind of like that one better.
Starting point is 00:13:36 I like that one better too. It sounds like tomfoolery. Yeah, exactly. So good. Whataboutism is the strategy of responding to an accusation with a counter accusation instead of a defense against the original accusation. That's not how I've heard this term used in argumentation in the past, which leads me to believe that the people I've been arguing with don't know what this means, or at least
Starting point is 00:13:59 don't agree with Wikipedia. Yeah, I thought that this applied pretty well to this situation, and I guess it doesn't according to the Wikipedia definition. Okay, so what did you think it meant? What I thought it meant in this situation is you submit a PR, maybe it moves the line of code around. It doesn't change the line of code. It doesn't change any of the dependencies. But because you touched it, all of a sudden it's like, wait, this line of code that you have touched is wrong and needs to be changed. And you're like, it's not the scope of what I'm working on. Or doesn't follow some convention or something? like yeah like yes i changed the indentation because i surrounded it in an if statement now but i don't want to rewrite all of the code that is related yes because i don't want to
Starting point is 00:14:42 rewrite the whole code base just to make this one change but maybe maybe they mean it more literally and it's like in these back and forth discussions of feedback on the pr and then what about ism got it what aboutery what about they say well i think that's out of scope and then they bring up the insults that you made to their heritage that one time or i don't know interesting so is that the situation you think that's going on here is that there's there are incidental code changes that show up in the diff but aren't actually the substance of what the author is submitting the change for yeah i think that's part of it i mean the situation the author describes is their off-the-books changes
Starting point is 00:15:24 are held to a much different standard than the regular sprint work. Than other things. Yeah, and so there's an understanding in the regular sprint work that this is iterative and this will be improved and tweaked in the future.
Starting point is 00:15:35 And it sounds like everything must be perfect for these kind of off-the-books changes. Yeah, have you experienced this? I'm not sure that I have. I have experienced it. Not the same style of like, well i'm doing kind of side side work work it's still work but but i have experienced this vibe of like i am not going to rewrite this giant abstraction just because i i added a line to it
Starting point is 00:16:00 yeah but this person is asking me to right you're like no yeah i haven't experienced it consistently from the same person though so my in my experience this has usually been someone who's doing a distracted code review. They're not taking the time to dive super deep into it and they see a line and it's green and they just look at the line and say, ah, that line looks wrong. It should actually look like this, but they haven't rocked the change enough to understand, wait, that line has just moved around. It's not like you wrote that line. Yeah. And then I guess the extra element here in this question is because this stuff is submitted outside the normal work process, i wonder if there's a perception that they have more time and they can do more scrutiny whereas
Starting point is 00:16:47 if it's part of a sprint it's like oh look we do one week sprints and we all know we're under the gun and no one wants to be the reviewer that holds up a sprint deliverable and then causes the team to miss their commitment for the week or something like that yeah maybe they're they're super intense about sprints and you have a deadline every week which sounds not fun but exists i have been on the other side of an engineer who would regularly throw in pretty sizable extracurricular changes that were not related to the business-facing work that the team was doing. And I actually told them, please stop. And the reason I told them to stop was explicitly because it took time away from the team to review this stuff. They had to context switch. Sometimes the changes were pretty broad
Starting point is 00:17:33 to like underlying tooling it was it wasn't ever like i added this feature or whatever that the customer asked for it just out of order it was like i'm changing this underlying technical developer system that we use and i i said please do not do that anymore explicitly for this reason that that it was distracting the team and slowing down our normal work interestingly enough i am a hypocrite because sometimes i do that to my team but if i do that i mean sometimes i submit prs like that and distract them. But it's okay, because it's me doing it now. So my point is, could I be annoying the team with these submissions? I think yes. It could be that they are frustrated by trying to get all their sprint stuff done. And also now they have this
Starting point is 00:18:17 extra stuff to review. And they're not clearly communicating that. And that frustration is coming out in really very persnickety PR reviews. You should ask them. You should say, hey, I want to learn. I want to do stuff. I feel like a good way to do that is poke around and make these improvements i do it on my own time outside of work i'm not missing work time but like does this bother you are you concerned with the way i'm doing this i think you could just directly ask that question yeah i think and i think that's probably a very likely explanation for what's happening here maybe even subconsciously people are like hey yeah this is a distraction why can't you get with the program and just be with us on the team and why can't you carve out actual sprint
Starting point is 00:18:53 time to do these things if it's so important and now you're taking away from my sprint time to do these reviews. And so subconsciously they're doing anything they can to punt your PR. Yeah. They're just a little grumpier when reviewing it. Yeah. I think you also hit on a good potential solution, which is if you want to learn and you're passionate about improving stuff, I don't know, Google had their 20% time or maybe they didn't. It depends. Maybe it was always a myth. I don't know. But you could advocate for either specific targeted improvements to be made in the sprint or just to say like, hey, I want a teeny bit of capacity also to do some of these improvements to learn. And the point of putting them in the sprint is it prioritizes them against
Starting point is 00:19:38 other things that are typically more business facing. And it's not that they don't have value if they're not business facing, but it's easier to articulate the value of a new feature to the business than the value of like i tweak this underlying abstraction yeah and so you might have to do a little bit more work to to justify it up front yeah makes sense or you could just go all in right they say change this underlying abstraction you say okay no problem and then you go off and yep 10 000 lines later that feels like a doom cycle though it's like you come back and they're like okay thanks now do this other impossible task yeah you must cut down the largest tree in the forest with a heading yeah if you like the team it's got a good culture
Starting point is 00:20:25 i feel like you should be able to ask what's going on fairly openly and discuss it and it might lead to i i think i agree with you dave that it could be subconscious on the part of your teammates that it might not be them directly saying aha out of sprint work i will now put on my my pendant hat my pendant pendant pedantic pendant yeah oh no the pedant pendant pedant is that what it is pedant yeah the pedantic the pendant of pedantry yes that's a great one we need to get some of those so maybe talking about it helps them realize this and then it brings it out in the open yeah that's probably better all around i had a developer on my team last year who said hey i'm i'm really interested in getting more familiar with a specific set of technologies. And I've noticed
Starting point is 00:21:18 we have a big pile of tech debt that we keep not getting to. Can I volunteer to work overtime and for my own benefit and also for extra pay to develop these skills and burn down this tech debt list? And I was like, yeah, that sounds awesome. So we just created a really simple tracking system, little document, you know, created tickets in our normal sprint that this person could work on. And we communicated it with the team, everything was above board, and we got a ton of value out of it. And it was really, really lovely. And everyone is happy with it. Now, if that person had just like blindsided my team with like, hey, I want to move this service from EC2 over to a serverless architecture. And look, I did it. And here's the PR. I think
Starting point is 00:21:59 everyone would be frustrated, including me. Yeah. Because I would have thought, you know, as the leader of the team, it's one of my jobs is resource allocation and time allocation. Like, what are we going to spend time on? And when you take that opportunity away from me by just choosing unilaterally to spend your time on something that I didn't even think about, it's not good. Like everyone's frustrated with that. And so it's like the same actions with a little bit of preamble make for great outcomes as opposed to doing those actions without the preamble and then everyone's mad at you. Well said. You just liked it because I said the word preamble. Always a fun one. I actually have a preamble pendant. Ah, you've got all manner of
Starting point is 00:22:35 pendants yes you might say i have a plethora all right have we answered this question i think so good luck good luck mike it sounds like you are well-meaning and you've got a good team so i think it'll turn out all right yeah and good luck with all the refactoring that's always fun for you someday you'll learn to hate refactoring but today is not that day yeah other people's refactors are are your nightmares refactoring is like when you want there's that thing you want to buy and you really work it up in your mind and then you save your money and you plan and then you buy it
Starting point is 00:23:08 and you realize that wanting the thing felt better than having the thing. You ever had that experience? Yeah, the anticipation is great. Yes. Saying refactoring falls under the hedonic treadmill is real for code quality also, I guess. I promise I'm not going to say this,
Starting point is 00:23:27 spend much more time on this, but it is the case for me that every time I've embarked on a major refactor, I look at the code and I just think, this is going to be so nice when it's all cleaned up and then i do all the cleanup and i'm like i feel the same like it's just yes the code is cleaned up but i just don't get this like amazing sense of accomplishment like ah oh i thought that by changing the code i would change myself
Starting point is 00:23:54 alas unless i just didn't change the code the right way surely this next time i will change myself by changing the code but if you do the refactor together then at least you make friends along the way yeah fair enough and that's the real valuable thing and that does change you making friends you know what else changes you asking questions of the soft skills engineering podcast how can people do this go to soft skills.audio and click the ask a question button where you can fill out our form our form that faithfully serves us and has for many years we thank you one and all who have contributed questions to that lovely form that have gone into our backlog whose depth is proportional to my self-worth so thank you for making it bigger
Starting point is 00:24:44 i really appreciate it i do too i appreciate you increasing dave's self-worth my sense of self-worth is is proportional to dave's sense of self-worth so with a like a 1.3 multiplier on it yeah yeah so i'm even i'm doing even better thank you all thank you for listening we will catch you next week

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.