How Installing a Dishwasher Made Me a Better Software Developer
Published: 2020-06-26 17:35:44

I installed a dishwasher recently. This is a big deal for me as I'm a software developer and not really much of a handyman. I own few tools and always worry about breaking something. Let me tell you a story of why installing a dishwasher helped remind me how to be a better software developer.

Our 17 year-old dishwasher, didn’t quite die, but it was getting quite loud and starting to rust out in places. It was time for a new one. After some research, we settled on a Maytag which was ordered over the phone from a locally-owned appliance store.

During the ordering, they asked if we wanted to pay extra for delivery and installation. Normally that wouldn’t be a problem, but that did mean we’d have to wait a while before it would arrive and we also wasn’t too keen on having someone in the house. So we decided to pick it up and that I would install it myself.

A quick bit of research told me that when installing a dishwasher there are essentially three things to worry about:
1. The drain hose
2. The electrical power
3. The hot water line

While removing the old dishwasher I was able to verify the hot water line had a shutoff that worked and that the dishwasher was connected to its own circuit. I was able to see how the drain house connected to the drain pipe and I was able to example the hot water line, which was a copper pipe. Disconnecting everything was easy, although the hot water line was difficult to reach under the dishwasher.

After getting the new dishwasher home in the evening, I opened the box and found the instructions so I could review them before starting. Overall the steps were as I thought, but it would be important to go slow to make sure everything went smoothly, so I decided to start in the morning so I’d be fresh. I estimated it would take 1-2 hours to install the dishwasher.

Hooking up the drain line was easy. Hooking up the (direct-wire) power was also straightforward. The last step was to hook up the water line, which I mentioned earlier was a copper pipe. One thing to know about copper pipe is that it is not very flexible. The pipe also had its own connection nut which means I couldn’t use the new ones that came with the new dishwasher.

Try as I might, I could not get a hookup that did not leak water all over the place. I just couldn’t get past it and I started to fear that I’d have to call in a professional. It turns out I was was not stuck, however. After consulting with my brother-in-law, he suggested that a flexible metal hose for the water line would likely solve my connections issues, so I drove to Lowe’s to pick one up.

Once I got the new hose and hooked it up, things were much better. I still had a different leak that was easily solved by tightening another connection.

It was now time for a quick test to see if there were any problems. And a problem there was. When I turned on the water and power, the dishwasher immediately displayed an error code. After a bit of panic and re-reading of the instructions it turned out that in my rush to test, I forgot to re-attach the leak sensor (which was disconnected to reach the power hookups) so the dishwasher was thinking it had a water leak. This was kind of like a bug in my code.

After putting that back in place and resetting the power, the dishwasher starter without errors. Success! Ship it!

Well, not quite. Now all that was left was “polishing” so to speak. I had to adjust the height of the dishwasher so it fit properly under the cabinet. That took a while as each leg had to be manually adjusted. Sliding it into the space was also slow as it was a snug fit. Then I had to attach it to the counter so that it didn’t move.

Once it was in place, we put couple dishes in it and ran a test. It all seemed to work fine.

We added a full load and ran it again. This time it failed about half-way through with the same “leak” error as before. Upon inspection, the connector into the dishwasher was leaking again. It turned out that I had wiggled it loose with all the movement from adjusting the height and sliding it around into the cabinet. Fortunately I was able to tighten the connection to fix the leak without removing the dishwasher.

And now the dishwasher is working perfectly. It is quiet and is doing a great job on the dishes. It ended up taking me about 4 hours all together.

OK, that was a long story. What on Earth could it possibly have to do with software development? Many things, I think.

1. It is important to plan ahead. Understand what you need to do. Don’t just jump in and start coding without a plan. Sure, you might make some initial progress, but you’ll likely quickly become frustrated and confused when problems arise.
2. Take some time to read the docs. You don’t have to memorize them, but if you give them a once-over you’ll be in a better position to find something in them later should you need it.
3. Take your time in general. And just because you haven’t done something before doesn’t mean you can’t do it. Try new things outside your comfort zone.
4. Have a mentor available. In my case, my brother-in-law was able to FaceTime to answer questions. A [forum](https://forum.xojo.com) can be a great place for that.
5. Don’t panic. Something will inevitably go wrong. If you go slowly you’ll be able to deal with and get past it. If you reach a dead end, consider alternative solutions. I could have kept fighting with the copper pipe and maybe gotten it to work, but I asked for help and found out about an alternative solution that made more sense.
6. Your time estimate will be inaccurate. Just accept it.
7. Test as early as possible. Waiting until you’re all done before testing anything means you might have to undo a lot of work to find or fix the problem. Perhaps [unit testing](https://github.com/xojo/xojounit) can help you with that.
8. Finish (or polish) things up once you are confident all is working as you expect. This may also unveil bugs you need to fix.

I hope you found my little journey somewhat interesting and that it helps you on your software development path.