@nitely has noted that Misago code organisation is undjangoish, which makes getting into it for those working with other Django projects problematic.
Little bit of history
Misago was born from "practice project" that I have created when I started learning Django roughly one and half years ago. Back then I had no experience about laying out large projects, which eventually resulted in Misago becoming incomprehensible behemoth of 44 applications.
In development it is extremely important to be able to move around code quickly and sheer number of tiny interlocking apps made looking up module contents or implementation details chore. This made me come to wrong conclusion that Django philosophy for laying out projects is ultimately flawed and unfit for large projects. This is when I have looked at other "large" Django projects for inspiration for better code layout, ultimately landing with what Misago has now.
As time moved I was making more Django software gaining experience and better understanding of how Django Apps should work. I was still unsatisfied with Misago code organization and started to seriously think about better solution.
Misago Now
Currently Misago code layout is anything but Django-like. If I was to associate it with any patterns, I would say it looks like it was done in CodeIgniter or some other closely tied framework from old times.
Views and Forms are either bundled together or laying alone in misago.apps
with rest of misago.*
namespace being reserved to models, fixtures and other modules that provide features to Misago views or each other. There is simply no clarity here for those coming from other Django projects.
Say I'm curious where is Board Index view defined. I go into misago
directory and there is no obvious place to look further. If misago
was project's namespace, I would then search for an app like "home", "index" or "boardindex". If misago
was an app namespace, I would look for misago.views
module to search in for in. But this is not the case now.
Rethinking code organization
Misago is too complex to use "app" approach that is used by, say, AskBot. If we went down that path Misago would ultimately end repeating original problem of being slow to navigate with humongous misago.forms
and misago.views
namespaces consisting either dozens of filies or few files with thousands lines of code. Both of those approaches are unacceptable for me.
Only alternative is to take "project" approach with misago
namespace reserved for applications and everything not qualifying as app (no models or linked views) going into misago.utils
namespace.