Wednesday, May 26, 2010

The Trouble With Satchmo

Conversations on the web about Satchmo, the most popular open source Django e-commerce platform, tend to be between two types of developers. The first kind encounters some problems with installing Satchmo, or hits a snag in deploying one of the features. Naturally, they pose the question: does it have to be this hard? Are there any alternatives?

At this point, the second type of developer pipes up and says something like, "If you think it's too hard, then you're not trying hard enough. Learn more and it'll be easier for you. Satchmo is just fine, so quit your whining."

I can see where both sides of these kinds of debates are coming from. I've gone through the work of getting Satchmo running on Linux machines, deploying it to servers, and even gotten it running on Windows boxes. And it is really a pain in the tush. For all of its features, there are a ton of dependencies that have to be installed and properly configured on your system before you can get it up and running. So I can empathize with the first kind of developer.

When you get right down to it, though, the second type of developer mentioned above is also correct. As arrogant as they can be, if you spend some time learning how to set up Django development environments, how to configure your PYTHONPATH, and so on, then it becomes much easier to install and configure Satchmo. You still run into problems, but you know how to handle them, and you know how to reduce the amount of repetitious work that needs to be done.

Satchmo is an e-commerce solution that was created by programmers almost exclusively for use by other programmers. If you're an experienced Django programmer, and your spouse wants to set up an online store to sell toys for dogs, then Satchmo is the logical choice. All of Satchmo's installation headaches, catalog management difficulties through the admin interface, and documentation shortcomings can be dealt with if you know Django or you've got a Django programmer helping you out. (Maybe.)

Don't get me wrong; I like Satchmo just fine. It's got a very large community of developers behind it, and it's certainly better than anything that one individual could create by themselves. But it's definitely not a great way to start learning Django.

The kind of developer who looks at Satchmo and thinks, "Man, can't we make this easier?" recognizes that while programmers can learn programming solutions in order to make their jobs easier, not everyone who wants to do e-commerce online is a programmer capable of learning and applying those solutions.

That's not to say that we can get to the point where programmers are unnecessary. Consider the PHP e-commerce community: for many years, PHP developers wrestled with the decision of creating their own codebase, or going with one of the many open source solutions that were available. Many of them were fraught with the same kinds of installation and maintenance headaches that plague Satchmo, most of which could be alleviated if you became more experienced with PHP.

But that wasn't quite good enough for the people who developed Magento, which, while still not perfect, is an extremely popular e-commerce framework among both developers and people in business. One of the main reasons? It's easy to install and setup. Which brings up a critical observation: I don't think ease of use is appealing only to non-programmers.

Here's the important thing to note: Magento might be open source, but like MySQL, they manage to make money from the software using a freemium business model. "Open source" does not equate to a lack of business sense or profit opportunities.

I'm not completely satisfied with Satchmo. Personally, if you like it and want to join the community that is helping develop it, don't let me stop you. Those developers are doing great work, and they deserve all the help they can get.

In the Django community, Satchmo is almost certainly the elephant in the room, but I don't think that should stop anyone who doesn't like it from creating their own e-commerce platform. If Satchmo is too much of a pain for you, why not try creating something of your own? And that was part of my motivation for writing my book about Django e-commerce: for those developers for whom Satchmo just isn't cutting it. I wanted to empower the readers of my book (who are probably way smarter than me, and better programmers) to scratch their own itch if they so desired, to run off and start their own projects. If nothing else, I hope it gives programmers the ability to get a handle on doing e-commerce with Django so that they have an easier time with Satchmo.

