Jekyll and Hyde: The balance between getting a job done and creating a work of art.
Programming with Adobe ColdFusion is like creating a masterpiece. We, as developers are creative; solving problems and crafting with code the way an artist would with oil and canvas. I sincerely believe that it is the desire of every developer to not only create something wonderful, but to create it in a simple, elegant, and beautiful way.
I have a keen appreciation for software (and hardware) design aesthetic. I feel a sense of awe when I come across an application and I can tell that it is well designed, well thought out and has been meticulously considered from every perceivable angle so as to create a flawless, polished experience. I can tell when an application was clearly defined, well planned, and given the proper time to develop properly, and it’s amazing. In an ideal world, applications have a clear scope of work that was poured over again and again to make sure nothing was missing, and the development team was given as much time as they needed to create a refined and beautifully crafted piece of art.
But we don’t live in an ideal world, do we? We have budgets. We have incomplete scopes of work. We have half-thought out ideas that didn’t consider a great number of requirements. We have bosses who think week-long tasks “should only take a couple of hours to bang out, right?” We have clients who make requests that were due the moment they conceived them. As a developer, we
sometimes frequently need to sacrifice creating something in a beautiful way and need to settle on “doing whatever it takes to get the job done as quickly as possible.”
So we hit our keyboards and implement non-elegant, hacky solutions. We start writing code without knowing what the end-result needs to be. I’ve been told to “add another field to the table” when there’s another field in another table that already has the data we’re trying to manage. It’s frustrating; but sometimes, for the sake of business, you need to just get the job done; and the artist inside me dies a little every time.
Here’s an example. One of the clients I work with has a website that contains links to another website. All of these links are hard-coded to “http://”. They want to make them all “https://” based links. Seems simple, right? Global search-and-replace and we’re done. But here’s the rub… we also have links in database records that are stored. Ideally, that data is updated as well.
The lead developer has spent the day building a ColdFusion based tool to be able to search and replace values in the database. It’s elegant and beautiful, and works well, and took him a lot of time, and is completely replaceable with an HTTP redirect from http to https. If the directive was to fix the data, his solution is what we would need. But the directive was not to fix the data; it was to make the links land on an https page. An http redirect is ugly, and doesn’t solve the problems with the underlying data, but it gets the job done and takes less than five minutes. He’s about 6 hours and 50% complete with his project. I respect his desire to create a work of beauty and elegance; but there’s other priorities that are not getting done while he’s building his art.
One of the reasons I am a big proponent of ColdFusion is that it makes creating art easier. Doing things well, even in ColdFusion, takes time and consideration; but CF makes it faster and easier. Getting things done can be quick and dirty… and CF still makes it faster and easier. The dichotomy of getting things done and doing things well is something I think many programmers struggle with every day. It’s a delicate balance that frustrates me all the time.