Programming is Exciting

Looking back at my progress, it feels almost guided. I think it’s really just the natural progression of learning in life (line upon line – a similar scripture is in Isaiah for you non-Mormons out there) but it’s amazing to see how one idea or decision leads to another. When you’re in the middle of it it seems so random, islands of victory in a sea of problems, and then one day you see it’s all led you to an idea (as defined by Mr. Miyamoto) – a solution that solves multiple problems at once.

Two or three years ago when working on the first version of our company’s website, I was working late to finish the site the night before the launch. I was putting together the form that would allow users to add a new issue. There were only two available actions: Save and Cancel. Both dismissed the form; to call it up again the user had to click a link. I realized that this was a terrible flow for how most users would be entering issues, because they normally had many issues to enter all at once. I knew I needed a better option. That night I added the “Save and Add Another” button to the form. Given my coding knowledge at the time and the fact that I only had that night to finish, I was (and still am) proud of myself for figuring out how to do it (I made the modal form an iframe that submitted to itself).

Fast forward a year or two. I understand code better and have discovered jQuery (which is awesome). I’m tasked with building a site that will track LEED projects. The project was always one that was not meant (at least initially) for anyone outside the company, and even in the company there are only a few people who are likely to use it. In other words, it’s the perfect testing grounds for me. I put in AJAX editing and used jQuery all over the place, learning a ton in the process.

Now we come to today (not literally, just generally) and I am working on launching the third major revision (v3) of our website. I have a couple of goals when it comes to data entry, most of them focusing on speed (as perceived by the end user) and just generally getting the software out of the way. I was already pretty happy with how things were going, as several of the improvements that I wanted to make over the previous version (v2) of the site were happening. In v2, although you could choose to save and add another issue rather than just save, you still had to wait for the issue to save before the blank form would come up again. The “Save and Add Another” button was basically a shortcut through several steps – it took away the clicks, but not the processing time. In v3 I was able to make the issue save in the background and allow the user to immediately start filling out the info for his next issue. I was also able to enable uploading of pictures in the same form, where in v2 you had to add the pictures in a separate step after you had added the issue (meaning that in a report where every issue had pictures, it felt as though you were entering the same report twice).

These were some nice improvements that I had known needed to happen, and some of them had even been brought to my attention by my users (like the photo uploading problem). I was only able to make these improvements because of everything that had gone before – creating the v2 site, the last minute addition of “Save and Add Another”, creating the LEED site, and everything I learned along the way. But what really made me reflect on this whole path was a flash of brilliance that struck me while working on the new issue form in v3: what if the user could lock in a value so that when he saves an issue and starts a new one, so he doesn’t need to put in the same value again? For example, one of the fields for an issue is “Priority”. The priority of an issue is almost always “Low”. It sure would be nice if the user could just say “All these issues are low priority” once without having to select it every time.

It was an immediately exciting idea because I knew that once our users saw this new feature they would wonder how they ever did without it. My initial feeling was that this would just speed things up. But as I reflected on it more, I saw that it solved a number of other problems. It allowed for one person to easily create issues on behalf of someone else, or to create issues for a date in the past. These are frequent occurrences at my company that I previously had no good solution for. Now, when a project manager hands an intern a handwritten page of notes to enter they can be a little happier about it, because it will be that much easier.

I was especially blessed to be struck with both the concept and the way to execute it at the same time, so I was able to put it together that afternoon to show to my boss. With that done the new issue creation process finally felt complete. Although I’m still not satisfied with certain aspects of the new issue dialog (the speed of the background saving, some of the aesthetics), I feel like now it’s just a matter of optimization, not invention.

And that’s where I feel almost guided. Three years ago when I was working on that v2 new issue form I knew that what I was creating wasn’t good enough. The feeling has stuck with me over these years, and although I didn’t realize it, I was choosing a path that would allow me to fix it. I’ve always felt that if there is something you really want, and you ponder and muse and ruminate on it, eventually it will be realized. Not in any mystical “The Secret” way, although it can seem miraculous at times, but rather that the act of thinking about a goal leads you to make choices that bring it closer to fruition. I reflect on James Allen’s marvelous “As a Man Thinketh” whenever I ponder the path that my life has taken:

And you, too, youthful reader, will realize the Vision (not the idle wish) of your heart, be it base or beautiful, or a mixture of both, for you will always gravitate toward that which you secretly most love. Into your hands will be placed the exact results of your own thoughts; you will receive that which you earn, no more, no less. Whatever your present environment may be, you will fall, remain, or rise with your thoughts, your Vision, your Ideal. You will become as small as your controlling desire; as great as your dominant aspiration.