What Changing Struts Taught Me About Software Engineering
I just spent over 10 hours doing something that should have taken about 2 hours. I mis-estimated the amount of time it would take me by 500%. I changed the struts on one of our cars this weekend. I started around 2pm on Saturday and finished around noon on Sunday. Looking back on the project reminded of some parallels to software projects.
There are 21 screws and nuts that I have to replace the two struts on my car. That’s 4 lug nuts for each wheel, 5 bolts per strut, 1 bolt per sway bar link, and one extra screw to mount a sensor wire. If someone had asked me “How long would it take you to replace 21 screws and bolts?” I would have thought maybe an hour or so. But, as I mentioned above, that’s not what happened. Further, if I were to talk to a “car guy” he would have been amazed that it took me so long to complete the task. Much like a senior dev might wonder why it took so long for a junior engineer to do a “basic” task.
So what went wrong?
I started on the driver’s side. I had the wheel off in no time, and saw the two bolts at the bottom of the strut. I sprayed them with PB Blaster penetrating oil, because I was pretty sure they would be stuck. Even after that, I had to hit the wrench with a mallet, and even finding my rubber mallet took a bit of time. Turns out my wife was using it for a project upstairs. Once those bolts broke free, I was off and running.
Next, I went to remove a nut that was holding on the sway bar link. The problem was, the wrench I was using rounded the corners of the nut and started slipping off. I tried a couple other wrenches but they didn’t work. I called my dad and he gave me some tips for handling nuts like that. Unfortunately it involved pipe wrenches and/or vice grips, two tools I didn’t have. So I made a trip to the hardware store to get the wrenches.
I came back from the store about 30 minutes later (as I ended up needing to hit 2 different stores and get gas in between.) I sat down and tried to pry that nut off with no luck. After about 30 minutes of trying I resorted to googling how to break free the nut on a sway bar, because I thought maybe there was something special. I found a couple forum posts that pointed me to a brute force method of using a sawsall, cutting it off, and then replacing the part. I looked up the cost of sway bar links and found they were about $15 per side and that I should replace them in pairs. I finally found a store in-town that had 2 in stock and placed an order on-line. During that time I decided to try my luck and breaking the nut off the other end of the sway bar link and it worked.
After that, I was able to remove a couple clips that held the brake line out of the way, and undo the 3 bolts at the top. It was about 4:45 and I finally had my first strut out. I had to wait for the parts store to email me telling me my order was ready. Sadly that took about 90 minutes and then with drive time to pick up the parts and get back home, it was close to a 2.5 hour break.
I got the new strut mounted relatively easily. All except for the sway bar link. The part I just bought was about 12″ long, but the gap between the two holes I was to mount it in was only about 8″. No amount of moving, positioning, pushing etc closed the gap. However, when I compared the new part to the old one they were the same length. So now I was stumped.
I looked up how to replace a sway bar link on my car, and through dumb luck found a video of a guy doing it in his garage at home and not on a lift. He made the point several times about how he jacked up both sides of his car to take the pressure off the link. I didn’t like that idea because my jacks aren’t great and I didn’t like the idea of trusting two of them. So instead, I put the wheel back on, and lowered the car back to the ground. I then was able to get the link in place and put a nut on each end. Then I jacked the car back up and took the wheel off and tightened the nuts down.
The driver’s side was done. It was about 8:30 at this time. However, I was largely convinced that the worst was behind me, and I learned all my lessons on this strut and so the passenger side would be a piece of cake. So I decided to try and tackle the passenger side.
I popped the wheel off and noticed this one was slightly different. There was an extra bolt on this side that held a wire harness. That didn’t look too bad, just more wires to make sure I didn’t damage. I set out doing the same thing as the other strut, spraying bolts with PB blaster, and whacking my wrenches with a hammer. Only this time, the bolts didn’t budge.
At this point, I was having flash backs to other projects where I got one side of something done but was stuck on the other. This caused me some anxiety because even though I had an additional strut, I knew that no shop in town would put my strut on for me, I’d have to buy theirs. As I was fighting with this nut I was debating about buying an impact wrench. But I didn’t really want to do that, as part of the reason for doing this job myself was to save money, and while impact wrenches are cool, I don’t have a constant need for one.
I decided instead that if I could get a big breaker bar for my socket that I could probably break the bolt free. It was 9:35pm and the two nearest stores were already closed. There was one a bit further that closed at 10. I ran in to grab my keys and wallet and drove like a mad man to get there. I knew EXACTLY what I wanted and where it was, but I didn’t want to be “that” guy that walked in at 9:55. Thankfully, I wasn’t. As I was in the check out line they made their announcement that they were closing soon and come to the checkout line.
I got home, put the breaker bar on the bolt and with a couple whacks of the mallet the bolts broke free. Sure it was after 10pm, but I had to be almost done. All I had to do was pull off the sway bar arm and loosen 3 nuts at the top and this thing would be out.
The sway bar came off without incident.
The nuts on top were another story. Or rather, one of the three nuts was another story. Two came off without a hitch. The third one, though, stripped much like my first sway bar. I tried the pipe wrench and the vice grips but again, no luck.
At this point it’s close to 11pm and I was done for the night. I was defeated. I actually woke up a couple times during the night with anxiety about “what if I can’t get this nut off?”
I woke up early, and was at Home Depot at about 8:15 to get some cold chisels, another solution my dad recommended the day before. I came back home and tried to chip away at the nut. I stopped after about 15-20 minutes to make sure I was doing it the “right” way by watching a YouTube video or two. I was doing what those guys said but it wasn’t working. I pulled out my Dremmel and started grinding it off a bit, then back to the chisel. I worked on this for a couple hours and I could see that the nut had been chipped away, but it wasn’t any looser.
I had visions of my head of Reddit’s Just Rolled Into the Shop. I know a couple car guys at work that would possibly come over and help me, but at this point I was embarrassed. I was pretty sure that I had damaged this thing or at the very least they would make fun of my inability to change a simple strut.
Then, a miracle happened. As I was chiseling away, the nut started to move. Surely, I had to be hallucinating. I hit it again and my eyes didn’t lie, it moved. I did that a few more times before grabbing a pair of pliers and twisting it the rest of the way. By the time I finally got it off, it looked barely like a nut at all (see below.)
At this point the second strut was off and I decided to take a 15 minute break before trying to put on the new one. I was so excited I got to this point that I didn’t want some set back to crush my enthusiasm, I wanted to celebrate my victory.
From there on, it was pretty uneventful, the new strut went on pretty easily and the sway bar went on (following the same approach as before) with little incident.
By 12:30, I was test-driving around the neighborhood verifying that everything worked.
It felt good, I had accomplished something. It also gave me some perspective on solving new problems. I’ve been doing software for 18 years now and so sometimes I forget what it’s like to solve a basic problem and run in to issues. But I recognized a few things that are probably common to junior engineers.
Have the Right Tools Handy
I ended up brute-forcing that nut above in part because I didn’t have the best tools handy. The wrenches I was using were not great. Additionally, I ended up making 3 trips to the hardware store to get the right parts.
A lot of times, junior engineers don’t have the right tools handy, and it’s not their fault, they don’t even know what tools they need.
Rely on Experts
When junior engineers don’t have the right tools handy, they should ask experts. That’s what I did when I called my dad. He’s not a mechanic, but he’s done more than his share of mechanical work in the past 70 years, additionally growing up on a farm I knew that if anyone had an answer, he did. So I was able to follow his advice. Ultimately his advice of using a chisel is what saved my day.
But why don’t junior engineers rely on experts? For me, at least, it came down to shame and embarrassment. I know that my dad loves me unconditionally, he’s not going to think less of me for me asking a dumb question, or damaging a nut. But I didn’t know that for sure about the car guys at work. I wanted their help because I was sure they’d seen something similar, but I didn’t want to haver to show off my work so that they could see how I made the problem worse.
I think there’s some of that with younger engineers. If I had stopped sooner and gotten the help I needed, it probably wouldn’t have been as bad. Instead, I let shame drive my decisions and it made things much worse.
Even the Same Task Can Be Different
One reason I even started on the passenger side at 8:30 or 9pm was because I was 100% sure I had figured out all the hard parts and could rush through the second side in no time. But I found out that wasn’t true. In my case, the passenger side was only slightly different in that it contained one extra bolt. But the challenges I faced on that second side, with the stuck nut, ended up taking way longer than the first. It wasn’t that I didn’t apply what I had learned, I did. The lessons I learned made the passenger side much easier, all except for that one nut. In fact, if that had not been a challenge, I wouldn’t even be writing this post because I would have been done by 10:30 Saturday instead of lunch on Sunday.
This is true with software as well. Sometimes it’s taking a feature that is implemented on one page and implementing in on another. Other times, it’s taking work done by one engineer and replicating it by another. But the point here is that even things that look the same can often have slight differences, and those can bring forth their own challenges.
Take a Break
Finally, I learned that too often, when you’re new to a problem domain you don’t want to take a break. You want to put your head down and push through. That’s why I foolishly started the passenger side at 8:30 Saturday night. I should have called it day, gotten some rest and approached the passenger side on Sunday. Who knows? Perhaps if I had done that I would have been better equipped to handle the stuck nut. But instead, I was trying to rush and push through. I kept thinking I was so close to being done that I just wanted to push forward.
I think this happens in software as well. We feel that we’re so close to wrapping up a feature or story that we’re too afraid to stop. But that’s where problems come in. We get blinded by our desire to be done that we miss the easy things, or start introducing bugs.
In the end, on Sunday morning, I finally realized that. After taking a minute to celebrate my victory over the nut, I took a break and just enjoyed my victory. Sure, I wasn’t done, the car was still up on a jack, there was no way to drive it in its current condition, but I had solved a major hurdle. Taking that break let me enjoy my victory and made me pause just enough that I was able to continue forward. Had I encountered any challenges putting the new strut back in, I would have been in a much better spot to solve them.
TL;DR
At the end of the day, while some of my decisions in this process were irrational, at the time, I was able to completely justify them. That’s true with software as well. We shouldn’t be looking down at younger or less experienced engineers (or anyone, really) who struggles with a problem. Chances are, they had never needed to solve that problem before. Further, if they’re struggling while surrounded with people who are excellent at software, there might be some shame involved as well.