2018 retro

Luis G. Valle
13 min readDec 29, 2018

A look back at what I accomplished (and what I failed to) in 2018

Photo by Kyle Glenn on Unsplash

✅ I’ve done this or it’s now part of my skills/habits
🔷 Work in progress, I still need to actively work on this in 2019 if I want to learn it
❌ I failed to start working on this or I started but the outcome wasn’t useful

1. Things I’ve tried to learn

This is a list, in no particular order, of the things I wanted to learn this year.
Each one of them has an icon to indicate if I succeeded, failed or I’m still working on it.

✅ Kotlin

🎉 2018 resolution

Kotlin was made first-class citizen for Android last year and since then it has grown exponentially, making it the fastest growing language of 2018, according to Github’s 2018 Octoverse report:

Kotlin in 2018 🚀

I wanted 2018 to be the year I definitely learn Kotlin. The tricky bit here is how do you measure this. How do you know you’ve learned a programming language? I’ve been doing Java for more than 10 years and I learn new things in every project.

But for the most part of the year, I felt I wasn’t progressing enough.

For me, the line to cross was to start a new Android project using Kotlin as the main language. And since last September we’re doing it! 🎉

🔷 How Gradle tasks & plugins work

I wanted to understand better how Android projects are built, what tasks are expensive and why, and how to write my own plugins.

The two main learning sources for me were:

  • Novoda Android Static Analysis Plugin: an open-source project to easily setup static analysis tools for Android projects. I’ve been using it since I joined Novoda and it always felt like black magic to me.
    I thought that understanding deeply how it works it will improve my Gradle knowledge. And it did, kind of. I understand much better now this plugin works but I don’t feel that has contributed much to my overall Gradle skills.
  • Improving Android and Java Build Performance: I watched this video 2 or 3 times and I’ve used it as a reference to profile several Novoda projects.
    There are really good tips from the very Gradle Founder & CEO, a must watch for everyone using Gradle in their projects.

This topic is still a WIP for me as I still don’t feel comfortable using advanced Gradle features. It’s definitely something I’ll be investing more time in 2019.

🔷 Cloud Platforms

I want to learn more about Cloud platforms: what can we do with them, how can we use them to, for example, push domain logic up and share it among mobile platforms.

Early this year, I attended Google Cloud OnBoard — London training day, which was a great introduction to everything Google Cloud has to offer.
I even got a certificate!

After that, I wanted to learn more about Docker so I took this Udemy Docker crash course for busy DevOps and Developers . The course is short and with a lot of practical examples. I recommended it as well.

https://www.udemy.com/docker-tutorial-for-devops-run-docker-containers/

Finally, these days we’re using Microsoft Azure Cloud for the backend technologies in the project I’m currently working on.

I did an internal presentation at Novoda on what Azure has to offer, and although it’s not public the interesting bit is this slide and some data that follows:

What Azure has to offer
  • Azure Cloud adoption is almost double than Google Cloud (Amazon still dominates)
  • Azure is growing faster than Google and Amazon
  • You can start using it for free here https://azure.microsoft.com/en-us/free

In 2019 I’ll definitely invest time on Cloud Platforms. I don’t know much about Amazon and I want to, at least, being able to compare the three big ones in terms of features.

❌ Android P: what’s new

Android Pie was announced this year and, before the announcement, some beta versions were released for developers.

At Novoda, we wanted to learn what was new and what of that new stuff could be useful to our clients before the official announcement.

I pictured this as a series of blogposts and samples exploring every new aspect of Android P. I put together a big Jira story with a bunch of subtasks, one for each of the new features in P that we considered interesting to investigate.

The reality is that it never happened. Documentation is very limited for those beta versions. We started with loads of energy but then we found it’s a very time-consuming task and it’s hard to justify the time invested in learning these things if you ended up never using them in a project.

In the end, three interesting resources were produced and shared:

For next year’s Android Q we’ll try to take a different approach. I still don’t know which, but there’s good learning here of what not to do.

✅ CircleCI

CircleCI is becoming very popular this year and I wanted to give it a try in a real project.

At Novoda, we normally use a local Jenkins running in a powerful machine with several slave nodes for our projects. There are pros & cons in using a local CI vs a cloud-hosted one and I’m not going to go into details about them here.

