A while back, Glenn Vanderburg wrote an article about software cohesion v. software adhesion. Today I got a great example of adhesion.
We are starting our second year in the house. It is a quirky house and I know it was managed by people who were self-reliant, so there are always some odd surprises here and there. It kind of reminds me of a legacy code base, because the product (house) is pretty good, and mostly meets our needs and many of our desires. We got it because we liked it and because it fit our price range, and it helps us with other goals (close to train station, 15 minutes from church, nearer friends, nearer my son's school, etc).
Today I needed to change a bulb in the upstairs shower for the first time. I was stymied at first, because the cover didn't have any visible way to remove it. The glass cover didn't have a catch, didn't screw off, didn't have a release detent that I could twist to release, nothing. I finally decided that the outer plastic ring must drop down, but it didn't want to.
The cover had been caulked and painted to the ceiling, rendering the incandescent 70-watt bulb a permanent fixture of the house. Think about that for a minute. In order to change a lightbulb, I have to tear into the ceiling of the shower. When I pulled down the outer ring, I found it was indeed made to pull down and release in order to change light bulbs, but I suppose the former owners were in a hurry when they put it in.
The ceiling was cut a little larger than it needed to be for the fixture. With the ring up, it leaves a little opening here and there. To fix that, it looks like they just glued the hole with caulk and then painted it over so it didn't look so bad. It seemed fine when I bought the place.
It sounds like a particularly bad design to me, because in order to solve one problem (not enough light in the shower) I have cause and then fix another one (holes in the ceiling). It is more disturbing to me because I'm not skilled in drywall repair or showers. I'm going to have to ask for help now (another problem for me) to make sure I fix this in a way that doesn't cause more trouble in the future.
It didn't have to be that way.
This house really is organic in the way that legacy code is organic: things just sort of become the way they are through minimal effort and short-term problem-solving. Nobody designed the house to have a hole in the ceiling or a permanent lightbulb, but that's how it is. It's is as if "crappy" was a feature, and it probably sounded like a good cost/benefit tradeoff at the time. After all, a lightbulb over the shower should last for years, and caulking and painting are not hard to do.
I am not going to obsess over the issue, and I've got the bulb changed, but I am going to put in a fix that makes the lightbulb a supply instead of a permanent fixture. I'm putting in a florescent bulb this time, and it may last a long time, but the next time we need to make a change it won't be a big hassle. It will be easy. I don't want to become accustomed to doing unsatisfying hacks in my house.