Why I gave up on django-oscar

I tried django-oscar for about a week and decided to go with in-house solution, using django-merchant. So this is my review of django-oscar:

No offence guys, seriously, I really appreciate work you are doing and it's awesome!

But oscar is too heavy and too messy for me. It's conventions really cross Django's conventions a lot of times and in the end, developer starts to use 2 frameworks on top of each other and plus trying to add their own, which gets way too messy. I tried to simply create currency conversion, which should be pretty straightforward, but I ended up writing strategies and then overriding some basket app's code and then some huge mixins of order processing and it still wasn't working. While I believe that couple of more days will allow me to finish it, I realize that I've spent more time on trying to understand oscar's code than actual coding.

And I didn't even mention half of actual problems. Like for example, urlconf is in app.py instead of urls.py, some considerable portion of code is being refractored (like class entities for example), you have to override oscar's app for every single app which has to do anything with your webapp, and overriding isn't that simple like subclassing - you have to replace app.py, then insert the line in bottom of models.py which imports oscar's model, you have to use oscar's custom function inside INSTALLED_APPLICATIONS setting which will override oscar's app... etc... And I don't even remember other stuff I had to do. But that's only from 1 week of working with oscar. Any customization brought me to hacking oscar's code.

Oscar focuses on being over-the-counter solution for ecommerce with Django and it's ready after installation. I think for people who want to just install Django and have a shop ready-to-go, oscar is perfect solution. But if you want customizable webapp, then you will have nightmares figuring out how oscar does certain things and then you'll have to do a lot of hacking. But then again, if somebody wants ready to go ecommerce solution, and doesn't want a lot of customization which Django offers, then why not to use other frameworks which focus only on ecommerce? Like magento or opencart etc. Oscar is a heavy framework on top of other heavy framework. Oscar would've been awesome if it would just offer bunch of helper methods for ecommerce with Django, which you could simply import and use, instead of going over-the-counter and using itself as foundation to build your own webapp on.

Again guys, I appreciate your work, I honestly believe that you do this to make things easier for people, but easier it got for non-programmers, harder it got for programmers. I wrote this simply because I want oscar to succeed, but I doubt that we'll see any super-customized webapp built on oscar because of it's conventions. Cheers, and good luck!

I understand some of your points, but, from my experience, (a) all e-commerce systems are bundles of compromise, and (b) writing from scratch could only really pay off if your use case is very, very simple (and often, it is!). From what I'm seeing in Oscar so far, it does a pretty good job of providing a (batteries included) framework.

If you want a simpler solution you might try http://cartridge.jupo.org/ which, like Oscar, has high quality code and hooks for extending the core. In many areas, it offers much less flexibility compared to Oscar, but it is simpler.

I agree with you. Especially point B. Very often, e-commerce setup is pretty simple and straightforward. My case was one of them and I just felt that I'm doing a lot of work compared to the goal. And complexity is just everywhere in oscar. Simple currency conversion required to override lots of code in lots of places, which in reality shouldn't have consumed more than couple of hours. Which brings me back to The Zen of Python, and sadly, oscar breaks reasonable amount of it, which affects extensibility.

thank you very much for your feedback, really. When working on a large project like Oscar for so long, it's very easy to lose track of how people perceive it when getting started.

Oscar isn't trying to be an over-the-counter solution, and we fully expect people (programmers!) to have to customise it. If you want over-the-counter, it's hard to beat Shopify. The kind of shops that Oscar really thrives at are a shop with millions of products, or multi-language deployments, marketplace scenarios - complex scenarios. Supporting those scenarios while still being useful is a very fine balance to walk; and while I'd like to think we get it right most of the time, it's hard to neither make too many nor too little assumptions, and it will never be a good fit for everybody.

And I didn't even mention half of actual problems. Like for example, urlconf is in app.py instead of urls.py, some considerable portion of code is being refactored (like class entities for example), you have to override oscar's app for every single app which has to do anything with your webapp, and overriding isn't that simple like subclassing - you have to replace app.py, then insert the line in bottom of models.py which imports oscar's model, you have to use oscar's custom function inside INSTALLED_APPLICATIONS setting which will override oscar's app... etc... And I don't even remember other stuff I had to do. But that's only from 1 week of working with oscar. Any customization brought me to hacking oscar's code.

Almost all parts of Oscar are customisable, and that comes at a cost. We try to minimise that cost, but at the end of the day, many people seem to find they're well worth the effort. If you can think of a better way to do things, we're more than happy to discuss.

I tried to simply create currency conversion, which should be pretty straightforward

Depending on what you mean by "currency conversion", that is not an easy problem at all. Do you allow multiple currencies in a basket? During checkout? What happens when currency rates change? There's some approaches that will be easier than others, but I'm not surprised you had to spend some time making it work. Unlike other shop solutions, at least Oscar allows you to make those customisations. And those are the kind of problems that will always be hard, and very business specific, hence out-of-the-box support is not really an option.

We should probably work on our documentation to clarify some of my points, and there's always room for improvement when making Oscar easier to customise. But at the end of the day, it doesn't sound like Oscar is the the right fit for you, and that's okay too ;)

Well, I'm learning Python, Django, and Oscar at the same time, so I don't really notice if Oscar strays from the Django way of doing things. I just do what the documentation says to do and it works! Speaking of which, it is nice to have such thorough documentation.

And I would argue Django is NOT a heavy framework (compared to my experiences in PHP). So far, it seems pretty light and fluffy to me. Like the whipped cream on my iced mocha.