My approach to adopting CircleCI in a client’s project was this:

  1. Use it to build a dummy pet project. This helped me understand the basics. CircleCI documentation is very good and a perfectly valid starting point.
  2. Use it to build an existing Novoda project. Carl-Gustaf Harroch, Novoda’s CTO, told me one day: “of course it works fine with a pet project, try to build the most complex project we have and then come back to me”. So I did that: forked a project that’s been with us for more than 4 years now with tons of custom scripts and legacy stuff and I replicated the build pipeline on CircleCI.
  3. Use it in a new project. We started with the free tier and we’ve recently upgraded to the next one, enabling parallel execution for our most expensive task — which has reduced our build times a lot!

I’m very happy with CircleCI and will definitely keep working with it in 2019.

The most useful resource I’ve found to learn CircleCI tips & tricks is to checkout configs from opensource projects. Here are some of the ones I’ve been using:

❌ iOS

One of my resolutions for 2018 was to learn more about iOS: IDE, deployment tools and swift.

I haven’t even started with this. I thought I could plan and do it on my own but, looking back, it seems that signing up for a course will be better: it will give me a framework to follow and force me to stick to a plan.

❌ Vue.js

I used to work as front-end developer ages ago, back when Ajax was the new cool thing. So I thought it would be fun to learn what the kids use these days.

I spend some time learning Vue.js and put together a pet project to display open PRs, issues, and collaborators for an organisation public repositories.

It worked fine but I never followed up, nor took the time to clean it up to publish it or write about it.

