Goodbye 2017

CodeFX Weekly #50 — 30th of December 2017

Hi everyone,

2017 draws to a close and, honestly, it was arguably even worse than 2016. Accordingly, the “hold my beer” jokes are legion. I like this one:

Also, I just found this awesome tweet:

I’m not here to tell you about that, though. Instead I go over what 2017 meant for me, professionally. What were my goals and how far did I get? This is part one of my new year double wammy; part two (next week) will look ahead at 2018 and define new goals.

Naturally, this is an exercise in navel-gazing. I’m doing this more for me than for anybody else because putting my thoughts in writing sorts them out and publishing them makes sure I can’t easily go back and retcon the stuff that didn’t work out. If you’re not into me talking about myself and are here for the Java content, I kindly recommend to skip this weekly and the next.

These posts are actually a “long-held” tradition:

But since this year is the first time that I have an active newsletter, it is also the first time that I don’t publish this on my blog. I think the weekly is a better fit for the format.

Now, with all of that said, let’s get started. First a quick review of my plans for 2017 before I go into how much I failed and what I did instead. And because the blog is still the most important facet of my public persona, I’ll look at that in more details, particularly at visitor stats. Spoiler: They’re looking good.

I send this newsletter out every Friday. Yes, as an actual email. Subscribe!

Plans for 2017

This part is tightly coupled to the goals I set myself at the beginning of the year. To make sure I get the important stuff done and don’t loose myself in too many small projects, I wrote this:

The least I can do is forbid myself to start anything new until a couple of one-shot items on the list are completed:
* conference talks are prepared
* course material is prepared
* final draft of book was handed in
* WorkflowyFX, JUnit Io, and ReRe are released

I got the first two bullets right, but failed spectacularly at the last two. Nevermind the projects, the book is the big thing here. And I can’t even begin to tell you how much I hate myself for not being done with it by now.

That! Fucking! Book!

First of all, Java 9 is out since September, so the book should be too. More than that, though, drawing this out for so long is a huge drain on my mental energy and causes me to waste untold hours trying to force myself to do something that some part of me doesn’t want to.

And it’s not even that I don’t like the writing! Once I start it’s actually pretty ok. But getting there, summoning the energy to sit down, focus, and put the first few dozen words down was unsurmountable on as many days as it wasn’t. I don’t know, maybe I’m just exhausted…

So please excuse if the rest of the post reads very self-congratulatory — I need this. Also keep in mind that I have about 30 hours per week for all the unpaid stuff, so don’t get fooled into thinking I’m particularly productive.

Real life 2017

So here’s everything else I did in 2017, in no particular order…

My gig at SitePoint went out the window when the Java channel was shut down in May. But I landed softly as a freelancer at my former employer, where I’m migrating code bases to Java 9. That’s a great fit and it was a lot of fun — in that “WTF is going on” kind of way.

I gave a university course where I taught students how to use Kotlin, JUnit, Maven, Git, GitHub, and Travis to create and, important!, collaborate on small projects. They finished by coding a little simulation the Git(Hub)Flow way. If you’re interested in some tips and links to good sources for onboarding new developers, get in touch.

Speaking of speaking, I spoke at 11 conferences and 12 community events. It’s immense fun and I’m very grateful that the community offers me this opportunity! A few videos:

To make creating talks easier, I’ve built a monorepo that holds Asciidoc sources for all talks and generates slide decks with the same, slightly customized Asciidoctor-RevealJS-backend. This not only reduces overhead for new talks to near zero, it is also easy to host the presentations, like on Oh, and I recently spend some time to make the landing page responsive. (If you’re looking for a place to get started, the code and structure can be freely copied and reused.)

There was also the occasional Java 9 workshop (three of them, to be precise). If you and your team are interested in in-house training for everything Java 9, keep in mind that you can hire me for exactly that.

I lead the Java 9 answers on StackOverflow. That’s bound to change pretty soon, though, because I’m often late to the party, but it was fun while it lasted.

Regarding blog post, I was relatively lazy, but consistently so. Ignoring cross-posting, I published about an article per month for a total of 14 original posts. While I would have liked to write more, I don’t feel too bad about that and am really happy with the content I added this year. (More on that later.)

Maybe the most thrilling news is that I started a YouTube channel. So far there are only two and a half videos on there, but I like doing it and once the book is finished, there will be plenty more, I promise. Subscribe if you haven’t already.

I worked on JUnit Io, now called JUnit Pioneer, by joining forces with Steve Moyer and doing a lot of project setup, including a quite complicated build process for a project-overarching home page. Unfortunately, we stopped working on it when it was (almost) time to code. This annoys me and I hope to pick up the slack in early 2018.

