PyDev of the Week: Aymeric Augustin

This week we welcome Aymeric Augustin (@aymericaugustin) as our PyDev of the Week. Aymeric is a core developer of Django, a Python web framework. He is also an entrepreneur and speaker at several Django related conferences. You can catch up with Aymeric over on his website or check out his FOSS contributions on Github. Let’s take a few moments to get to know him better!

Aymeric Augustin

Can you tell us a little about yourself (hobbies, education, etc):

Do you know how to spot a Frenchman? That’s always the first thing they mention! Now that’s out of the way…

These days my hobbies center around being the dad of three wonderful girls 🙂 We’re doing a lot of physical activity together: swimming, cycling, gardening, playing music, etc.

I’m managing a software engineering department of about 200 people at CANAL+, a French audiovisual media group that operates TV services in several countries.

I was trained as a generalist engineer, eventually specializing in Computer Science and Information Technology, but I learnt most of what I do on the job.

Why did you start using Python?

In 2006, a friend told me about this great, simple language called Python. At first I dismissed it: I said that PHP was simple enough for anything I wanted to do. This ranks quite high on the long list of stupid things I said 🙂

One year later, I was doing an internship at (now defunct) Zonbu, living the startup life in Palo Alto. That’s when I wrote my first Python application. It was a desktop GUI for encoding videos such that they’d play on iPods or on the just-released iPhone. I built it with PyGTK and glade. Under the hood, it ran mencoder and MP4box.

I dug out the source code from my archives for this interview. Not only did it use tabs for indentation and backslashes for line breaks, but it also sported an elegant logging system:

if __debug__:
print("INFO: Initializing BackgroundEncoder")

Then, in 2009, in my first job, I wrote two non-trivial Python projects. I was working on an in-train entertainment portal. The first one centralized onboard communications between the web portal and the network infrastructure. The second one managed content synchronization depending on available network connectivity. I had discovered the concept of automated tests and I was very proud of my test coverage.

What other programming languages do you know and which is your favorite?

My first language was Basic, first FutureBASIC in 1995 and later TI-BASIC. Then a friend introduced me to HTML and the World Wide Web in 1997. Together, we made a website for our high school.

My Computer Science courses were mostly in Caml — a great language for the mathematically oriented but little known outside French academia, Java, and C. I also had the opportunity to try other interesting languages such as Erlang, Factor, Haskell, and Scheme.

I still enjoy writing small bits of C, mostly for Python extensions. I haven’t used Java since 1.5 was the latest and greatest. I can’t claim I still know it. I tried C# .NET around the same time. I didn’t like it because the documentation always told me what I knew already and never what I wanted to know.

Outside courses, I wrote a lot of PHP. If you’re reading this, you’re probably aware of the challenges of writing significant projects in PHP. However, I wouldn’t be here without PHP, so I’m grateful that it exists. Step by step, I went from static HTML to small dynamic bits, then to factoring out repeated sections, then to writing my own mini-framework, then to Python and Django. That was a good learning path.

Professionally, besides Python, I’ve been writing JavaScript and CSS. I taught myself modern full-stack development when I co-founded Otherwise — because being the CTO at a start-up means you’re the only developer at first. Earlier in my career, I also wrote some Ruby, but I was more comfortable with Django than with Rails.

Purely from a language perspective, I still like Caml a lot. I’m certainly romanticizing memories of when I learnt programming 🙂 Anyway, sometimes I feel like I’m a static typing fan lost in Python land!

What projects are you working on now?

I’m mostly maintaining websockets these days. That’s a good challenge in two areas where I still have a lot to learn: concurrent programming and good documentation.

Currently I’m thinking about decoupling the protocol from the I/O. I’d like to build alternatives based on trio and curio. However, this would be a large refactor of the current implementation based on asyncio. Its benefits are mostly theoretical. I’m still wondering if I really want to spend time there.

I started websockets when Guido van Rossum was building asyncio, which was called tulip then. I had a use case at work for which the WebSocket protocol seemed like a good match. Inspired by the marketing of requests, I decided to build an open source library that would become a success thanks to a great API. I missed that marketing was at least as important as API design 🙂 Still, websockets became modestly popular. I left that job a few months later. I never used websockets for anything in practice. It’s a hobby for me, which gives me a lot of freedom to experiment.

I’m struggling with an unintended consequence, though. Judging by GitHub issues, the main use case for websockets seems to be connecting to cryptocurrency trackers. I wish I wasn’t contributing, even indirectly, to this environmental disaster. (Bitcoin miners burn far too much coal and add far too much carbon dioxide to the atmosphere. I know about theoretical alternatives but I’m more interested in reality as it stands. Bitcoin consumes as much electricity as Austria and has no mainstream use case besides speculation and buying illegal goods.)

I understand why the open source ethos rejects restrictions on how software is used. Still, it’s frustrating to give my time and energy freely to people who act directly against my beliefs.

Which Python libraries are your favorite (core or 3rd party)?

I have only good things to say about whitenoise. It’s liberating to serve static files efficiently with a WSGI server and let a CDN do the rest.

