Hi, I'm Matthias

I am a founding partner of Feinheit AG and Die Bruchpiloten AG. Find me on GitHub, Mastodon, Bluesky, LinkedIn or by email.

2020-09-20

From PHP and SWISDK2 to Python and Django – 12 years later

Once at a time1 there was an agency founded by a few friends and myself. We were using PHP at the time and had our own framework, the SWISDK – Simple Web Infrastructure SDK; quite a mouthful. It supported many features which are now commonplace in web frameworks such as an ORM, a mostly autogenerated admin interface, forms which could be used together with models, some sort of routing, generic views2, XSS and CSRF protection, support for translations in the code and the database, images, galleries, comments etc.

I think I had Django on my radar for quite a while already. I liked the template language and especially the template inheritance feature so much that I reimplemented it as an extension to the Smarty template engine. Smarty has built-in support for template inheritance since 2009 but I didn’t profit from this anymore, because we migrated to Python and Django in 2007/20083 and have never looked back. This was after manipulators had been replaced by the newforms library (the current django.forms) but before the newforms admin and before Django 1.0.

I also took a long and hard look at Ruby on Rails as an alternative. Ruby used and uses too much interpunction for my taste. Writing this down does not make it sound or feel better – as a reason it still sounds as meaningless as ever.

The decisive push factors were:

  • For me, PHP wasn’t a fun language anymore. The inconsistencies were annoying at best (e.g. the order of needle and haystack in various function signatures).
  • Maintaining an in-house framework was to expensive in terms of hours and energy. The maintenance and continued development occupied a significant portion of my time and I just couldn’t continue taking the responsibility for this.

Pull factors for Python and Django were:

  • I didn’t get Django’s manipulators a year earlier but I immediately saw that django.forms were more-or-less a drop-in replacement for what we had in SWISDK2. Of course, Django has grown and improved since and SWISDK2 has been … dead.
  • Django’s administration interface (!!) – it was and still is an awesome piece of engineering.

Python and Django, both the language and the community hasn’t let me down and I hope the same is true vice versa. The excellent DjangoCon EU 2020 has only helped making me ever more glad about that choice.

Here’s to ten more years of Python and Django – also at Feinheit.


  1. A bit more than 14 years ago. I can hardly believe it myself. 

  2. Or rather viewsets. 

  3. According to the Django ticket tracker I already hit bugs in April 2008 while working on my diploma thesis; the switch must have happened at the end of 2007/beginning of 2008 then.