This week I started to see some profound effects from it.
It would be a long story to give all the details, but to speak in general terms, there were some things about the systems that I work with that have always confused and bothered me. They just seemed “wrong” — but I didn’t know enough about the toolkits they were built with to say for sure they were wrong, or how to fix them.
Late last week I started getting strong feelings about fixing them. I actually lay awake one night thinking about the correct way to initialize new windows in the cross-platform GUI toolkit. Monday night I started working on a little demo app which re-did the things that our systems do (that I didn’t like) in a much cleaner, simpler, more elegant fashion. It was easier than I thought it would be, and I learned a lot in the process.
With this demo I showed my boss that there was a better way. I am very lucky to have a boss who cares more about getting things done and done right than getting them done his way. When he saw what I had done, he started to open up to some reworking of the infrastructure (something he had previously absolutely ruled out because of looming deadlines). Later that day he was working on some problems that involved the stuff that had always bothered me about the system, and I got his permission to make some small changes that night. Well, the small changes turned into big ones and soon I had gutted the app’s plumbing completely and reworked it in the clean, elegant manner I had used in my demo app. Because the app had been designed with some really nice abstraction in key places (kudos here to my boss), the switchover was easier than I would have ever thought possible. Using my new systems the application ran faster and smoother than it every had before, and all the annoying crashes just disappeared.
I was triumphant. It had worked. I had taken the app and changed the things that I couldn’t stand about it, I’d made it something I liked and cared about — and it was a huge success. My boss paid me the huge compliment that he was thrilled I had gotten to the point that I knew more about these things than he did. Everything was great —
But there was some drama still in the story. Today when I tried to share all the good stuff with him, we discovered that a lot of things that worked great on my platform (Mac) didn’t work right on his platforms (Linux/Windows), even though the tools we were using were theoretically cross-platform. He got really stressed about it, and understandably — from his point of view, it appeared the app had just stopped working. So here I was grinning and saying “It’s better than ever!” as I stood over the smoking ruins of the application he’d carefully put together and handed off to me.
By the end of the day, between the two of us, we’d found fixes for all the cross-platform troubles, so that is water under the bridge. I stayed up late tonight going through and making a ton of trivial changes to get all the bits and pieces of the application in line with the new way I was doing things.
But I’m absolutely elated at what I did to the application. It seems like a total vindication of my insights earlier that I should do the best work I can by my own judgment, instead of worrying about making other people happy. The parts of the application that bothered me most turned out to be the parts that I had the power to change and improve, once I set my mind to it and learned what I needed to learn.
I had felt totally doomed about this project. I had feared that those things which I have now changed were a millstone around its neck, dooming it to working badly at best. Now I can be proud of it. Now I am proud of it. It’s a fine little application, and now that I understand it, I’d cheerfully use these toolkits again for my own personal projects.
This project is going to rock.
This project does rock.