I like challengers that fare better than the mainstream solution on one aspect I care about. I prefer waitress over gunicorn because it’s less vulnerable to slowloris attacks, so it doesn’t require setting up nginx. I use django-s3-storage rather than django-storages because its implementation of listdir() has decent performance. I recently started looking at trio as an alternative to asyncio and I like the design in theory. Hopefully I’ll also like it in practice.

I can’t pass this opportunity to plug one of my libraries 🙂 Check out datedelta. You’ll like it!

How did you become a core developer of Django?

I discovered Django in 2008 thanks to Jeremy Lainé. In January 2010, he asked for my opinion on a bug he was hitting and we filed a ticket. Jeremy was an experienced open source contributor already — he was a Debian Developer. He made me realize I could contribute to open source software!

On the day of my 25th birthday, I tried to contribute for the first time. A few days later, I managed to get my first patch committed — a JavaScript patch 🙂 I have no idea why I did that; I didn’t go any further. (As a side note, it’s pretty cool to have all that history preserved in public tools.)

In January 2011, when I started building the software for Autolib’, a car sharing service in Paris, I had the opportunity to choose the stack. I decided to go with Django and PostgreSQL. For the next three years, I’d work full time with Django, pushing it to its limits and beyond.

In March 2011, Stéphanie and I got married and I started contributing much more actively — hopefully a coincidence? At that time, it was hard to get a review for a patch. Django didn’t have fellows. I was frustrated by the low success rate of submitting patches.

In April 2011, Jacob Kaplan-Moss, BDFL of Django, made a 5-for-1 offer: triage five tickets and a core dev will review one. Exactly what I needed! I jumped on the opportunity and used it five times. I got the hang of triaging tickets and ended up handling 70 tickets in three weeks.

Around that time, I challenged myself to become a Django core developer. I think I was looking for the ego boost associated with the perceived prestige of that position, perhaps also for the ability to commit my own patches when no one cared. (In hindsight, I wish I’d had less selfish reasons, but that’s how it went. 2011 was a difficult year.)

So, I followed the manual. It said that would-be committers should contribute a major feature. Good. I went through the list of Google Summer of Code ideas. I looked for a feature that I could complete with minimal risks. I picked “Multiple timezone support for datetime representation”.

As a bonus, it would be useful for Autolib’. If a customer rented a car during the DST change, we couldn’t calculate the right duration and the right price. This wasn’t possible with Django 1.3 because it didn’t support timezone-aware datetimes.

I researched the issue thoroughly. In September, I sent a proposal on django-developers. That did the trick even before I wrote the code! Two weeks later, Carl Meyer proposed to add me to the core team. That’s how I became a core developer.

Finally, when the time zone support patch was ready, Luke Plant was kind enough to review it and I was thrilled to commit it by myself!

As you can see, I wouldn’t be there without a lot of luck, good advice from colleagues, help from fellow contributors, and the support of Stéphanie.

What excites you about Django?

Django grew quickly from a framework to an ecosystem to a community. Jacob Kaplan-Moss shaped the project that way. Many community members put an incredible amount of work to turn that opportunity into a massive success.

Do you know many technical communities where volunteers…

  • mentored 20k women by holding workshops in 500 cities in 100 countries?
  • fostered a local community until it was ready to organize a conference in Africa?
  • award a prize to those who welcome newcomers, freely give assistance, and help to grow the community?

And I haven’t even mentioned excellent conferences such as DjangoCon Europe and Django under the Hood.

From a technical perspective, Django is exciting because it’s boring. Who wants to spend time thinking about their framework rather than their app? Django and its ecosystem cover the needs of many web apps, large and small. It’s robust, well documented, well tested, and unfashionable. What else?

Is there anything else you’d like to say?

I find it most interesting to look at open source from an ecological perspective. There’ve been massive changes in the ecosystem over the past decade. We’re still at the beginning.

When looking at individual projects, often the picture is bleak. Most projects rely on a few key contributors who struggle with burnout. We haven’t figured out sustainability yet.

When looking at the broader picture, there’s more energy than ever. New projects get started all the time. Best practices are getting mature.

Django isn’t the hot new thing it was in 2008, but the DSF pays full-time fellows to ensure that it’s maintained well. Since 2014, I’ve been thinking the next frontier for Django was to make inroads in enterprise IT. I don’t know if that’s really going to happen, but it seems possible!

Today, volunteer time is the currency of open source. Tomorrow, money will play a bigger part. We don’t know how that will work yet. Corporate interactions with open source are often disappointing, but they’re improving as IT stakeholders get a better understanding of open source.

Open source will thrive if we keep the learning paths wide open and if we figure out how to organize larger efforts. It’s fine if millions of aspiring programmers write their own mini-frameworks: they’re building the skills to contribute to larger projects. We’ve seen a lot of progress in social norms in open source communities and in their codification. I hope we’ll develop governance practices that make it easier to scale large, community-driven open source projects!

Thanks for doing the interview, Aymeric