Another project that only got half off the ground is, where I collect surprising behavior changes in Java 9. Still, it got some shares and recently even a few contributions, so it already surpassed my expectations. (It looks like I really like cobbling together static sites with Jekyll.)

I argued against sexism and commented on the “Google Manifesto”. Besides having a dog (or rather a daughter) in the fight and generally being a political person (which I mostly keep out of CodeFX), I mainly did it because as a member of this community I could not let such things go by without speaking up.

Last but not least, I wrote this newsletter. Every week! (Except the one where I visited my Grandma in the hospital — I hope you’ll excuse that.) I’ve just checked and they amount to about 70k words. (Maybe I should’ve written the book during that time?)

And that’s it. I think.

CodeFX blog

I usually list my five favorite posts, but looking over the list I just couldn’t decide which ones to pick — too many important reads (sorry, not-sorry for the self-adulation). It would also do unjustice to the fact that I didn’t just publish random stuff. I really wanted to make sure that you’re well prepared for your Java 9 endeavors.

So instead of a small list, I’ll show you a path through my posts. As usual, I’ll end with an analysis of the blog’s visitor numbers.

A path through the thicket

Let’s start with Java 9 in general:

Next up is the flagship feature, the module system:

That’s all theory, though. If you consider migrating your existing project to Java 9, have a look at these:

I’m particularly proud of these articles because they were earned the hard way, from crying, sweating, and swearing over failing builds and red tests, trying to make that damn thing work!

If you prefer the random Java stuff, have a look at these posts:

Visitor stats

Let’s see some numbers! They’re all unique page views, taken with Piwik (the declaration of will not to be tracked is respected). Visitor stats are of course notoriously unreliable, but this year’s even more so. Due to my own idiocy, I recorded only a part of my traffic between in April and June — more on that in a minute. Also, I compare everything to last year’s stats.

Overall numbers

The blog had 213,899 unique page views in 2017 (up 40% from 153,676 in 2016, which in turn was 40% more than 2015). The year began with 17k per month (pretty much the 15k that ended last year), with April (13k), May (7.5k), and June (13k) dipping low due to unrecorded visits. Over the summer months, the default was restored and then slowly climbed until it exploded in fall with a peak of 29,399 unique page views in October (last year’s peak was 18,463 in June). December showed what looks like the new baseline: just north of 20k.

Popular posts

Most visited blog posts:

At first I found it a little suspicious that some of my most popular posts from 2016 got even more popular in 2017. One part of the explanation is survivor bias: Posts that were successful in 2016 but not in 2017 naturally don’t make the list. Still, some doubts remain… are this year really so many more people looking for stream advice?

A little more interesting than the 2016 figures are those from December because they give a better idea for what to expect for 2017:

I like the dominance of Java 9 posts and delight that Java 10 is in there, too. That’s promising for future traffic!


Most effective referrers:

  • Google (105,740; +70%)
  • Twitter (6,797; +250%)
  • Baeldung (5,468; +45%)
  • Reddit (3,558; -50%)
  • DZone (1,231; +3%)

Google is the single thing that can make or break most sites (traffic-wise). If you suck at Google, it’s near impossible to make it up any other way and these stats show that. I’m very happy with the traffic I get from Twitter and other community sites, but they can never come close to Google (although they of course feed into its algorithm).

Fortunately, Google mostly does the right thing. When “designing” articles (i.e. deciding on content, scope, approach, etc.) I have both the reader and some basic SEO rules in mind and they go together really well. For example, having the focus keyword in the URL, the title, and the first paragraph makes sense for both readers and search engines.

As a consequence, for the keywords that I chose, most of my articles rank in the top 5 search results, many in the top 3. (Whether those are the words other people are googling for is another thing.) It looks like that bears fruit.

Regarding at the rest of the referrers, I’m very happy with how they evolved. Increased Twitter traffic matches my increased reach, supported by @Java tweeting my articles. Baeldung is nice, too, and I really don’t mind Reddit and DZone (my stance on Reddit and on syndicators).


All of this makes me very happy. It is a delight to know that so many people come to CodeFX looking for answers or insights into new developments. Also, I seem to have gotten pretty far with only a post per month.

I know that I have you to thank for that, so: Thank you for your continued reading!

Goodbye 2017

2017 was the year where I dragged that one thing around with me like a millstone and it’s depressing that at year’s end, I’m still not done with it.

Other than that, things went reasonably well. Most of that thanks to you folks in the Java community, who continue to read, watch, like and share the stuff I put out. Thank you very much!

Have a happy new year’s eve! I hope to see you again in 2018.

so long … Nicolai

PS: Don’t forget to subscribe or recommend! :)