So here’s the scenario: you have a product you want to build, but like most people …
Starting out in web development, one fundamental truth that was difficult for me to understand is that there is no silver bullet for all client challenges. It was initially very easy to get comfortable building one kind of website with one tool; however, when a new challenge came along that tool wasn’t always the right one for the job. As a nascent programmer, I fell into the “when all you have is a hammer, then everything looks like a nail” mindset for one reason: I was pretty unsure of my skills. If I was able to do something well, fast, and it made clients happy then I did not want to stray from that comfort zone. But that model was unsustainable in a constantly changing field. Fundamentally, after a few years of development work, if all you have is a hammer then it may be time to consider a job besides carpentry. To move beyond this hammer mindset, a sense of aloofness and open mindedness are necessary.
I started out programming Drupal which endeared it to me because it was my first job, I understood it, and my employer thought highly enough of my skills to pay me. What I needed to better understand was that Drupal was not the only game in town. When presented with a new problem one must always consider what the problem looks to solve and what best accomplishes that solution. For me, I was confronted with a project that needed a pretty extensive custom database that, as hard as I tried, I could not get to work well with Drupal. After extensive research I (begrudgingly) decided that Ruby on Rails was my best option. This reflects another fact of life in web development: things advance very quickly (and usually for the better). When I started my first job, Rails was still in version 1.x with syntax that was not immediately understandable to me and was lacking in the documentation or as big a community as PHP and Drupal. By the time I came back to Rails, much had changed. Rails was older, the documentation was great, and it made complete sense for this problem. In the end, the only hurdle to overcome were my preconceived notions about frameworks and how I understood them to work. I had to consider that something had gotten better, and realize the goal wasn’t to build a site in Drupal, but to build a site that thoughtfully considered the clients’ needs and best addressed the goal of the project.
Much has been said about what technology agnosticism means or if it is even something at all. For me, it means rationally and carefully thinking of the problem and how to best solve it, where best does not mean “something with which I’m most comfortable”. This is true in all facets, be it language, framework, Drupal module, Ruby gem, or Rails plugin. We can use that with which we are most comfortable to start with, but from that point find other tools which improve our skills and improve our process. As Marshal McLuhan, said in his book The Medium is The Message, “we shape our tools and thereafter our tools shape us.”