See Wagtail AI in action!
Published October 31, 2025
This video features Sage Abdullah at DjangoCon US 2024 in Durham, North Carolina, USA.
The year was 2018. I was studying computer science at the University of Indonesia. I learned Django as part of a web programming course. At the time, Django felt just like any other framework out there – it's part of the tech stack that you use.
A year later, I tried my luck with Django in Google Summer of Code. I took a deep dive into Django's codebase to implement the cross-database JSONField. The feature managed to make it in Django 3.1.
Fast forward to now, I've got a job in the UK to work on the Django-powered Wagtail CMS. Since then, I've had the opportunity to give talks at conferences in Europe and the US, including this one.
This is a story of how Django changed my life people's lives – and how you played a part in it.
In this talk, we'll go through:
How Django can be used to teach web programming
Django's participation in Google Summer of Code
The awesome Django community and what it means for us
What we can do to make Django change the lives of even more people
This talk was presented at: https://2024.djangocon.us/talks/django-the-web-framework-that-changed-my-life/
LINKS:
Follow Sage Abdullah 👇
On Mastodon: https://fosstodon.org/@laymonage
On X: https://x.com/laymonage
Website: https://laymonage.com
Follow DjangoCon US 👇
https://fosstodon.org/@djangocon
https://x.com/djangocon
Follow DEFNA 👇
https://www.defna.org/
Video production by Confreaks
Follow Confreaks 👇
https://confreaks.com
https://x.com/confreaks
Sage Abdullah explains how learning Django at university led to a Google Summer of Code project implementing a cross-database JSONField, which was eventually merged into Django 3.1. That contribution brought internship and full-time open-source work at Torchbox, improved his family’s financial situation, and showed him how strongly Django’s community can shape people’s lives. He encourages people to sustain that community by contributing code and documentation, reviewing pull requests, filing tickets, maintaining packages, testing against Django’s main branch, donating, organizing events, mentoring, and using Django. He also describes how mentorship has improved since his own GSOC experience and hopes future contributors will remain involved in the community.
Summarised automatically from the transcript.
Automatically transcribed, so expect mistakes in names and technical terms.
Speaker 1: Hello. Thank you everybody for coming and thanks to all the organizers for such a wonderful event. I'm so grateful to be here again. I'm Sage Abdullah. You can find me online at Layman Age on GitHub, Foster Dan, and other places. First of all, I was in two minds about doing this talk. I was afraid that this was going to be Sage talking about Sage on the stage and I couldn't engage whether people would want to engage, but I'll try. I'm from Indonesia and these days I work at TorchBox in the UK to maintain and develop WhiteTail CMS, an open source content management system built on top of Django. Back in 2019, I did Google Summer of Code
Speaker 1: or GSOC with Django as a student, and this year I was a mentor. I think it's safe to say that we all know Django's tagline, the web framework for perfectionists with deadlines. I don't know who came up with it, but it's catchy. I looked at the web archive and it's been there since the very first snapshot in July 2005. I hope Frank is going to tell us about this in his talk on Wednesday. Anyway, but to me, Django is the web framework that changed my life. And let me tell you why. So I first learned Django during my second year of Uni back in 2018 as part of the web
Speaker 1: programming course. It used to be PHP, but the previous year they updated the curriculum to teach Python for the basics. So it makes sense to use Django for the web. And yes, it's a screenshot of a slide within a slide. As part of the course, we were tasked to build our own website, which started out simple with just a model or two, some views and templates, and we added more features throughout the course. And by the way, I spun up this six-year-old project which used Django 2. 1 and it still worked. Anyway, we were given new assignments every week. And at one point we learned about making Ajax requests from the browser to the Google Books API. You can search for books and add them to your favorites.
Speaker 1: To store the favorite book 's data, I could technically just use a model with the book ID and use a foreign key to the user model. But at the time I thought having m one model instance for each book you saved is a bit overkill, especially when the book's data came from a third-party surface, in this case Google. So what did I do instead? I used or I guess abused sessions. You can use it as a dictionary and just use lists as the values. So perfect. I'll just throw the list of IDs to the session done. Well, almost because using sessions would mean that the data will be lost when the user logs out. How can I keep the data
Speaker 1: then? I looked it up and I saw that Django has a JSON field that lets you store dictionaries and lists. But it was only available for Postgres. And while we did use Postgres on Hiroku for the deployed website, we also used SQLite for local development, so JSON field was not an option for me So I was like, okay, how hard is it to have my own JSON field? If I can transform the dictionary into a string, I can save it into a text field. And then I just need some way to parse the string back into a dictionary. And that's what I did. I just used Python's built-in JSON library to serialize and de-serialize the data, and then I can save it to a text field. And that being said, if I were to do this today, I would just use a dedicated
Speaker 1: model with a foreign key to store the safe books. But well, I was just a student back then. After all that, I finished my web development course by the end of 2018. And a few months later, I saw an opportunity. This is the Google Summer of Code website back in 2019. And if you're not familiar with GSOC, it's an annual global program held by Google where university students can work with an open source Organization on a three-month project with in the summer, and they get paid by Google. Organizations like Django can list a few project ideas and apply to the program. And then Google will give a number of project slots.
Speaker 1: Then students can submit a proposal for the project they want to work on to be reviewed and accepted by someone from the organization. And Django has participated in GSOC every year for quite a while. And for each year, we put a list of project ideas on the wiki. I already knew about GSOC at that point, and since I've learned a bit of Django, I was curious what Django's ideas for GSOC was that year. And notice that it says in no particular order, but it just so happened that the first item on the list was across database JSON field. So that was basically the exact thing that I hacked together in my project. So I was hooked.
Speaker 1: And the thing with GSOC is that if you wanted to get in, you have to realize that there are other students like yourself. So you need to convince that um you have the right person for the job. You have to stand out among other applicants. It's it's just like job hunting. So before I started working on my proposal, I concocted a plan. I wanted to get at least one PR to Django merged. But hopefully more than just one. I started looking into the contribution guide and I watched the ticket tracker waiting for a new ticket marked as Easy Pickings, which is kind of like a good first issue label on GitHub. They come and go so quickly. And eventually I was able to land my first PR to Django after some back and forth.
Speaker 1: As you can see, there are 21 comments on the PR for something that's essentially a one-line change with three lines of test and some documentation. I learned a lot from this PR and it was a great experience. You get the general feeling and the common practices on how to make changes to the code base. This is important since you need to demonstrate that you are willing to learn, you are able you are able to follow instructions and you are patient, which may sound trivial, but it's actually a big deal in open source. And speaking from experience, I've seen people who rush to get things done and want their PR merged, but they don't follow the instructions from the maintainers, and that is not a good outlook. Anyway, then I got to more
Speaker 1: PRs merge, one of which was for a ticket that I wrote myself. And all of these basically were just one-liners, but they cover different aspects um implementation, tests, and documentation. And now that I have three PRs, I got started with my proposal. I wrote the goals, the approach, and the timeline for the project. And mind you, at the time I was I I just started learning SQL and the basic stuff like foreign keys and joins and whatnot. So I only had very vague ideas of how this project was going to work and looking back at the proposal I think it showed Um it's not a perfect pro proposal by any means, but I put it together um in between my midterm exams, so I did what I could.
Speaker 1: I posted it to the Django developers mailing list, got a few responses, and I made a few tweaks based on the feedback, and then I waited. And then I got this. My proposal was accepted. It was like 4. 30 in the morning and I got chills from reading this email. It was it was happening. So over the course of the summer I worked on the project and I was slightly intimidated when I saw that I had not one, not two, but four people mentoring me. It felt like the expectation was quite high, but thankfully I didn't have to start from scratch. I was standing on the shoulders of giants. Obviously, we already had the Postgres JSON field at the time, which worked wonders.
Speaker 1: But we also had external packages that implemented JSON field for other database backends too. We had it in Django MySQL, and we had one for Oracle. And there's also Django JSON fallback that combined the built-in Postgres and Django MySQL's JSON fields before falling back to a text field on others and many many other packages, some of which even predated the built-in Postgres JSON field So it should be easy, right? On June 9th, 2019, which happened to be my 20th birthday, I submitted this initial PR to Django. You can see how many people reviewed the PR on the right side there.
Speaker 1: And I have blurred the number of comments on the PR. Would anybody like to take a guess on how many comments we have here? 200? 400? It was three hundred three hundred and twenty-one comments. And this was just the initial PR that I kept on iterating. So at one point we decided to close it and open a new one to start fresh. And this is the final PR open months later in January 2020. GSOC already ended in August, so it's a while after that. And it wasn't merged until May 8th, 2020. So around the time COVID really kicked in. And then a few months later, in August of 2020, Django 3.
Speaker 1: 1 was finally released, which included the new cross-database JSON field that I worked on. Thank you. So it took a little over a year from when I submitted the initial PR to the day it was released, but hey, we made it. Raise your hands if you've used JSON field. Thank you. Glad you find it useful. Then I was invited by Carlton and Will Flinson to the Django Chat podcast. If you didn't know about Django Chat, give it give it a listen. This was my first ever podcast and still my only one so far. I was very nervous. I could have done better, but it's out there now. So if you do listen to it, please keep that in mind.
Speaker 1: And then a few months later, I got the opportunity to give a talk about the JSON float implementation at DjangoCon Europe 2020. But it was supposed to be in person in Portugal, but COVID happened, so it was done virtually. And this was my first ever talk at a conference. And later that year I had to find an inter an internship as part of my undergraduate degree, but unfortunately Due to COVID, it was so hard to get one. A lot of the companies did not open any internship positions, and many even canceled their programs. However, I did get lucky I have some friends who worked at an agency and they use Django, and one of them noticed my JSON field project from the Django chat podcast.
Speaker 1: So I applied for an internship with them and I got it, thanks to Django. Then I wrote my bachelor's thesis about my JSON-Field implementation and I graduated in 2021. And of course, even my graduation was virtual. on a YouTube video. COVID sucks. And a few months later, Carlton again hit me up about a new Django Discord server. It was not officially launched yet, so it was a bit hush hush, but sure I joined it. And I didn't really participate that much, but I looked for job listings from time to time since I just graduated. And then one day I saw this message from Debo, whom I didn't really know at the time. A job listing for a junior level developer at Torchbox, an agency in the UK.
Speaker 1: And they were doing remote hiring pretty much worldwide. So I looked at their website and then I found this A job listing for a Wagtail developer. The job is to work on Wagtail, the CMS, and for me, doing open source as a full-time job was my dream. So I looked at the requirements and I think pretty much I checked all the boxes. So I sent my application. And then I did a couple interviews and a coding task. I was interviewed by Tom Dyson, the CTO. And he also knew about my JSON field stuff, so maybe that played a role. But uh anyway, a few days later I got the job. And they wanted me to move to the UK as soon as possible, but it was such a surprise for me and my family.
Speaker 1: So I asked to work remotely for a few months while we sorted out my visa and stuff. And do you know what one of the first things I did on the job was? Well, MikeTel had their own version of JSON field that used the same text field approach. And around that time it happened that Wagtel was about to bump its minimum Django version from some older version to 3. 2, which includes the new JSON field. So naturally I was tasked to migrate all these existing text-based JSON fields into real JSON fields. And then I gave a talk about it at WhiteDellspace US, which is WhiteDell's own conference. But I did it virtually because I was still in Indonesia.
Speaker 1: And then a few months later, I moved to the UK This is me on the Clifton Suspension Bridge in Bristol during my first week in the UK. And then just a couple of weeks later, I went to DjangoCon Europe 2022 in Porto in person this time. And can you guess the people I met there? My GSOC mentors. They are some of the absolute legends in the Django community, and I was so, so happy to finally meet them And you know what they say, don't meet your heroes unless they're from the Django community because they're awesome And that was two years ago, and the rest is history. A lot of other things have happened since, but what I've shown you so far is enough to give you the idea.
Speaker 1: But that's not to mention the effect of all this on the people around me as well. My family's financial situation pretty much had a complete turnaround. We were struggling to keep our feet up and COVID made it even worse. But now it almost seems like it was just a bad dream, all thanks to Django. It started with me learning Django and the rest didn't happen overnight. It was it's a snowball that keeps on rolling and I've been very, very lucky to have all these opportunities. It's it's a privilege So I'd like to thank the biggest factor that made it all possible. The community. None of this, none of this would have been possible without the Django community. The Django fellows,
Speaker 1: all the past and present fellows. They're absolute legends. Other contributors who discuss and triage tickets, reviewing PRs, Django package maintainers. Django users, Django event organizers, attendees, and and you, whoever is watching it this right now in this room. or virtually from your own bedroom or later on YouTube. If you're watching this, you play a part in keeping Django alive. And I want Django to have such an effect on many, many other people for me to just be one example, one example out of many other people from all around the world. So how do we keep how do we keep this going? Well, this year, Django still participated in GSOC.
Speaker 1: We had four projects compared to two when I did mine in 2019. different projects with different mentors and different areas of Django to improve. And now you no longer have to be a university student to join. So anybody can join and anybody in the community can take part in other ways. You can suggest project ideas, or if you like it, you can also be a mentor And this year I mentored a project that adds support for updating JSON fields on the database level. It's like an SQL, uh sorry, a sequel to my project. It has come full circle. And five years later, it's very interesting to see how much of the code has changed and how much has stayed the same.
Speaker 1: And there is also Outreachy. It's a similar program to GSOC, but it's aimed towards supporting diversity Whitel has participated in Outreachy a few times and I can tell you that our interns were some of the coolest people that I've worked with. And while Django has not participated in Outreachy so far, I think it's something we should look into in the future And we also have our own DjangoNot space, a mentorship program for people who want to get into contributing to Django. I think this is one of, if not the best, initiative for Django ever, maybe even in open source. And if you're interested, check out DjangoNot. space. There's a panel discussion on Wednesday about Django mentorship, so we can hear more about it
Speaker 1: And there's also a talk about Django Note space by Don and Rachel from last year's DjangoCon US, and I highly check uh recommend checking them out. So, those were some of the programs that we can take part in to bring new contributors to our community. And there are things we can do as a community to keep Django alive. So one of the most obvious is to make the Rs to Django. Submit bug fixes, enhancements, documentation improvements. Sure, it's not the easiest thing, but it's very, very rewarding. Seeing that purple merge icon on GitHub and your name on the contributors list, it's one of the best feelings ever. So if you want to get started, join the Sprints later this week.
Speaker 1: And aside from making PRs, you can also review them. Reviews can come from anyone. It doesn't have to be the Django fellows. It's not only Natalia and Sarah who can do reviews, you can too. The Vellos will take care of the merging later. And you don't have to know the entire Django code base to review PRs. With how big Django is, I don't think anyone does. But if you use Django enough, you'll be familiar with where things go. And remember, these PRs will eventually become the things that you use as a Django user. So reviewing PRs from the perspective of a user really helps shape the APIs to be as friendly as they can be. So go out there and start reviewing.
Speaker 1: And if you use Django enough, you'll encounter moments where you wish Django can do better. Maybe you find a bug or a potential feature or a paragraph in the documentation that you wish were there. Write a ticket, explain the situation and how you think how you think it can be improved. Maybe others feel the same way or maybe nobody has thought about it. And then maybe someone else works on it and get a PR merged into Django, giving you what you want without you having to write a single line of code. Or maybe it gets rejected, but it's okay. We have disagreements from time to time. You can bring it up on the forums And we had well, maybe we changed our minds. And here's a fun fact: the ticket for JSON field
Speaker 1: in Django was initially rejected. So if your idea gets rejected, do not be discouraged. And maintain packages. Django has batteries included, but the superchargers are sold separately for a good reason. The JSON field we now have in core wouldn't be possible without the existing packages we had in the ecosystem. So if you're a Django package maintainer, thank you. Okay, this is an easy one. If you haven't already, add an extra setup in your CI matrix to test your project against Django's main branch. Whether your project is a Django package or an actual Django project, test against Django's main. This helps catch bugs and compatibility issues early, and it applies to both sides.
Speaker 1: You can anticipate Any API changes much quicker, and if all is well, you're going to be more confident in upgrading to the final release when it comes out. And in some rare cases, it might turn out to be a regression in Django, which is actually great because it if you report that and it gets fixed, you'll save other people from having the same trouble And we do this with Whitel. Um, there have been a few times where we noticed some regressions and we reported and or submitted the fix. Everyone wins. And if you've got some extra money, but not the time to do any of the triff stuff, this is also an easy one Maintaining Django costs money. The ESF pays out the Django fellows, and that money comes from donations, so
Speaker 1: make a donation. And participate in events just like this. And if you want to take it a step further, you can help organize the events. There's plenty of opportunities to volunteer. So if you're interested, just ask the organizers And when you return home from DjangoCon this week, check out your local Django meetups. In the UK, we have a Django meetup in London, and there are also the Django social groups. um in other places including here in Durham. And finally, just use it. Use Django. This is a screenshot of Django's usage statistics on GitHub. I don't know what happened there when I took it. This was not edited. I think there must have been a bug on GitHub because that's a lot of cats.
Speaker 1: Unless maybe some of us are cats. Do we have any cats in the room? Anyway, one of the reasons why my uni teaches Django is because it's widely used in the industry, and if nobody used Django, I wouldn't be here today. So use Django. And that's it for me. Thank you.
Speaker 2: Wonderful talk, Sage. That was amazing.
Speaker 1: Thank you.
Speaker 2: What were some of the differences you experienced in Google Summer of Code as a mentee to mentor and what advice would you have for other mentors?
Speaker 1: Okay. Um the difference in me personally uh in the in the experience when I was uh Menti. I think back then Django was um and uh we didn't have enough capacity to mentor uh the projects so it was mostly um the mentoring was done async on github so I just push my new code and then it gets reviewed and we we would just communicate on GitHub basically. But these days I think we've done a much much better job with the mentors having weekly catch-ups with the mentees and that's been a great improvement And I my advice to other mentors would be to
Speaker 1: keep communicating with your mentees and um try to convince them to stay after GSOC ants because in some cases um the students would just not stay in the community and just leave. But which is fine. It's it's we we cannot force them to do that. But maybe with some convincing it's possible.
Speaker 3: Thank you very much for sharing that with us. Where do you think we should be in, say, you know, you looked back to 2019, so that's five years. Where should we be in five years time? with the way we approach our uh programs of internships and and mentoring in Django.
Speaker 1: Right. I I would hope yeah we will we will have a lot of newer generations of contributors that stay in the community and we will j see a lot more people in this room today and My talk with will will just be one example of many, many others in the future. So yeah, I think that's what I hope we'll see in the next five years.
Speaker 4: All right. Wonderful job, Sage. Let's give Sage another round of applause.
Sage recommends making real contributions before applying, starting with approachable tickets and getting pull requests merged. This demonstrates that you can learn the codebase, follow maintainer instructions, and work patiently with reviewers.
Discussed at 5:45He built on Django’s existing PostgreSQL implementation and related third-party packages, then iterated through extensive review on the pull request. The work was eventually merged and released in Django 3.1.
Discussed at 8:52Learning Django led to his JSONField project, conference talks, an internship, a full-time Wagtail job at Torchbox, and eventually a move to the UK. It also substantially improved his family’s financial situation.
Discussed at 12:00You can submit code, documentation, or bug fixes; review pull requests; file well-explained tickets; maintain packages; join mentorship or Google Summer of Code programs; and participate in sprints and community events. You can also support Django through donations, organizing, or simply using it.
Discussed at 18:20Testing against the development branch catches API changes, compatibility problems, and regressions earlier, giving projects more confidence when upgrading to a release. Reporting or fixing regressions also helps other Django users.
Discussed at 21:30When Sage was a mentee, mentoring was mostly asynchronous through GitHub reviews. Django now provides more structured support, including regular mentor–mentee catch-ups; Sage advises mentors to communicate consistently and encourage participants to remain in the community afterward.
Discussed at 23:43Note: We understand that names change, people change, and bodies change. We respect each individual's journey and privacy. If you have any concerns about a video or need us to remove content, please don't hesitate to contact us. We will handle your request with care and promptly address any issues.
Published July 15, 2026
Published July 15, 2026
Published July 15, 2026
Published July 15, 2026
Published July 15, 2026
Published July 14, 2026