2020.12.30. 20h • Márton Braun
The elephant in the room
Let’s just get this out of the way: this year has been absolute rubbish. There’s no going around or sugar coating that.
We had a pandemic, people passed away, systems crumbled, economies and industries collapsed, and just in general, the world turned upside down. The list of bad things that happened is exhausting and overwhelming.
In the midst of all this, I consider myself extremely lucky. For several months through this figurative storm, against all odds, I got to keep the amazing job I landed at the start of the year (more on that in a bit).
After I ultimately lost that, I found a new gig quickly, and yet again I get to work on something really exciting. All from the comfort of my living room, safely. I still have family and friends to worry about, but my life has not been upended like those of many others.
At the end of last year, I donated to environmental causes, to somewhat offset all the travelling I’ve done. This year – given that travelling no longer exists – this was replaced by donations to Hungarian free media publications, COVID-19 relief, and the St. Jude Children’s Research Hospital (through the Relay/ATP fundraising efforts).
If you can afford to, I encourage you to do something similar if you haven’t already.
With that, let’s get to story time.
I started this year eager for new challenges, having been on a quiet job search for the last couple months of the previous year. After many rounds of interviews with different companies and a handful of offers, I left AutSoft and joined Skyscanner in early February.
Birds flying high ✈
I got to join an organization that knew what it was doing. People were passionate, kind, diverse, professional, and human. Engineering standards were high, processes and procedures were refined, and our millions of users were using a wonderfully polished product.
I learned and improved more in six months there than ever before in my career. I learned to embrace gathering data and making decisions based on it. I learned that it’s possible to pay attention to planning and details in engineering tasks, and that it’s worth doing so. I learned that you don’t have to push yourself constantly to your limits to be valued and respected.
I enjoyed meeting people at the local Budapest office and beyond, seeing the engineering solutions and systems in place, and inhabiting the awesome office for five weeks before we were all relegated to working from home mid March. I still miss the cereal.
Being a travel company, Skyscanner was hit hard when COVID cases spiked and spread all over the world in the spring. Demand for flights dropped close to zero in a couple weeks, and you can only sustain a business with no revenue for so long.
We made some valiant efforts to stay afloat as we were, but reality caught up to us after a few months, around the end of the summer. This led to some “restructuring”, in which our small Budapest office was sadly closed, and we were let go.
In January, it was difficult, if not impossible to see that joining a travel company would be a risky choice. Looking back at it now, I am beyond happy that I chose this over everything else, even if it was cut short, and I wouldn’t change a thing about it.
I hope this section sounded like the love letter to my time at Skyscanner that it deserves to be. I can’t tell you what Skyscanner is like now, or what it will be like in a year or two – but what it was in the time that I got to be there was something truly special.
Row, row, row your boat ⛵
Specifically, I’m working on the Android Chat SDK, which is an open source library for integrating our services into Android apps easily. This being hosted on public GitHub has the fun side effect of nearly all my day-to-day work being visible on my profile.
If you need this kind of feature in your app, please check out our new & improved Android tutorial.
I’m still somewhat settling in at Stream, and we’ve built up quite the Android team in a short span of time, but things are very promising so far, and I look forward to improving and polishing the heck out of our SDK.
Since Stream doesn’t have a local legal entity here in Hungary, I’m now a remote contractor instead of an employee (which I’ve always been before at my previous jobs). I’ll spare you the rant about navigating Hungary’s accounting and legal systems for this, and instead quickly mention that Transferwise have been an amazing service to have around for all this.
Having a jobby job is one thing, but let’s also take a look at what happened around the Kotlin and Android communities this year.
Gotta start with the big one – I became a Google Developer Expert this year, back in June. I first interviewed for and was accepted in the Kotlin category, then I quickly amended that with Android as well.
Being a GDE is not a title or a position. It’s more of a role, and a recognition of your efforts in the developer community by Google. Being in the Experts Program provides earlier access to technologies, easier access to the folks working on those technologies, and of course, the network of other experts to talk to.
One of the things I already participated in through the program was sessions of Google’s Tech Writing courses. The materials for these are publicly available, and there are also free, public sessions held every once in a while (take a look at the schedule). I highly recommend these to anyone doing any kind of tech writing, I thoroughly enjoyed them.
Last year, I wrote about starting up my very own university course about Kotlin. This kept going this year, with roughly 300 students participating in it over the three semesters. I expect to keep up this pace, and run the course two more times next year.
It’s been great getting so much positive feedback from students, and seeing so much enthusiasm for the language. I wish I could put even more time into this course, so that it’s not just a lecture, but also practice problems, and workshop style lab sessions. One can dream.
JetBrains has been doing a great job pushing Kotlin for Education too, and I had a great time chatting with them a couple times over the year about my experiences teaching the language. Check out their Kotlin Education page for details about what they’re up to, including the map of many universities around the world using Kotlin!
Conferences and blogging
Clearly, normal conferences were out of the question this year, which is a real shame. I gave one talk in person this year, back in January, and then everything else went online.
I appreciate the efforts of everyone putting together online events, but for me, as an attendee, few of them were engaging. Conferences for me (and surely a lot of others) are at least as much about the atmosphere and meeting people as attending talks.
As a speaker, online events are also a bit of a drag – speaking into a camera for half an hour and getting little to no feedback overall is not the best experience. And you also get to worry a lot more about AV issues than normal.
With the turbulence in my job situation, the local COVID lockdowns, and all the mess that happened this year, I had some significant drops in productivity and community engagement, where I couldn’t keep up with things. At one point, I gave up trying to follow what online events are happening and what I could CFP for, as I just didn’t have the energy.
In terms of numbers, I didn’t end up doing that bad overall, mostly thanks to pulling things together around the end of the year. Last year I prepared five new talks, this year that number was six. I went from 9 appearances to 10 – also a slight improvement, and especially good considering that events were cancelled and reorganized.
I’m especially happy about the topics I got to talk about: I covered the state and event handling topic that’s close to my heart, and I also talked about a lot of libraries that I’m passionate about.
You can check out all these talks on my website’s Talks page, which I also managed to revamp this year.
As for activity on my blog, there was also a drop overall, publishing 12 articles this year, while last year I managed to get 15 out. I’m still satisfied with this frequency, and my overall readership has still increased by about 40% this year, which is great!
State and event handling articles accounted for most of my pageviews, and I also wrote about my own libraries, library development itself, Kotlin language features, and Jetpack stuff.
Check out all the blog content here, in case you missed it.
Library development remains one of my favourite areas of development. I wrote and talked about it this year, and it’s also my day job now, which is awesome. Nothing like having developers as your clients and caring about APIs.
A common theme this year was adopting GitHub Actions as the CI solution this year for all my projects (we’re also using it at Stream). This replaced Bitrise for me, which I was using previously. Actions execute faster for my use cases, and they are very parallel and very free for open source. I also don’t need GUI based configuration for my CI tasks, as I’m just fine editing a
yaml file for this. With that said, I know many great people who work at Bitrise, and I can still recommend their product if it fits your preferences.
A year ago I promised to share what my master’s thesis was about, having just wrapped up writing it. So then, one of my largest tasks for this year was to share RainbowCake with the general public.
As its intro article describes it:
RainbowCake is an Android architecture framework, providing tools and guidance for building modern Android applications. It builds on top of Jetpack, both in terms of code and ideas.
This project has been long in the works, for more than two years before it was publicized. In my opinion, its ideas were a lot more novel back then, but they still hold up well enough today.
Oddly for me, my most popular article this year was the first of these introductory articles, Designing and Working with Single View States on Android. I thought it contained completely trivial ideas, because I’ve been using them for such a long time in my projects. I really just wrote them down so that I can reference those thoughts easily in subsequent content. Apparently, I was wrong, and I’m glad so many people found it useful.
Another one of my libraries that I’m really proud of is Krate. I wrote this back at my time at AutSoft, and I’m still its maintainer.
Krate is a convenient wrapper around Android’s SharedPreferences APIs, and if you haven’t heard of it yet, check out Krate, a better SharedPreferences experience which describes how to get started with it.
This year, I gave a couple talks about how the library’s internals are implemented. First, I presented an updated and leaner version of Delightful Delegate Design at droidcon Americas, and then I covered its integration with Moshi in the sequel at droidcon Italy.
Despite Jetpack DataStore lurking around the corner as the replacement for SharedPreferences, Krate is still doing great. I implemented a handful of new features and improvements this year, and also got to a 1.0 version number with the library.
A year ago, I wrote about joining the Android Budapest meetup group’s organizer team. In January, while I still worked at AutSoft, we hosted the meetup there, with my good friend István Juhos and myself being the two speakers (both on home ground).
Then, we too pivoted, and moved our events online. We did this while joining the Android Worldwide initiative, which is a community of communities, including many Google Developer Groups and other Android/Kotlin themed meetup groups from all over the world.
Huge props to Shalom Halbert for kicking off Android Worldwide and leading the efforts there.
Together with Android Worldwide, we had three joint online events this year, where we did varying levels of organization and hosting, tried different platforms, collaborated with communities around the region, and learned a lot about what makes an online event worth going to. We hope to continue this great joint effort next year (you can look forward to something in mid-January).
Before wrapping up this wrap-up, I wanted to cover some things that don’t exactly fit into the above headings, but were an important part of my year.
Having not stepped outside for three months in the spring “lockdown” (and that’s very little exaggeration), I’ve had more than enough of the tiny room I was inhabiting, essentially moving only from my bed to the desk in the morning and back in the evening.
So when summer came around, lockdowns eased, and virus risks dropped for a while, I took the chance to look for my own apartment and move out. This was an adventure of many firsts for me, and though I had some doubts about how I’ll manage, six months in, everything went remarkably easily, and I’ve been having a great time with it.
I usually write about development related topics, but I also enjoy messing around with gadgets – a lot. This year, with the move to working from home, I had a bunch of fun with Thunderbolt, which I wrote about in great detail. On a related note, I also highly recommend this video about using laptop docks if you’re interested in the topic at all.
Then, with the aforementioned move to a new apartment happening, I got to have some fun setting up a new network, a new NAS (two, actually), and things like a Plex media server and auxiliary systems around it. I also got to upgrade the existing desk setup with a great camera for all the calls and conferences, better lighting, and a standing desk.
The end of the year, of course, is also a good time to reflect on what I thought I was gonna accomplish a year ago.
I planned to continue blog posts, speaking engagements, meetups – I think this was a success. I was going to scale back some of my teaching efforts, as it’s a bit of a charity with the amount of time and energy it takes. Haven’t done this, ultimately, but that’s alright in my book. Don’t tell anyone, but I’d teach for free if I had to.
I did manage to pull back on other tasks, however. I was more relaxed overall, and I realized that I don’t have to push myself hard all of the time. In part, I can credit this success to Skyscanner, as I mentioned many paragraphs ago.
Last year’s wrap-up was the second one in a row where I planned to get more into Swift, iOS, and Kotlin multiplatform. I failed to do this again, but honestly, I don’t particularly mind that. It exists, it works, but it’s still not as prominent as I figured it would become two years ago. I’ll get around to this topic when I have the need for it.
I’ll yet again mention some things that I’ll continue doing: teaching, existing open source projects, talks and blog posts. I’m hoping to keep up at the pace that I had this year for all of these, while paying attention to making it relaxed and sustainable.
For the new year, I don’t have any grand plans or new (even secret) projects at the moment. I’m hoping to get involved in something new in the open source space, but I haven’t quite figured out what I want to tackle yet.
I do have one thing on my to-do list: learning Compose, which I’ll happily admit I’ve been ignoring so far. I’m confident that I’ll be able to catch up with it in time though.
That’s it, that’s all of it! Except for whatever I forgot to include.
Hope you had a tolerable year and an adequate holiday season. Here’s to a happier and more boring new year. And remember, don’t make new year’s resolutions.
You might also like...
StateFlow behaves as a state holder and a Flow of values at the same time. Due to conflation, a collector of a StateFlow might not receive all values that it holds over time. This article covers what that means for your tests.
Have you ever encountered APIs that show warnings or errors when you use them, saying that they're internal or experimental? In this guide, you'll learn everything you need to know about opt-in APIs in Kotlin: how to create and use them, and all their nuances.
Another year has come to an end, so it's time to reflect again. I'll attempt to sum up what I've done this year, how that compares to what I was planning to do at this same time last year, and what I expect to be next.
Another year over, a new one's almost begun. Here's a brief summary of what I've done in this one.