Jeff Croft

I’m a product designer in Seattle, WA. I recently worked at Simply Measured, and previously co-founded Lendle.

Some of my past clients include Facebook, Microsoft, Yahoo, and the University of Washington.

I’ve authored two books on web and interactive design and spoken at dozens of conferences around the world.

I’m currently accepting contract work and considering full-time opportunities.

Blog entry // 04.25.2011 // 2:06 PM // 6 Comments


When I first joined the team that built Django, back in late 2005, they were hard at work doing something they called “Magic Removal.” Apparently, Django’s first few iterations had been way too magical, and it had now been deemed desirable to break down the illusions and make it very obvious how everything was being done.

This seemed absurd to me. In my very limited understanding of Django at the time, I totally agreed—it was magic. It made things that I’d previously never been able to do not only possible, but so easy and—dare I say—fun. I couldn’t understand why anyone could possibly want to remove that magic.

See, I meant “magic” like Steve Jobs means it, or maybe like Arthur C. Clarke meant it. “Magic” is an awesome marketing term. To be able to say something “is magic” or even “feels like magic” is pretty damn powerful. I felt like Django lived up to that bill.

But the developers of Django had an entirely different meaning for “magic.” Despite what Wikipedia has to say about [magic in programming](, the Django developers definitely considered it to be a dirty word, with very negative connotations. To them, “magic” was abstraction taken to a ridiculous level, such that it was very difficult to understand why a thing worked like it did—or worked at all. Sure, it works, but I can’t for the life of me figure out why, and that scares me.

This all probably sounds like it’s leading up to something interesting, since, you know, I usually have a lot of interesting things to say, because I’m very smart and I articulate my points so well (also, I’m very attractive). Right?

Well, it’s not. This is all apropos of nothing, really, other than the fact that I enjoyed this article (and also this one) today.


  1. 001 // Michishige Kaito // 04.25.2011 // 4:11 PM

    The whole anti-magic thing is what sold me to Django over Rails years ago. I’ve since moved back to Ruby (but not to Rails), but I still stay away from those awesomagical frameworks that do all that hard work without anyone knowing how or why.

  2. 002 // Loans // 04.26.2011 // 3:17 AM

    Yes I agree with you,this is interesting and you articulate your points so well..

  3. 003 // Michael // 04.26.2011 // 1:57 PM

    There is no such thing as magic. It’s all programming. Some could argue that Python’s dynamic typing is magical. Well, it is! But that doesn’t mean that we should go back to C.

    Sometimes, developers refer to something as “magic” simply because they are not comfortable enough with the API, or didn’t read the documentation.

    Magic == Must read the documentation.

    Once you understood, it’s no longer magic. Hmm, just like magic.

  4. 004 // theFreelanceDesigner // 04.26.2011 // 7:33 PM

    Sounds like it is leading to something, Jeff. Please do tell :) Seriously though, are you reconsidering Django?

  5. 005 // mary // 04.29.2011 // 8:32 AM

    The link to Magic(programming) is broken. :)

    But wikipedia suggested the correct article. I suppose most of your readers already know what magic means so they didn’t click the link. :(

    And yes, I agree with the reasons why you have interesting things to say. Haha

  6. 006 // Harris // 05.02.2011 // 10:39 PM

    I think the point about magic—the trouble with it—is that when something doesn’t work magically the way you expect it to, it will be much less clear why or how to fix it.

Tags for this entry