2025 - My year in review
My theme for 2025 was “try something new”. And sheesh, did I ever! I started roasting coffee, I had my first year on the Steering Council, I traveled internationally solo, I visited Arusha, Tanzania, I keynoted DjangoCon Africa, I tried ugali, I quit my job, and I am learning to play the violin.
Personal
Family
As usual, Emily continues to be a remarkable spouse. I’m thankful for her nudging me to attend DjangoCon Africa and to quit my job. Her support and understanding give me the confidence I need to make decisions to grow. It’s wild how much I rely on her advice and opinion. She’s able to provide an outside perspective on much of my life and concerns. This helps me see things more clearly and make better decisions.
Friendships
I’ve done a better job than in the past of maintaining friendships. I’ve reached out to local people to hang out as well as made time for remote friends. This year I managed to keep conversations going via chat and DMs. Definitely outside my norm was a dedicated trip to visit with a friend. I would like to do more of that in the future.
Beef and Roland
I believe Beef and Roland have settled into their adult cat personalities. Beef has taken to cuddling with me as much as possible when the weather dips down. He will bat at my face and neck at night until I lift the covers. I’ve managed to convince him that he doesn’t need to sleep on my chest and that sleeping up against me as I lay on my side is just as warm.
Roland, on the other hand, has fallen under the assumption that sitting on my lap just before lunch causes lunch to occur faster. I don’t think he has fully comprehended that all feedings occur on a fixed schedule. He’s happy to be the wallflower of the family. He always wants to see what’s going on, but under no circumstances does he want to be included in the activity. Unless, of course, it involves his orange fuzzy ball (not a euphemism).
Travel
Every year when I start this section, I think, “Oh, I haven’t done much”. Then I go through our “City Adventures” planning spreadsheet and all my photos and always come to the same realization. “Wow, I did a ton last year.”
Iowa City, IA, to visit friends
Work cruise to Miami, Nassau, and the Bahamas
I attended my final work cruise. It’s wild that that’s what our team bonding event was. It was fun getting to know my coworkers more personally and building rapport.
Milwaukee, WI, for a weekend with friends
Indianapolis, IN, for Emily’s birthday
For Emily’s birthday we went to a cat cafe in Indianapolis. However, we suspect the tiny kitten, “Peter”, left some illness on her sweatshirt after crawling around on her, because our cats got fairly sick for the next week.
Shawnee National Forest, IL, for hiking
We traveled pretty far south for some hiking and relaxation. There are some beautiful cliffs and a swamp preserve that boasts a mind-boggling number of snakes. When you spot 10 snakes on a 30-minute hike, you start to wonder how many you’re not seeing!
Las Vegas, NV, for my brother’s graduation
My brother graduated with his master’s degree this spring, so as a graduation gift we invited him and his partner to Las Vegas. Besides seeing them in person, the highlight was the Cirque du Soleil show. Those people are insanely athletic! So cool!
St. Louis, MO, for family fun
We’ve been trying to travel with Emily’s parents more often. This year, we all went to St. Louis. Shockingly, Budweiser directly from the fermenter is amazing. I don’t know what they do to it in the packaging step to make it taste like diesel…
Northern WI for Grandma’s memorial
Emily’s last grandparent passed away over the winter, so the family arranged a memorial at the family cabin for the spring. It was a monsoon that weekend, complete with roads being flooded. However, we still had a wonderful time catching up and shooting the shit. It was a nice way for the family to come together and celebrate the passing of a loved one.
Indianapolis, IN, for the Brickyard 400 race
Emily is all about new experiences. Being this close to the famous Indianapolis Motor Speedway, we knew we needed to either do the open-wheel Indianapolis 500 or the NASCAR Brickyard 400. The dates forced it to be the Brickyard. I’ve only been once before, with my younger brother when we were about 21. I learned from that experience and rented the headsets so we could actually communicate during the race. Who knew being able to talk to someone during a three-hour event was important? It was also 100°F that day, and we weren’t in the shade. There haven’t been many times in my life I’ve had sweat bead off me that much. As for the race, the one driver I cheered for won for the first time, Bubba Wallace. So that was a neat touch.
Arusha, Tanzania, for DjangoCon Africa
This year, I traveled to Tanzania for DjangoCon Africa, and it was amazing! More can be read here.
Chicago, IL, for DjangoCon US
I freaking love Chicago when it’s warm out. The energy there is so great.
Brevard, NC, to visit Eric
This fall, Eric Matthes invited me and Emily to come out to go hiking. While Emily couldn’t (volleyball season), I had recently become unemployed with a lot of time on my hands. Eric’s family and home are wonderful and welcoming. We did two hikes in the mountains, as well as take a drive along the Blue Ridge Highway. I didn’t do a great job of taking photos of myself while there; in fact, the only photo I have of Eric and me was the one Erin took of us. I’m thankful for the trip, as it reasserted the knowledge that we need to end up in a mountain town. And it gave me some ideas about observability in Django.
House
We didn’t do much to the house this year. The main improvement I made was repainting the office. I wanted something with a bold color. I’ve always admired people with colorful rooms, so I found one that I liked and went with it. It took me way longer than I wanted to, but I’m fairly happy with the result. It proved that the sanding is kind of required along all the trim because of the crappy paint jobs from before. Emily’s not a big fan of the color, but I am. The room has good energy now.
Health
The ear disorder (PET) still continues to harass me. I bought another bottle of the solution to help, but I haven’t been consistent about using it. I suspect the searing pain inside my nasal cavity deters my subconscious from reminding me to use it too. Beyond that, there’s nothing horribly wrong with me. I can tell I’m getting older. I don’t recover as quickly. I’m sore for longer. My memory fails occasionally. Looking positively, hiking the mountains with Eric wasn’t super difficult. For the upcoming year, I’d like to work on my flexibility and cardio. AKA yoga and rowing!
Self-improvement
It was a solid year of improvement. I’ve wanted to react less to my emotions when they stir. Well, not entirely, because watching sports and not yelling at the TV is no fun. I gave two talks that pushed me well outside my comfort zone and learned way more about community organizing and OSS library management. I acquired new skills and knowledge around product ownership and product design, as well as testing.
Professional
Djangonaut Space
This year we implemented our governance and reduced the number of sessions from three per year to two per year. We have had Djangonauts do all the roles within the organization, which is absolutely amazing to see. We haven’t quite hit my goal of a flywheel state where the organization is self-sufficient, but we’re getting there. Rachell and I identified the critical need of adding new admins to the organization, which should make it possible for us to hit that flywheel state. We are ending the year interviewing various Django community members to grow the team.
It’s interesting to be on the organizing side for this long. We’re starting to see patterns emerge about community members. For example, Djangonauts who end up contributing plenty to the Django community a year after their participation feel a measure of guilt about not taking full advantage of the program during those short eight weeks. It’s wild. Rachell’s been working on an auditing program that would allow people to reparticipate in the program that I’m excited to see enacted.
For me, the biggest win Djangonaut Space has is creating a welcoming environment for a diverse group of people. It’s always wild to me to see the various cultures and locations represented on a call. I know the demographics of code maintainers haven’t changed a lot, but we’re getting there. It takes a while for a person to build up the confidence to tackle owning a piece of public software. What we need from the community is the space for these folks to grow. They’ve shown they are interested in supporting the community. They’ve shown they had the right aptitude, attitude, and culture. The next thing is opportunity. And the great thing about the rest of us creating opportunity is that it means we can do less.
DjangoCon US
I never did do a write-up of this year’s event. This year I was not an organizer but just a speaker and volunteer. It was odd not knowing all the ins and outs of the event. It was great to see the new organizers come back again and do more leadership roles. I’m truly appreciative of all the organizers who make this event possible. Seriously, well done!
In typical DjangoCon US fashion, I was able to reconnect with old friends and make new ones. I remember having several amazing conversations. I got to meet Kattni and Jon in person, who are absolutely amazing humans. Muheu and I worked together on a fundraiser for Black Python Devs, which saw a slew of donations that week. A massive thank you to everyone who donated!
Beyond the community, the talks were well done. I appreciated Zags breakdown of the Django Framework, Chris Muthig’s talk on event sourcing, and Lilian’s talk on Djangonaut Space. The sprints provided a lot of value to me as well. I helped two people contribute to the debug toolbar and facilitated the progress of several people contributing to Django. Granted, that latter portion was mainly me introducing them to Jacob Walls, but hey, it counts!
Rachell and I gave a talk at the conference titled, “Django Governance: 🌱Growing Sustainable Open-Source Communities Together🤝”. It covered the importance of defining your governance, the challenges in it, and where people can get started today. My biggest takeaway was that all organizations have unwritten governance, which is fine, but we should work to match our written governance to the way things actually work. It’s not helpful to have written documentation that does not fit with the organization’s operation. But having how things actually work written down helps the future contributors understand the organization and see where they can get involved.
A photo of me and Rachell speaking at DjangoCon US. Photo by Bartek Pawlik - bartpawlik.format.com
A photo of me and Rachell after speaking laughing as Natalia asks us a question. Photo by Bartek Pawlik - bartpawlik.format.com
I also participated in a panel on the state of Django to represent the Steering Council. I was pretty nervous about the whole thing. I’m glad I did it, though I don’t think I provided a lot of value to the community. If I were to do it again, I would definitely be more proactive about the messaging I wanted to convey.
For next year, I think I’d like to get back involved in organizing. Something around sprints or small group sessions. It’s not entirely clear to me yet. Given that my employment has changed, I suspect my goals for DjangoCon US will be changing as well, which is exciting.
Django Debug Toolbar
The toolbar had a pretty fantastic year! We had several highlights, including:
- Matthias leading a Djangonaut Space session for the project (the second for the project)
- Configuring EthicalAds on ReadTheDocs and having it automatically donate funds to the DSF, raising ~$90
- Setting up Tidelift for the project, earning $1200/year, which is donated back to the DSF
- Releasing version 5 which included Aman Pandey’s async-compatible toolbar work from 2024’s Google Summer of Code project
- Releasing version 6 which refactored how the toolbar works to better support asynchronous applications
- We had 28 new contributors!
- We introduced a resources page in the documentation to include blog posts and videos about the toolbar
- Velda has kicked off our effort to redesign the toolbar
For the upcoming year with the toolbar, I would like to support others efforts to enhance it. Long term, I’d love to see the toolbar be compatible with staging and production applications. There are several things that would need to be completed before that’s actually true, but I think we’re moving in the right direction.
To support others, I’ll be trying to host meetups for the active contributors to help keep people up to date and inspired to work on the project. It definitely feels like every time we get together, there’s a boost in contributions for a few months after. We’ve had several people contribute to the project. I believe the project could get to a state in which it’s used as an introductory navigator project for Djangonaut Space. Since the project is relatively small, there are fewer nooks and crannies for weird gotchas. This makes it easier to answer questions about and help others contribute.
Django Commons
I love where Django Commons has gotten to. The admin team seems to have fallen into a regular cadence with the work we know we need to do. The difficult part is the things we want to do tend to fall out of scope from the time we have available. Some of our highlights from the past year were:
- 47 members were added
- 7 projects transferred in
- A project website was added at django-commons.org
- The organization has been set up on Open Collective, which will allow maintainers to be paid
- Defined then simplified our governance to reflect the simplified processes we’ve been using
- Moved public forum communications to the new Packages area of the Django Forum
- Created a new logo
- Added a designers team for projects to solicit help from people with design skills
- Recorded a project introduction video for django-tasks-scheduler
Django Commons is in a good place. We can support the projects and maintainers that are within the organization. The struggles we’re experiencing are around being able to support a project like Django REST Framework. That project is quite large, so it requires a number of things to be in place before it can be moved if we’re trying to keep everything consistent.
For the upcoming year, I want to see us have our Open Collective area configured to the extent that any willing project has a way to collect money directly. One of my end goals for this is to facilitate the creation of a “keep the lights on” team that the community can pay to do basic maintenance on several projects. The first step, though, is defining the patterns to support active project maintainers to collect funds.
Steering Council
I’m now halfway through my term for the Django Steering Council. It has been a challenging and enlightening endeavor. I think we’re making a lot of progress to get the Steering Council to where the community needs it. Some of our highlights are:
- Meeting regularly and publishing the notes
- Adding an ecosystem page that highlights community packages and projects
- Defined a new flow for new features for the Django community through the new-features repo
- Made the ecosystem page and blog posts searchable on the Django website
- Updated the working group structure to allow for teams to be added
- Attended and presented at each of the three DjangoCon’s around the globe
Beyond that, we helped support other groups, such as the Fellows and Google Summer of Code, on an ad hoc basis. We have also continued to work on moving teams into the Working Group structure. The accessibility team went well, and progress has been made with the Security Team, Mergers, Releasers, Ops and Triage and Review.
I’m happy with my contributions as a Steering Council member. I was happy to help work on several of the things that we shipped, either as the driving contributor or just as a reviewer. In particular, I had fun making the community page and blog posts searchable on djangoproject.com. It was great to see Sarah Boyce immediately follow up on that PR to make the search functionality accessible from a greater range of pages. I’m also happy with my efforts to see my new feature request of adding third-party package references to the Django docs.
I’ve learned that it’s a challenge to exist on an elected team. I suspect this experience is a bit unique for other elected teams since every one of us was new, and there wasn’t an existing structure for us to build off to achieve what we wanted to. It has been challenging to find alignment among a group of individuals across interest, availability, and philosophy. I was given advice from an outgoing Steering Council member that the role needs to be considered an individual’s complete open-source involvement. Meaning, when we elect a person to the Steering Council, we should expect them to step back from all their existing involvements. Not to just add to the list. While I agree with that in spirit, it’s really hard to enforce it in practice.
I’m trying to be more accepting of slow progress. It’s a bit opposite of my typical OSS contributions, where things have been fairly immediate. I’m trying to keep my goals for this upcoming year limited, as I’ve noticed it’s easy to get distracted. They are the following:
- Complete the technical governance revisions of DEPs 10 & 12
- Move the four remaining teams to the Working Group structure
- Facilitate the creation of a GSoC Working Group
- Create transition documentation and how-to’s for the next Steering Council
My goal is for the next Steering Council to use the processes and practices we’ve started to make progress on their own goals. If we can get to the point where Steering Councils are iterating rather than rebuilding, we will be in a great place. Hopefully we will have built a solid foundation for that.
Career
I’m very pleased with where I’m at professionally compared to a year ago. It’s advanced well beyond just my efforts at AspirEDU. Though my contributions at a full-time job are always going to dwarf my volunteer efforts, I’m equally proud of them. I’m excited to see where I’m at next year.
Outside my individual contributions, I was able to help my colleagues improve, learn, and grow. I enjoyed helping people consider their goals, understand how the company and I could help them achieve them, and then support them in their growth. I did find it difficult to operate as both a manager and an individual contributor. There were other hats I had to wear as well, but they weren’t so formally defined as those two. I kept finding myself bound up when trying to guide others to understanding when I only arrived there scarred from missteps. I suspect the company will temporarily be in a less secure position, but the individuals will grow faster. Both by trying things I learned to be afraid of and by being forced into the deep end of the areas I managed solo. It was in that same place that I learned the most during my career!
As an individual contributor, I’m pretty pleased with a lot of what I accomplished this past year.
- Building out a reusable foundation for storing and using user-created filters across multiple model QuerySets
- Implemented foundation for the LTI 1.3’s dynamic registration integration
- Implemented proof of concept foundation for email OAuth integration across multiple providers
- Implemented integration to send messages from within the application through Canvas messages that could be extended to emails and templated messages
- Created and iterated on a cross-team product development process
- Improved customer support process to create and edit customer notification rules
- Exported web app logs to allow for usage analytics
- Implemented extensive Playwright tests for the application
- Rewrote core legacy jQuery and AJAX functionality to utilize HTMX and AlpineJS (plus actual tests!)
- Implemented automated accessibility tests with playwright
It’s wild how small and trivial these efforts are when written out like the above, but they were either large investments of my time or efforts that had a significant impact. I’m going to miss the opportunity to work deeply on a project that I’m extremely comfortable with. It provided me with the ability to do a lot.
All in all, I’m very pleased with my contributions to AspirEDU over the past 11 years. The company is a multi-million-dollar revenue company with a staff of three engineers keeping things standing. It supported hundreds of thousands of students and hundreds of clients. I was always surprised with the product’s stability and reliability despite such low operating costs. I’m happy to have been an integral part of that.
This next year, I hope to be well into my strategy for the business. I’m fairly certain it will be around direct career coaching and mentorship. I’ve got thoughts and ideas, but nothing has been solidified. I hope it involves resurrecting Django Cairn and finishing up my Django observability package.
Hobbies
Baking
Surprisingly, I didn’t have baking on my list here. I do it fairly frequently. At least once a month. I almost always make the same sourdough, sandwich style bread. I use a basic recipe from King Arthur and it turns out fairly well. Towards the end of this year, I bought a stand mixer and I’m still working out how to use that to knead bread properly.
Brewing
I’ve barely been maintaining this hobby. I brewed two beers this year, both in the early part of the year. The homebrewing club had a brewer of the year competition, which was a series of competitions. Every other month, you had to brew one of three categories of beers. I participated in the first two.
Since I didn’t finish either of those kegs of beer, I’ve considered calling it quits with this hobby. However, I may just revise how I enjoy it. I think smaller batches help. I think I will buy a 3-gallon fermenter, which will keep the batch sizes small. This would enable me to brew higher ABV beers without having to find a home for 40-50 beers.
Exercise
This one I did fairly well on. I wouldn’t say I was super consistent, but there were several months when I exercised regularly more weeks than not. I really enjoy weighted walking and rowing. Weight training can be enjoyable when I’m in the mood for it. For this next year, I hope to just work on the consistency aspect. I’m guessing it’ll be a challenge, as it’s usually the first thing I cut out of my day, and if I’m starting up a new chapter in my career, I’ll be pretty interested in prioritizing that.
Gaming
This year my brother and I expanded our regular Halo Infinite crew to include a few others. Then they released a game mode called “Famished, Famished, Falcons” which was a chaotic, four-team, three-person-per-team game that focused on capturing a single flag. It was a blast! Then, in typical fashion, it was pulled from the list and then hidden on a separate one. It was difficult to get games once it was pulled from the main list for folks. Then they released their final update for Halo Infinite, which was our signal to finally move on to a new game.
For the past few months, we’ve been playing ARC Raiders, which has been very entertaining. There’s a psychological aspect because it’s PvPvE. I find it incredibly frustrating at times to lose equipment, but I’m finding some balance in the game. It’s been easier to tolerate randoms being aggressive when I’m not overly invested in the run. That said, any time we launch a game with a squad, it’s always a shoot-first situation.
Gardening
The garden this year didn’t do super well. We successfully transplanted the two pepper plants from the basement to our raised beds but didn’t put the netting around the beds. Turns out, rabbits really enjoy eating pepper plants. So out of the six plants we started with, we ended up with about five peppers throughout the summer.
Our tomato plants did better, but we weren’t consistent about watering. Plus, one of the varietals we bought was mislabeled, resulting in a much larger plant. By the end of the season, it was crowding the smaller Roma plants, resulting in diminished returns.
Thankfully, though, I finally found a place to grow herbs very well. It’s along our treeline and in buckets! Apparently the extra bit of shade causes the plants to thrive. We had so much basil!
This next year, I’ll reduce us down to three pepper plants, two tomatoes, and then cilantro and basil. Everything else just tends to not get used, so it doesn’t make sense to grow it.
Reading
For the first 3/4 of the year, I read primarily non-fiction books. However, when I quit my job, I picked up a free, three-month trial of Kindle Unlimited. From there I read the Bobiverse series, Dungeon Crawler Carl series, The Murderbot Diaries and started on the Arcane Ascension series. In total I’ve read/listened to 31 books. I think that’s on the high side for next year, especially considering how many fiction books were involved.
Writing
(With this post) I’ve maintained my one blog post per month streak. In total I had 19 blog posts and also updated my Django Debugging Tutorial project, which was a bit of writing. The start of the year included some very technical posts, while the latter part of the year contained more reflective pieces.
I’m hoping next year I can bump that count up to 25 posts with more technical articles, but it’s difficult to come up with topics that are actually new.
Coffee Roasting
This has been a great hobby to pick up. First, the quality of coffee that my Behmor roaster puts out is pretty good. It’s wild how much better coffee is when it’s both freshly roasted and ground. That said, maybe one in ten cups of coffee hits that mark for me. Outside personal enjoyment, it’s been great to share roasted beans with friends and family to enjoy. I typically roast beans at least once every three weeks. I’ve found that roasting three batches while working out or brewing beer is a great combination.
I don’t have any future goals for this hobby other than to continue roasting coffee and enjoying it.
Violin
When I quit my job, I decided I needed to learn something brand new. And while I said I was going to do coffee rather than violin last year, I chose to buy a violin and get a teacher in October. It has been incredibly challenging for me. There are so many things to think about when playing violin, and it only becomes more obvious how far I can grow the more I learn and try. I’m still trying to sort out how far I want to take things. For 2026, though, it will be a focus of my free time.
Thank you for reading! I hope you had a wonderful 2025 and a spectacular 2026!