A long time client asked for some help. Like I do with a lot of projects, I first try to see if there's something off the shelf that would scratch the itch. Unfortunately, the request was JUST custom enough that even a really good existing plugin would still need to be tweaked. Since I'd probably end up spending just as much time trying to sort out somebody else's plugin, I decided I'd just write my own. There was only one problem, I didn't really have a clear cut solution.
Staring at the Screen
I sat down on Friday evening to start writing the plugin. I had a general idea, but details weren't clear in my head just yet. I wrote some code, tested it, deleted it and just sort of stared at the screen for a while. Late Friday night, long after I should have already been asleep, I hoped on to a quick chat with @jb510. I explained the nut I was trying to crack. After a quick conversation, I had a couple ideas on next steps. I jotted down a couple notes and went to bed.
It Works! I'm Done!
Saturday, armed with those new ideas, I dove back in. Some of the ideas panned out pretty quickly. Others ended up not working. Typical development stuff, so no big deal. About 90 minutes after sitting down, I had a solution. The plugin worked. Since I wanted the client to see the solution I came up with first, I started shooting a video walk-through to show her how it worked. As I was recording the video something dawned on me. The solution I was happy with 5 minutes ago, it sucked.
Did it work? Yes. Did it give the client what she needed? Almost, but not exactly.
UGH! This was going to bother me. I couldn't leave it like that. I opened the code back up and deleted almost all of it. Once I realized what I was missing, I attacked it from a different angle. The code came much quicker this time around and it wasn't too long before I had better solution. When I was done I shot a new walk-through video and sent it off to the client.
I was happy with this new version because it seemed to solve the request, and, I learned a few new things along the way. Next time I need to do something similar, I'll have this code to fall back on. Sweet!
My Brain Won't Shut Off!
I'm laying in bed Saturday night, doing a little reading. But there's a problem. I've now read the same paragraph 5 times. Why is that, you ask? Because my stupid brain won't let something go. That solution from earlier, it's still not right. There's a better way to go about it, and I know it. My brain knows it, too, and it won't shut up about it. I'm trying to read about the history of Saturday Night Live and all I'm hearing is “Wouldn't it work better as a widget instead of a shortcode?” Lorne Michaels was going to have to wait. I shut the book (or turned off the iPad, I guess) and went to sleep knowing that I had work to do in the morning.
Sunday morning, I got up and headed back to the desk. I knew exactly what needed to be done this time. It took very little time to rework the code. This new version was miles better and not only did it give the client what she needed, it actually gave her more flexibility with how it could be used.
There were at least two previous points where I could have sent the code to the client and she would have been able to make it work. But in the back of my mind I knew it wasn't Done Done. When I saved the code that last time and pushed it live, it felt different. I knew this time I had completed the project. It felt good. Damn good.
The best part about that feeling is, once you get it, you want it again.
I want it again.
(Header photo by Ben Terrett on Flickr)