Transcript: Jazzband - Matthias Kestenholz
hi and welcome to another episode of django chat weekly podcast or fortnightly podcast on the django
web framework i'm carlton gibson joined as ever by will vincent hello there will hi carlton how
you doing you good i'm good yes i've got a new microphone so it'll eventually be better it might
be a little less audio quality than the past ones but we'll see okay you'll have to give us feedback
folks and today today we've got a special guest um matthias kessenholz with us uh hello matthias
how are you doing hi everyone i'm doing very well and i'm a little bit nervous but i'm looking
forward very much to this chat that's good thanks for coming on show you're nervous i'm a bit nervous
because you two are all wearing django t-shirts and django hoodies and i'm and i forgot to dress
for the show today so yes we'll have a link to the official django merchandise in the show notes
but you're wearing the the Django con Europe hoodie Matthias right yes yeah yeah so all the
virtual conferences I think all their stuff is on there now as well as the default Django so
check it out there you are a bit Django swag so Matthias tell us about yourself what's your
backstory how did how how how'd you come to be on the podcast so I have started working with Django
over 12 years ago now
I've worked with PHP previously
but I just enjoy working with Python and Django
so much more
and the community of Django was also important
just pull factor for me to decide
to start working with Django
it's just a framework I really like
and it's a community which taught me
things which i probably wouldn't have learned otherwise so that's great for me once once bit
and never never go back no yes well so then uh how did you get into php and just programming in
general before that so i i was always fascinated with handheld calculators and i sold all my stuff
as a kid when i was in seventh or sixth grade i think to buy myself a graphical calculator
an hp 80 48 and i learned all about it um back then the programming and the mathematics and
i just enjoyed it so much to tinker around with this stuff uh later i didn't want to stay in
programming too much because i wanted to become an environmental scientist and things got out of
hand a bit because i um got to know a few people and founded a political party with them and then
we also founded a company which i'm still working at now and i just thought it's it's more important
to go into marketing and work for the good people than just go into um and into climate science and
find out once again that we should really change something uh change how we how we live a bit maybe
and so so that the programming was just a thing which i always enjoyed but the mixture of
programming and working for a good cause is at the end what what brought me into web development
and i'm still here 15 years later tell us about the company and the causes and the kind of projects
you work on because that sounds really interesting the company is fine height and it is a company i
founded with five four or five friends um 14 years ago now and we did we did do work for for
different um companies not only but the the things which motivated me most back then was just to go
into campaigning and program campaigning pages we did some work for for the wwf and greenpeace
maybe for the greens and mainly for left-leaning political parties um or just for grassroots
movements ngos and so on we are also doing work for for other companies but we have so to say a
deny list of companies who we don't want to work for we don't only yes so that's that's quite
important and that stayed with us over the years while people changed and the things we do did
change changed that's really cool because you so you're kind of like the web agency for social
justice we try to do that yes well in torchbox also has a non-profit focus as well the to do
wagtail so well i think it i it doesn't surprise me too much because maybe django also as a
framework or as a community has a certain um pool for for people who want to do the right thing
because django was one of the early mover with the code of conduct django was an early mover with
Django girls with all these
initiatives to
improve diversity
and so on
I think that was
that's probably a thing
which possibly also
puts off the bad
guys maybe from working with Django
at least
one could think so
but it's certainly a thing which
keeps me here and doesn't
I'm not motivated
to find other technology or the new stuff i i'd rather stay with uh django which is really stable
and maybe a bit boring but for us that's that's a good thing yeah i'm gonna fight you when you
call it boring i'm gonna say it's super exciting because it's exactly because it's stable and we
can have the latest json fields and all the rest and we can update the first the day it's released
and no it's not going to break it and i think you know let's not fight over that let's rather
that's boring can be really exciting yeah no totally this before we move on there's two things
i want to say but one was exactly that that feeling about the django community i for years
i was using django i never really got involved i never went to django cons never went to conferences
and then i went to django con europe in florence and you know a the diversity mix i've been to
other tech events where it's like you know one female um and a django con isn't like that at all
and the the other was the the range of topics where they're talking about you know diversity
hiring and inclusion and you know by cognitive biases and all these topics which i can't hadn't
really even thought about it was like wow i've been missing this so much um so that's that was
the one thing the other was fine height in the notes here you've got organized using
a holacracy what's that i didn't oh that's the that's the zappos thing yes exactly so sorry to
to put an american spin on it no i mean the holacracy is an american thing um it was invented
i think by brian robertson with who is an american entrepreneur um holacracy is an organization so
an operating system for a company it specifies a set of rules how companies should should work
And one of the important things about it is there are or there should be no implicit expectation towards other employees.
You try to make everything explicit and you try to write all expectations down into in roles.
And then you can just energize these roles or you can just give them away freely.
So it is a way just it's not a completely flat structure, but it is in a way a flat structure where people have a little bit where power and responsibility is at the same level.
So if you want more power, you have to take more responsibility. And you can't have power without responsibility. And also you can't have responsibility without power, which are maybe the two things which are most problematic if you work in such an environment.
I don't know whether you have worked at such a place anytime I have.
And it's really annoying.
And holacracy sort of is one possible way of reinventing the organization structure.
And it works really well for us.
And I think people should have a close look at it.
There are other ways to structure companies, and Holacracy definitely isn't without fault, but for us it's working well.
Okay, interesting.
I think there's quite a bit of self-selection in Holacracy, or at least in my experience, even in startups in San Francisco.
One thing I was surprised about is that I was...
I'm, I'm a self starter, the founders of companies are self starters. But not everyone who's smart
and hardworking is a self starter or wants that responsibility. Like we had one very early
employee in particular, who the founder and I kept trying to give her trying to give her room
to take on responsibility and not be told what to do. And ultimately, she ended up going to Twitter,
she just wanted to be told, which was interesting, because I think before I'd assumed that
if you were hardworking and intelligent you would want more autonomy but her mind and i think quite
a few people's mind don't fit into that so that's sort of the culture of startups one thing i learned
after that is to really try to ask questions that get around are you the type of person that does
well in an unstructured environment which i think overlaps a little bit with holacracy where you
take the initiative but also you take the responsibility it's not it's not for everyone
I think just one important difference for me is I was very surprised that our first employee didn't want to join our ranks as well, so that he didn't want to buy shares. I couldn't believe it back then. These days, I understand it very well, especially when looking back to the type of company we were back then.
But holacracy still allows you to not have many responsibilities, but then you don't have much power either. And that may be fine for you. And also all these implicit expectations where other people, it's not implicit, it shouldn't be implicit.
It should be very explicit, because if your former boss comes to you and expects a thing of you, you can just say, well, I don't see this accountability anywhere in my roles.
And then you can go into a governance meeting, which has a quite rigid structure as well.
And then you can process this tension, how it's called in holacracy.
And there is just a way for everyone to, if you know for yourself what you need, then you can more or less get it, or at least that's the idea.
But of course, well, not everyone is the type who knows what they want, and that will be hard for them anyway.
And yes, so we have a few problems, but maybe that's tangential now.
I don't know.
I have to think about that, especially when speaking English, what I want to say.
I don't know.
No, but these sound like difficult problems in any organization, right?
So it sounds like it gives you a good framework or a framework for addressing the human interaction
and the role interaction problems that come up in any organization.
The switch to tech, I want to note, so your first contribution was 2008, I believe, you put in the docs, which is 12 years ago.
I was surprised myself.
Could you talk about just, I mean, I know it's 12 years ago, but what was that process of you were using Django, something came up, and you, because Carlton and I spent a lot of time trying to encourage people to contribute to Django and make it less intimidating.
But you just was it, I guess, was a work problem you had? Or what was the, if you recall, the specific issues you say in the notes, it was to do with your master's thesis?
Yeah, so I did a master's thesis on GIS based regionalization of lifecycle assessments. And we had, or I think we were using generic foreign keys quite a bit, or maybe it was standard foreign keys, I don't remember exactly.
And it was just, if you have had several foreign keys pointing to the same model, the query, the SQL query engine got confused and it was just an edge case I hit.
And I think I just contributed a more or less detailed report and the problem itself was fixed by someone else.
The first problem, I think, where I really tried contributing a fix
was a problem I encountered with the template language.
And since I had been working maybe as a programmer for several years
and maybe Django was a little bit younger or even pre 1.0,
maybe it was less intimidating back then.
and I just went into the ticket tracker and proposed a patch.
It wasn't the first open source contribution either,
because I already contributed a few patches maybe to Git and to other projects.
So it wasn't the first time I interacted with an open source project.
But later on, I got maybe confused a bit myself with the Django contributing process and just the standard for the stability, which is expected and which I also understand and like in the Django project sometimes did make it hard to get the change merged, especially before the Fellows project.
I mean, the Fellows project that helped very much.
A lot of what the fellows do is exactly this. Taking a patch, reviewing it, saying, hey, we need to change this. This will break backwards compatibility. We need test coverage here. But it is, it can be a long process. You know, it's like two or three reviews to, you know, dot every I and cross every T on your patch to get it merged, which I understand could be frustrating.
but i guess i always say to people well what's the other side is django good you know when you
download django and you use it do you trust that it's going to be of a high caliber so
yeah i think the the problem is is less that i mean of course there there is the issue of
code formatting or maybe a really minor so-called minor problems which are frustrating if there's
a back and forth of them but the problem a few years back was more one of you didn't even get
and review. And for example, Jacob, one of the original authors of Django,
I think they instituted this program where you could review five patches and then you had a
guaranteed review of your own patch. But that didn't work really well either for obvious
reasons but i mean it was just a good maybe a good try to to fix this problem of the patch queue
yeah no i mean it's still difficult like you know maris and i are working you know maris is full
time i'm part time and we've still all the time got 20 20 plus patches on the list plus you know
150 prs that are at some stage of ready not ready you know sometimes what is really helpful you know
people come along and they take five ten minutes out and they look at a PR and they say hang on
this is not too bad or this is okay or this needs that and it just bumps it forward and it enables
it to pop over the um out of the sea of pull requests and it enables Maris or I to grab hold
of it and say okay that one's that one we can move forward sometimes the the pull requests feel like
a bit like a denial of service attack I tried doing that a few weeks ago and then I noticed
again and again that there are just so many issues which which i don't see because i haven't
been working on this project as much as you have for example and that's just sometimes i'm not sure
but but there are times when i feel bad for accepting an issue or just um reviewing a pull
request and maybe leaving a positive message and then you have to come and fix everything
no no it's it's really well look from from my perspective i i think believe maris agrees he'll
you know text twitter in if we've spoken wrongly for him but it's really helpful to the fellows
for other contributors to do reviews or to triage a ticket it just helps you know and if there's
something that you know if you've got a pi and you think it's nearly ready and you mark it ready
for checking maris and i know that we can go and give it a review and if it's not we'll just bump
it back but if it really helps you know it really takes that because the difficulty is that there
are so many tickets so many pull requests is identifying the ones which you can make progress
on quickly so that does help two things i wanted to talk about the two things you're known for
right one is that you're part of jazz band and the other is fine cms which which do you want
to talk about first?
Maybe let's talk about FineCMS first,
because that was just chronologically,
it comes so much earlier than my contributions to jazz band.
OK.
So tell us, what is FineCMS?
What's the elevator pitch?
The FineCMS is a really small module on top of Django.
administration interface which allows you to mix and match different blocks
content blocks instead of having only the Django inline mechanism for example
you can if you want to have a page or an blog entry you can add a rich text
content block and then you can add an image block and then you can add a rich text block again and
so on and so on and these content blocks are reusable plugins um and i mean the the interesting
thing for me is just that there is uh that that all of this should be reusable not just for pages
but also for blog entries for for shop items and it is more of a content management framework maybe
than a content management system that's the important distinction what would you say
describe a content so content management system we kind of can use to make pages we could use to
make blog posts what's a content management framework what do you mean when you say that
if you work with wordpress for example you just have pages and blog posts and you have nothing
else and if you work with django you have this possibility of creating a model for for each
maybe a real world entity that you're working with you can create a model for a person you
can create a model just for a project and then you can create a model for for um just for some
painting they did and then you can create all these relations which connect these entities
with each other as it that that's what a really relational database is all about for me
and if you've got to know that the power that you get when you structure your content well
and all the automatizations you can make you don't want to go back to structure your page content in
the same in the old way again where you just have one big blob of of rich text content maybe but you
want to reuse this structured content and pull it into this CMS and many maybe also Django based
many CMS systems they just offer you this list of features and then when you want an additional
feature you're on your own and FindCMS offers you these tools and building blocks to build
a customized cms yourself for for every site which doesn't have all these fields and check boxes
which you don't need at all and one thing i like about it is it's very close to django if it always
feels like you know it it's just django yeah that that was that that was important for for for us
because uh at the beginning we just maintained this ourselves and we just wanted a really thin
layer which reused almost all of Django because we had so much so much success with the built-in or
the bundled administration interface we didn't need to educate people how to use it and we didn't
want to build our own just our own administration interface and then we because if we did that maybe
it would be better for a moment it probably wouldn't but maybe it would be and then we'd
have to maintain this down the road and we already did this a few years ago when when still working
with php we had our own framework we had our our own cms and it was just so much work all this
maintenance that we didn't have the time to to do customer uh projects and because of this you're so
busy maintaining the cms that you're not getting any actual work done yes exactly and i mean if
that's just a toy project then that works well but but once you once you start using it just on
dozens of sites you don't want to have all this maintenance burden okay um so what are the big
ideas with fine cms what's the how would you you know because you've got um the things that jump
out for me the content editor and the the you handle tree the tree structure of the site very
well it's one thing i wanted to talk to you about so let's take the tree structure tree queries and
sql databases don't tend to go too well together right yes they don't and um when when i when we
started find cms in 2009 or i think it was 2009 i started searching for for a management solution
And I found Django MPTT, the Modified Pre-Order Tree Traversal, or in the literature, I think it's also called Nested Set.
And it's just a way to add additional attributes to a model which should make querying a tree faster,
where you don't have to you have to you you have to root node and then you have to fetch all the
children and then you have to fetch all the children of all the children and that's really
inefficient or it was really inefficient back then and you don't want to do all this back and forth
from python to the database and then to python again so what's the what's the solution because
i've always tried to so i've got to the stage in my old age where i'll just save everything as a
flat um you know flat items without the tree structure and then i'll serialize the tree
structure separately and just you do an inquiry to fetch all the items and rearrange them because
i don't like going back to the database and fetching all the children of the children of
the children so what's what's how how should i be doing that efficiently you should these days if
if the tree isn't too big and if you don't know that you really need a different way to do it you
should just add one parent foreign key to each model and then you should use recursive
commentary expressions to fetch this data from the database. That's just a way to move the
recursion which you need to build a tree into the database and not do it in Python because the
database is these days it's it's fast enough and that was an idea i got actually from from one of
the um guys so i don't know his name but it's it was a it was a guy working on this cause because
they said this even at this cause we we are using commentary expressions to do this they are fast
enough and i thought if it's good for this cause then it will work for us too yeah interesting
because i mean i guess in principle a a nested thread or a site structure could be infinitely
deep but it never really is right it's it's only three four layers at most and yeah and even if it
is 10 layers deep the database will be fast enough if you're using postgres or mysql8 or
recent versions of maria db they all understand this um this sql construct and that works really
well okay and you have the tree editor in fine which sort of wraps all this up and gives us a
nice ui for editing yes exactly um one of the problems you don't get when you use this three
queries cte stuff which and which you were prone to get with mptt is that mptt has redundant values
in the database and they are corrupted from time to time and then you have to rebuild your tree
structure and that's really annoying and i'm saying this as a heavy user of mptt and also a
co-maintainer you can use it and i won't drop it but maybe if you don't need this performance then
maybe use something else which is normalized and where you do not have redundant values which are
prone to break from every now and then okay interesting so say i want to get going i've
listened to the podcast i want to get started what should i use because there's kind of two
versions of fine right there's the version one and then there's is the newer version is what
what's your take there uh you should look at the fine cms3 um suite of tools you should look at
And you should probably start with the FindCMS3 documentation, which has a link to an example project, which is really small.
And you should be able to get it up and running in just a few steps or manual steps.
And it's called FindCMS3 example.
And I think that's the best place to start.
One is just the old workhorse and we will maintain this for years to come, I hope, especially because we have many or a few big projects which are depending on it, but it has a bit too much magic.
in it and you really want to stay with fine cms3 it's it's simpler and has a better focus for what
it wants to do okay and you wrote a post recently which we'll link to in the um in the show notes on
how fine cms is still relevant now because there's wagtail there's django cms there's other
things out there but you were making the case for fine cms in that post oh i should maybe rework that
because in my mind it's just it's just fine cms as a family of software projects but
i should really talk about fine cms 3 then or maybe i misunderstood you no i'm just saying
there was a good i mean this is it came back to my mind because you put up that post saying it
was still relevant and you know the one that a lot of people are using now is wagtail and
one thing you brought out was the differences between wagtail's approach and the approach
at fintechs so i mean find cms just but in 10 years ago or maybe eight years ago when people
talked about django based cms's find cms was almost always part of the list that was selected
for for comparisons and these days it isn't because it's just it's it's niche and maybe it's
Or probably it's a bit unknown, which is probably also because I'm just not very good at marketing it.
But in a way, I mean, it's just fine if it works for us and it's small enough to not be a burden for us regarding maintenance.
But I would love if more people would just learn about these ideas.
Because, for example, Wagtail gained a stream field a few years ago.
And this stream field, as far as I understand it, does exactly the same thing the FindCMS content editor does.
And they started to use a similar model, too, but just several years later.
I mean, the Django CMS from DVO, which is Zurich-based company too,
by the way, I know the founders as well.
They had a few of the same ideas as well,
but they executed them differently, obviously.
Okay.
I mean, so one thing I'd say about it is that it's worth giving a go.
If you've already got a Django app
and you just you want to add on these content management or these content frameworks stuff
i find fine is good for that because it it kind of integrates with what you've already got it
rather than coming along and to replace and that's that's for me that's a nice selling feature
it's like you keep to keep doing django rather than replacing it with something else but you know
um anyway well let's move let's move on tell us about jazz band as well because jazz band
what is jazz band so what sort of projects are part of it because there's there's there's lots
of the classic third-party packages right yes many of these packages were just developed by
by by a few people for years and years and they wanted to find a place probably to to move
or when they wanted to um to leave the development to to someone else they had to find
new maintainers previously and jazz benches offers a place now to move these projects to
and there is a community of people who who are hopefully able to take up the bat and continue
maintaining this this project i think any any given project like doesn't necessarily take too
much but it's just that it's wearing because there's a constant stream of incoming tickets
and like then every new django version you need to bump all the dependencies and you're a new release
and you know these kind of jobs add up and if you if it's just you by yourself it can be like
yeah and all of these projects just they don't have this fellows um system yeah right which is
a pity but yes so the project yeah the jazz band projects where i'm doing um much work or the the
projects where the project where i do the work i do is mostly just django debug toolbar
which is amazing right yes it is and i see my job may i i looked at the commit statistics
a few days ago and i noticed that my contribution is mainly also in the place of i mostly doing
reviews and merges and releases i don't write much code myself but i got into maintaining this
project because i want i think i wanted to upgrade to django 1.10 where the middleware
setting changed and django debug toolbar didn't support it back then and jazz band just offered
me a way to jump in and just submit this feature or this fix myself and the previous maintainers
were maybe burned or bummed i don't know how to take responsibility around it and
i just thought well that that maybe django sometimes would be as i said before
my quality standards maybe aren't well enough for django but there certainly are are um
so i i know django debug toolbar quite well these days and i think i can judge the the
pull requests whether the quality is is correct or not and then i'll just throw out a new release and
it just feels really good just to be a part of something bigger and that's what chas band
offers too that's super i think it's a really good way to give a little bit back to the community i
always say i always describe my experience of getting into open source where it was like um
it was just like a hobby i do you know a little bit here and there just you know on stack overflow
or on the GitHub tracker on Django REST Framework.
And then, you know, the danger is get this burnout thing.
The danger is giving too much.
So like any hobby, you know, if you were going to Tai Chi classes,
you'd go on a Thursday night, you'd give it a couple of hours.
You wouldn't do it, you know, four hours every day
because that would be insane, right?
So if you are going to get into open source,
A, you know, bracket it.
Say, yeah, I'll give it a couple of hours a week.
That's fine.
And that's probably enough to contribute to a project.
And then Jazz Band is an awesome way
because there's Debug Toolbar, there's Django Configurations,
there's all sorts of awesome packages.
I can't remember them.
A community of people who are there to help you.
You know, you can do a bit, they can do a bit,
and it's not somebody on their own getting burnt out of the defense,
maintaining the project they sweated over.
So anyway, super. I'm all for that. Brilliant.
Matthijs, is there other stuff you want to talk about?
No, I really don't.
I just think, well, don't feel afraid to try to contribute.
And maybe it's enough to just jump into the ticket tracker
and submit an issue or just submit the pull request.
I think you'll like the experience.
We'd love to have you and welcoming of us we can be.
And I really hope the schools stay open, maybe.
that's that's probably oh who knows that's a really 2020 issue right we had what are they
open in switzerland sorry carlton to interrupt yes they are open right now but i mean it looks
really bad we have it's regarding the ratio i think we overtook the u.s a few days ago
just the infection ratio
and I don't know
how long this will go on
so
we were talking about wearing
masks yesterday evening
maybe in the office
but I'd rather stay at home
anyway because it's just
I can do so much
better work and concentrate
more as an introvert
I sort of
like this that now I can stay at home
so much and go for a run instead of just drinking more coffee so that's great for me
swing some roundabouts no and even with the kids they stay they they ask less questions
than people in the office but maybe you want to cut it out that's not
Okay, so right. Well, let's, let's call it a day there. That's super. Thank you so much
for coming on. And, and folks at home give FindCMS a good try. It's an interesting platform.