But I think the opportunities are many, and the potential for innovation is huge, in the Django e-commerce realm. I'm really can't wait to see in a few months' time what awesome projects Django programmers are creating in someone's basement right now.


  1. Jim,

    Thanks for the post about Satchmo. In all honesty, I don't know that I can disagree with much that you say. I can agree that the initial install of Satchmo can be a bit more involved but we have worked over the years to improve it and have made some good progress. The layout and packaging is much more straightforward now than it was several releases ago. The majority of the packages are pip or easy_installable so that barrier isn't quite as big as it used to be (Reportlab, PIL and Pycrypto are somewhat of an exception but are fairly popular packages). There's always a challenge with NIH vs. leveraging the community. I'm comfortable with our approach but reasonable people may differ.

    The knock against Satchmo with the complexity is fair. I do think you oversell the simplicity of the Magento install & other PHP solutions. I have not personally worked with Magento but have had several folks tell me that scalability and modifications to it can be a challenge. My experience with other PHP ecommerce apps was not a pleasant experience.

    In the end, like most software, there are tradeoffs with Satchmo & you outlined them well. I think a lot of Satchmo's shortcomings could be drastically improved with some tweaked Admin screens to abstract some of the more complicated items. In other words and in my opinion, Satchmo's shortcomings are fixable without throwing out the rest of the project.

    If you ever change your mind and would like to contribute, we'd love to have you help!

    FYI - I did read your book and enjoyed it. I picked up a several things to think about. Also, I've always wondered why Satchmo wasn't even briefly mentioned. Now I know :)

    - Chris Moffitt

  2. Hi Chris,

    Thanks very much for reading and for the thoughtful reply. I certainly think Satchmo is absolutely terrific, and I have used it for a couple of projects. You've rallied an excellent community and, as you mentioned, ironed out most of the bugs. I remember perusing the feature list and being really shocked by how much it included!

    If this post sounded like I hated Satchmo, then that's an error on my part. I certainly don't think I have any right to disparage everyone's hard work. Whenever I write for programmers, I operate under the assumption that no matter what I say, I probably won't change anyone's mind. The majority of Django people love Satchmo, and I probably won't sway them. I certainly don't want to, or expect to. But in the course of supporting the book, I've encountered lots of people on the fringes who don't seem satisfied with Satchmo. To them, I wanted to say, "You're not alone; if you've got an idea, go for it. Do something great."

    As it happens, there were plans for a Satchmo appendix in the book, but I ran out of time. I was disappointed by that; introducing Satchmo would have made more sense for a final chapter than one on GAE.

    In any case, keep up the excellent work. I'm humbled that you took the time to read the book and took the time to reply my geeky ramblings on here.

    - Jim

  3. Jim -

    I understand where you are coming from. I hear the same thing that Satchmo doesn't meet a lot of people's needs. I guess my point is that I want to hear what those people have to say and get their input so we can try to improve it. In some cases Satchmo is not the right choice. In other cases, they might spend time rolling their own only to realize that a lot of the complexity is going to be unavoidable.

    Anyway, thanks again for the article and the book. Hopefully this dialog will spark some good ideas on how to improve the Django ecommerce ecosystem.



  4. i live in an industry populated by thousands of small vendors, many of whom cannot get the attention of large distributors, either because of conflicts with existing product lines, or lack or projected volume.

    i want to develop a site that allows multiple vendors to put up their own products, but run all transactions through the same store.

    can (either of) you give me some advice as to whether i should (a) start and work with satchmo first and then read the book to understand it better or (b) read and play with code samples first then evaluate and cannibalize satchmo as needed to build from scratch? it's interesting to find both of you on a current blog thread.

    hats off to both of you, BTW

    i am django literate, but have not developed an ecommerce solution as yet.

  5. That's a pretty good question, and my short answer is: it depends on your learning style. If you're already Django-literate, I'd jump into Satchmo. Start poking at it and see how it responds to you. That's what I did, and it worked pretty well to a point, when I hit the wall and had to go back to learn the Django basics. I kind of jumped back and forth, a hybrid of your (a) and (b) choices.

    Ultimately, I learned Django best by growing my own solution, but with Satchmo, I got the benefit of see architectural and (code) design choices for Django projects, as made by reams of Django developers.

    My hat's off to Chris as's quite a tribe he leads!

  6. Hi Jim,

    As a web developer learning Django and Satchmo at the same time, I fall under category A - in that "does it have to be this hard?", regarding Satchmo, and I'm a little bit in agreement with the latter, as the tasks may pay off to those who are patient enough with Satchmo.

    I want to push this e-commerce project out successfully using Satchmo, and while I am hitting alot of snags, alot of it is in the configuration requirements of Satchmo on the server.

    I've never used or configured a Lighttpd server before, and I'm in the process of doing so just to meet this goal of mine, should look nice on my portfolio.

    So in regard of "learn more and it'll be easier.", absolutely. I could probably craft my own e-commerce solution in the future with the obstacles I have been facing to learn/deploy Satchmo.

    If you ever publish a second edition of your book - and if you have time you should - you were certainly onto something with SEO elements with your own ecommerce project in the book, and I definitely wanted to see more of that.

    I never did get the Google Checkout working appropriately, but then again, if the Satchmo Paypal app is plugable, I could integrate it into a simpler ecommerce solution myself, as that's what I'd be happy with.

    Take care,

  7. Hi Scott-

    Thanks very much for the feedback (and sorry my response was so delayed.) I'll keep your comments in mind for the future.

    It's a large fib to tell people that any programming task is easy, for sure...but I find that if you can convince someone that the difficulty is worth all the trouble, then they'll push through. And if it's super easy, it's probably not worth doing.

    Best of luck with your new e-commerce site, Scott...I hope it ends up being worth the trouble!


  8. Hi Jim,

    I just want to let you know that I did manage to get the e-commerce site live using Satchmo, and can be found at . It's a jewellery e-commerce site, and I worked closely with the client during all stages of development.

    I guess the only problem I have with Satchmo at the moment is leaving it in the hands of a client. From what I have gathered, it's very difficult for a client to want to change anything without having to touch HTML.

    Looking in to the future, I think Satchmo should evolve more into an SCMS (Store Content Management System) - maybe coining a new phrase here..

    Maybe where the client could access /admin and be faced with some nice and easy page editing options. Maybe a push to HTML5 will encourage Satchmo to evolve in this direction.

    Hope everything is going good for you and your django/e-commerce travels. Learning Satchmo and Django at the same time was a big leap for me, and now i'm ready to return to just the Django world for now. :)


  9. Hey Jim,

    I am so glad I got your book. I've successfully built a Satchmo store just before I purchased your book. Now my biggest need is the Google Checkout integration. Seeing as how I have Satchmo up and running I was wondering if the models and cart that Satchmo provided will be easy to integrate with the code you give in chapter 5. I skipped right to that chapter and got started on it when I noticed chapter 5 imports the cart from 4, and 4 the models from 3. Seeing as how Satchmo already provides a cart and models (I believe) I would like to know if I can easily integrate the code with existing Satchmo methods and structure.

    I'll give you some background on my experience. I'm excellent in Python, and yet I'm very green in Django. I come from a large understanding of templates and inheritance, and this has actually hindered me stepping into Django as I had little understanding in signals. But other then that I'm able to get things done.

    I look forward to your response. You've helped provide so much to the Open Source & eCommerce community, and I thank you.

    Twitter @6ftdan

  10. The SCMS approach would be nice. The Mezzanine project has some very nice features.