One of the most popular blog posts I’ve ever written was titled Django for non-programmers. In it, I explained that I was not a programmer, and had no desire to become one. The article, written over four years ago, was all about how people with very little programming experience can use Django to build cool stuff. And while I still think it’s true that Django lets non-programmers do some pretty neat things, a funny thing happened over the years: I learned to love being a programmer.
Well…sort of.
I’m still a designer at heart, and probably always will be. As such, my passion is in making things that are unique, innovative, useful, and delightful. Before taking the leap into programming, I often found myself frustrated with the reliance I had on third-party tools. CMSes, plugins, little scripts I would download here and there and maybe modify a bit for my needs — they got the job done, but didn’t really allow me to innovate or push the envelope.
And it makes sense. If you can’t control the entire stack (because you don’t have the technical ability to do so), then you’re going to be relying upon what’s out there. And if you’re relying upon what’s out there, you obviously can’t take your project absolutely anywhere you want it to go — you will be stuck with certain limitations and restrictions the technology you’re using places upon you.
And that’s always the case, no matter how far you take your programming experience. If you stop using off-the-shelf CMSes in favor of a web application framework, you’ll still find some limitations of that framework — but they’ll be fewer. If you ditch the framework in favor of writing directly in your favorite language, you’ll still find some limitations of that language — but they’ll be fewer. And so on. Until you’re actually creating new elements to go on the periodic table, you’ll have limitations — but they’ll be fewer.
The more parts of the project you can influence with your skills, the more you are able to innovative. It’s the very reason Apple has always been more innovative than Microsoft — because Apple insists upon having as much control as possible over all parts of the project.
I’m amazed at how many individuals and agencies in our industry still make a great living as designers who can wrangle the shit of of their favorite CMS. If you’d asked me five years ago if I thought this would still be the case in 2010, I would have said there wasn’t a chance (and put a large amount of money on it). I would have said, “the web is moving away from brochure-ware and towards complex applications — custom programming is going to be required for nearly every project.”
I was wrong. There’s always going to be a place for brochure-ware and simple content-oriented sites. They might even be successful. But how successful? And can they be truly innovative and unique? Think about your favorite sites and apps on the web. How many of them are based on an off-the-shelf CMS? Think about the most successful sites and apps on the web. How many were created without a lot of custom programing (be it server-side or client-side)? Probably slim to none.
I’m not of the opinion that every designer should also be a programmer. There’s a very important place for specialists in this world. But I am of the opinion that you simply can’t create truly innovative stuff on the web without embracing the fact that custom programming is going to be needed. If the designers and web design agencies who make their living doing simple sites with off-the-shelf CMSes are content doing that, more power to them. That’s a totally valid choice.
But for me? I want to feel like I have the potential to create the next world-changing web project. Like I have the power to see my wildest ideas through to fruition. Like I won’t ever be limited by what this CMS or that plugin can do and can’t do. Like my design work won’t ever have to scaled back in the face of some technical limitation.
I don’t love programming, but I do love feeling like I can, ultimately, make whatever I can dream up. And that’s why I’ve built myself into a competent programmer and hybrid web designer/developer.
Nice piece!
I wish more designers thought this way (and I think the converse applies for developers). Understanding how things work at a lower level seems to be a dying art, or people just don’t care anymore. I learned more about programming as a young developer when I stopped relying on frameworks to do all the work for me and learn the underlying APIs
The question now is, how many miles to the gallon does a Jeff Croft hybrid get?
I wonder which population size is bigger: designers who wish they were better developers, or developers who wish they are better designers?
I’m certainly the latter.
I do agree that being a Hybrid makes things way more exciting.
Jeff, Very well articulated.
I am always amazed at the dissonance between some developers/designers.
I worked on a project with some designer friends. The team was mostly composed of designers. I remember the discussion of how the application would be built. The designers instantly jumped to off the shelf CMS options - without even questioning. I listened as the conversation went back and forth. Then I asked them how they would respond if the tables were turned. What if the numbers were more developers than designers, and the developers were discussing how they would get the interface built. What if the developers just pointed out options for free templates on the web?
Of course the designers would scoff at that and be upset, because they understand the importance of design/interaction.
The same holds true when I get in discussions with designers about CMS’s. In the same way they are passionate about the design, I am passionate about the application itself - both now and the evolution.
Jeff wrote: “It’s the very reason Apple has always been more innovative than Microsoft — because Apple insists upon having as much control as possible over all parts of the project.”
Really? While it is true that Apple’s control over the entire stack benefits User Experience, that very same control also retards innovation - there is also a homogeny to Macs and Mac applications. Some folks like matching cutlery, but personally I’d rather have a collection of custom selected tools in my kitchen, because that gives me greater flexibility - I’m not forced to use the iKnife and iSpoon.
One of the very real reasons why Microsoft/Windows took off in the early days was because MS released their Run Times (dll’s) to anyone who wanted to use them: rather than locking the door, they gave away the building blocks and encouraged creative play. Those early days saw tons of dumb freeware/shareware card games and other silly apps, but the shear volume of them, and the ease with which anyone could create, compile and share their application (with zero intervention from Microsoft BTW) spurred on some of the greatest innovation of the 20th Century. Compare that to the complaints developers continue to voice today about getting their app in the Apple App store.
That aside, I agree that being more of a generalist (as opposed to a specialist) allows any individual the ability to think more creatively, and influence more of the final outcome of any project. Having a broad spread of knowledge allows you to look at a problem/project from a higher vantage point, simply because you have a better understanding of how all the pieces fit together. For today’s web professional I concur that this is a critical requirement: whether a small indie shop, or as part of a large production team at a high-tech firm; the more you know, the greater your value to the project.
I’m not sure if I agree or not, but I don’t think it’s particularly relevant to this discussion. If you want to throwaway the Apple/Microsoft comparison, that’s fine — the rest of the article still stands (and it sounds like you agree).
You nailed it at the end: what I love most about being a designer that can program is that I design with the knowledge that I can create the next big thing and the experience of building applications start to finish.
It’s hard to articulate why that’s so powerful, but it not only influences the pixels I push around, but also how I think about the apps I’m designing even if I’m not going to be the developer on the project I’m working on.
There is a certain limit on hybridization (or as several jobs referred to it, fungibility, the ability of a team member to take over whatever task is available due to a wide range of skills) between design and development/programming. Perhaps it’s best to think of it as a speed/sanity balance. I’ve had jobs solely as the UI designer, solely a front end dev, and many other jobs balanced between both sides. My current job has me pushing even further into Rails, and while it’s interesting and something I want to know more about, it becomes clear that it’s knowledge of the technology that I want, and not the duty to build models and controllers and helpers, etc. I’ve always found programming fascinating, but when it comes to trying to do it all (from initial IA work down to the nitty gritty of the underlying controllers), things can break down (for most people, especially those not named Shaun Inman). It takes me far longer to complete real SDE programmer tasks than it does the full dev members of our team. Is it good for me to know the limits and requirements of the technology we use? Of course, but it’s a lot faster (and keeps me clutching to sanity) when work can be passed off to someone with a far better comprehension of that side of things. They’re faster, their code is optimized to run better, and I’m able to come back in toward the end to polish off the rough edges of the design with the easy stuff (for me): the markup, CSS and general interaction.
Should a designer grab a CMS and hack at it? Well, if it saves time, money and suits the needs of the project—sure. Should they never extend the possibilities beyond that? I’d hope real designers would never be so short-sighted as to limit themselves like that. Should every designer be required to build all the aspects of their project? Well, hopefully not often. They might lose their mind and start… I don’t know… singing karaoke every night.
@GB:
Nice counterpoints, and I actually agree with much of what you say. There is always benefit to having a team that works well together and communicates, and a big part of that is speed. Of course. But like you said, the knowledge of the technology you’re using makes you a better designer and better team member, regardless of if you’re actually doing the technical work or not. The thing is: I don’t know how you gain that knowledge without diving in and doing it.
I came from a very similar place. I was working at The World Company, where Django was created. I was employed there as a designer. For my job, I didn’t have to write a single line of Python or any server-side code at all. I didn’t even really have to write Javascript. My job was to do design, plus HTML and CSS, and the Django template language (which is not for programmers, and is just a small piece of what Django is). That’s it. But I feel in love with the Django template language, and I wanted to be able to use it on personal projects, as well. That led me to dive in and start learning the ins-and-outs of Django. By the time I left The World Company, I understood Django and Python fairly well, despite the fact that I’d never used them for my job (except, again, the template language).
So I guess my point is: there’s value in understanding this stuff. We both agree on that. We also both agree that there’s value in understanding it, regardless of if you’re actually doing it on real projects or not. My point, I think, is that there’s really no good way to truly understand it without diving in and doing it (even if it’s on personal projects that never see the light of day).
Inman is a terrific example, by the way. Nathan Borror is another one. Nathan Smith, too. Maybe I should make a Twitter list of awesome hybrids. :)
@crofty: I’m pretty sure Inman isn’t human. He is some sort of literal man/alien/machine hybrid built to make us all look bad. At everything.
Having written a similar article on Zend Developer Zone, I can totally relate to everything you’re saying here. I moved from clothing design, through print design to web design and I think it was probably the very first HTML form that made me realise I had to learn the underlying technology or be “stuck with certain limitations and restrictions the technology you’re using places upon you”.
Your saying “I’m still a designer at heart” has me curious whether part of your reason for writing this article was similar to mine in that you feel in a kind of no-mans land where designers are surprised you have any interest in all that “techy stuff” and yet you feel technically less adequate than most trained programmers?
Over the past few years doing proportionally more programming work, I’ve found that the mental shift back into visual design is getting less easy than it used to be. Part of the reason is likely due to not keeping my mental design library up-to-date compared to my programming one, but it’s also having less time to just focus on one area. Having said that, ever since reading Design for the Real World at college, I’ve never been a great believer in design being a purely visual job anyway.
So, Jeff, are you currently a Django developer? Couldn’t decipher from the post whether you have moved on to something else. Thanks for the empowering read.
I’m still very much a Django developer, but I definitely have learned some stuff beyond that, as well. I love Python, and I’ll use it whenever I can — with or without Django. I’ve also learned a lot of Javascript over the past few years. Languages I’ve learned a little bit, but don’t really consider myself proficient in, include Ruby, Haskell, and Erlang. I prefer Python, and usually it’s up to pretty much any task I need it to be, so it’s my main server-side language, but I’m trying to be well-rounded, anyway.
Jeff, excellent piece as always and I do agree with much of what you are saying. I would toss out the idea however that many of those off the shelf CMS’ - Wordpress and Drupal in particular - either have or are maturing into programing frameworks of their own. This I believe is one on the reasons we see the phenomenon you refer to.
I haven’t used either in recent years, so I wouldn’t argue — I don’t really know for sure. I have heard others say the same. If so, that’s cool. I’m a little skeptical that something like Wordpress could migrate from a blogging platform to a programming framework elegantly, but who knows. Maybe it has.
I think, in hindsight, I may have used the word “CMS” here a bit too much. I’m not trying to rail against CMSes, and certainly not any CMS in particular, but rather note that none of the worlds most interesting, innovative, and successful sites are built upon off-the-shelf tools — whether it’s a CMS, some forum software, a gaggle of jQuery plugins, or a web-based service like Tumblr or Virb. Off-the-shelf tools are great at doing what they’re designed to do. But if you have a truly unique and innovative idea, then it stands to reason there wouldn’t be such thing as an off-the-shelf tool for producing that idea — which means you’re going to have to get dirty and write some code.
Jeff, fair enough, I hesitated to include Wordpress as I know it, still is, seen primarily as a Blogging Platform. Drupal I do believe has become more of an Application framework. I do agree with you however that the most interesting and innovative sites and web apps do start from scratch. I see this even in the use of a Wordpress powered site where you can use an already created Plugin to accomplish a task or, as you put it, you can get dirty, and write a few php functions.
Keep up the great commentary!
I wish more people saw it that way, Jeff. I keep seeing adds for “wordpress developers” and the like, and it makes me feel like all the time I’ve spent learning to actually code was a waste of time.
On the other hand, getting a wordpress template out the door is fast enough for me to have lots of spare time to code on whatever I want, so it’s win-win, I guess.
I’m not sure if I agree or not, but I don’t think it’s particularly relevant to this discussion.
I completely agree that custom programming rules over off-the-shelf scripts when it comes to a successful website. Besides the limitations, let’s face it, off-the-shelf software can be used by anyone. So unless you want to spend a ton of time modifying the default script, competitors can copy your site and have it up in months or even weeks.
Great article, since i`m doing a research for my homework this was quite a good way to start :-)
Awesome!
good post!