Now I’ve forgotten almost everything about Vue.js :(

My learning here is to invest time in learning completely new things if you have a plan to continue using them, otherwise, all the effort will be wasted.

✅ Android Architecture Components

🎉 2018 resolution!

We’re using some of the Architecture Components as regular building blocks in production code now.

My process to learn this was:

  1. Read the series of blogposts Jose Alcérreca created about them:
    https://medium.com/androiddevelopers/viewmodels-and-livedata-patterns-antipatterns-21efaef74a54
    https://medium.com/androiddevelopers/livedata-beyond-the-viewmodel-reactive-patterns-using-transformations-and-mediatorlivedata-fda520ba00b7
    https://medium.com/androiddevelopers/livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case-ac2622673150
  2. Use them in a pet project.
  3. Refactor an old Novoda demo project through a series of PRs to introduce Architecture Components step by step:
    https://github.com/novoda/android-demos/pull/41
    https://github.com/novoda/android-demos/pull/42
    https://github.com/novoda/android-demos/pull/47
  4. Write a blogpost myself about them: https://medium.com/@lgvalle/firebase-viewmodels-livedata-cb64c5ee4f95
  5. Use them in a real client’s project.

I can consider LiveData, ViewModels & DataBinding part of my Android toolkit now. There are still tons of things for me to learn about them, but I don’t need to make an active extra effort now to learn them, just regular everyday work.

🔷 Functional programming

This is definitely in very early stages for me. I’ve been reading and watching talks about Functional Programming the whole year and I still feel I’m only scratching the surface here.

So far, I haven’t found a tutorial or course to follow that works for me.

So I ended up watching random talks and reading tutorials without a guideline.

I learned more from a week pairing with pablisco than anything else in this year. Now, every time I’m designing a piece of code I ask myself: “does this really needs an object or a simple function would do?”

For 2019 I’m planning to read http://haskellbook.com/

I’m not interested in Haskell but I’ve been told it’s a good book to understand Functional Programming principles. I hope it gives me some guidelines to follow.

✅ AOSP Keyboard

This was a fun spike we did for a project that didn’t go through at the end. But I personally learned quite a bit about how the AOSP keyboard works and had the opportunity to spend some time working with Sebastiano Poggi which is always a pleasure.
That project to build an AOSP keyboard that replaces what you write with Pirate talk is still in my TODO Seb!

2. Novoda Internal

This is a list of some the things I’ve been working at Novoda this year. These are not things I planned to learn about, but instead, responsibilities I took upon myself.

🔷 Android Guild

Guilds are part of our self-learning organisation. There are several guilds at Novoda around different topics everyone is welcome to join and participate in their meetings.

I’ve been coordinating the Android Guild, which groups together everyone interested in Android stuff: mostly engineers, but also designers and product people.

We started the year gathering together every other week with no specific agenda to chat about news or interesting stuff we came across. That didn’t work.

Now we’re trying a different approach: we have a shared document where everyone can add a topic they want to present or chat about, and people vote for the next session. Since we implemented that, we had light talks about Flutter, Google Photos API and Kotlin Native.

I’m really excited to see how this evolves in 2019.

🔷 The bench

Not everyone at Novoda is assigned to a client’s project. Those not assigned are on the bench (we call it PT internally) It’s expensive but important to always have people on the bench because it allows us to start a new project right away.

But while they wait for a new project to start people need to do something.

This year I’ve been adding more structure to the bench. Now, those on the bench work together as any other team: we have one-week sprints, a backlog, and daily standups. The stories they work on vary from Novoda internal needs (tidy up that Jenkins machine) to help with project proposals or tech spikes.

❌ Skills Matrix

This year I also worked with our head of engineering, Paul Blundell, in a company-wide skills matrix to list all our skills and how proficient people were at every one of those skills.

I’m marking this as a failure. Collecting and defining them was a lot of work and we never followed up.

The aim was to know our strengths and weakness, and who was good at what, so we can plan projects and learning opportunities.

For 2019 we’ll need to find a better way.

🔷 Line Manager

We are introducing the concept of line manager in the Novoda structure.

This is in very early stages and 2019 will be the year to develop this but as one of the people who’s going to be managing other engineers in the organisation I’ve been trying to improve my skills on the topic.

In October we did a one-day session: “HR for Non-HR managers”, which was very inspiring and we’ll do more next year.
I’ve also used part of my learning budget to sign up for this Coursera course https://coursera.org/specializations/leading-teams , which I’m doing at the moment.

For 2019 I’m going to be reading more books about people and management skills.

3. Blogposts

This year, as every year, I wrote and share less than what I wanted.

This is a constant source of frustration for me and I don’t know how to solve it. Every new year resolution list I can remember contains a “write more blogposts & share more” item. And every year ends with the feeling that I could have done more.

Stats of my Medium stories in

Things I’ve written this year plus some I planned to do but never did:

4. Conferences

This is a list of conferences I went to, participate into or speak at.

Freakend Mobile

How can I describe this? It’s a weekend-long retreat in a beautiful countryside hotel, outside of Madrid. There were talks, boardgames, food, drinks and tons of fun.

Registration for 2019 is already open https://flipper83.github.io/freakend-mobile/

Lambda World

It happens every year in Cádiz, and it’s one of the best Functional Programming conferences around the World.

What I enjoyed the most was this workshop to learn Arrow by fixing the broken tests of a webservice implemented in Ktor

I came back with more questions than answers, but I guess that’s part of the learning process.

TODO-London

I gave a talk at TODO London titled “What’s a senior developer” where I tried to explain what I think it means to be “senior” in this industry and what are the steps one needs to take to get there

TODO London is an awesome meetup that happens once a week:

A monthly meet-up telling personal stories from the tech community to help you be better at what you do

Londroid

I’ve been the face of Londroid for almost two years now and it’s been great.

Londroid is one of the oldest and largests Android meetups out there and we gather together every month for two amazing talks, drinks and pizza.

Every month we go to a different venue, which has been great to know more about the different companies doing Android in London.
The same people attend regularly and it has turned into the monthly event to catch up with friends and colleagues for me.

Londroid @ Microsoft London

If you want to present at or host a Londroid event, please contact us at londroid@novoda.com

Google IO 2018

I didn’t go to Google IO this year. Instead, I helped organising the trip for the 7 Novodians that went there.

This year we decided to approach the annual Google IO trip like a project: we defined tasks for it (what the team wanted to learn or get from it) and things to do when coming back: write a blogpost about something you’ve learned or run a kata to teach it to your colleagues.

My colleagues wrote this post with the things that excited them the most this edition:

We even did a retro afterward to evaluate if the project was successful, what we liked about it and what we could have done differently.

5. Books

The books I’ve enjoyed the most this year are:

  • Death by meeting: anyone doing meetings as part of their job should read this book. It explains what kind of meetings you should be doing, why and how often.
  • The five dysfunctions of a team: same author as Death by Meeting. In this one, he explains how members of a team should collaborate with each other.
  • The subtle art of not giving a f*ck: this is one of those rare books that change how you see your life. For me, it had a great impact on how I see things: what to care for and why.
  • The Phoenix Project: this is a fun and exciting story of an IT manager that’s promoted to VP of Engineering in a large company and must deal with all sort of fires. Very fun and educational.

2019 is going to be a really exciting year at Novoda. If you are interested in what we do, you can find our open positions here https://novoda.com/hiring

And if you want to get in touch with me, find me on twitter: @lgvalle !

--

--