Tales from the jar side: The Business of Training, Gradle for Android, and funny posts
Sugar is the only word in the English language where "su" makes the "sh" sound. I'm pretty sure that's correct. <rimshot>
Welcome, fellow jarheads, to Tales from the jar side, the Kousen IT newsletter, for the week of November 27 - December 4, 2022. This week I taught the third week of my new Android Development bootcamp on the O’Reilly Learning Platform, and then a private course on Gradle for Android for a client in the Central European time zone (more about that later).
Regular readers of (and listeners to) this newsletter are affectionately known as jarheads, and are far more intelligent, sophisticated, and attractive than the average newsletter reader (or listener). If you wish to become a jarhead, please subscribe using this button:
As a reminder, when this message is truncated in email, click on the title to open it in a browser tab formatted properly for both the web and mobile.
The Business of Training
I spend so much time teaching for just two clients (the O’Reilly Learning Platform, and No Fluff, Just Stuff Virtual Workshops), that I don’t have a lot of time available for other work. Over the past few years I’ve always been in various stages of writing a book as well, and speaking on the NFJS conference tour and at other conferences, like Devnexus or JavaOne.
That means I don’t generally go looking for clients. I know that violates a basic principle of extreme late-stage capitalism, where growth is everything and you should always be hustling for more, more, more all the time. I already do spend too much time working, but for me it’s more learning new technologies and keeping up with the latest developments in topics I’m supposed to already know than doing anything business related.
As I like to put it, in the IT world there are two facts of life:
There’s never enough time to learn everything you need to know, and
What you’ve already learned changes.
Life is complicated enough without also spending time finding new clients all the time. This is also why I have stayed a one-person company since I founded Kousen IT back in 2005. If I had several trainers working for me, they would be relying on me to find business for them, and I don’t really know how to do that. The American Dream of running your own business is supposed to transform you from someone who makes money for others into someone others make money for, and I’ve never made that leap. That would require me to spend a lot more time in sales and management rather than either teaching or learning, and frankly I’m not willing to make that trade.
If you stay visible enough, and you stay in one field long enough, however, sometimes clients find you. It took nearly a decade on my own before that started to happen to me regularly. Prior to that almost all my work was as a subcontractor to training companies.
The way that worked is:
A training company offers a wide array of training courses on their web site or other marketing materials.
A client (possibly one of their regulars) comes to them asking for a class.
They promise to customize the class, discuss logistics and scheduling, and arrange for an instructor.
The instructor, who is normally involved in that customization process, shows up, teaches the class, sends in any evaluations or other results, and sends the training company an invoice.
That all sounds simple enough, but just as there are clients and there are clients, there are courses and there are courses.
(Sure, there are dinner jackets and dinner jackets, but he’s James Bond. He’s likely to look good in anything.)
Some instructors make a living teaching Microsoft Word or Excel, and those are pretty canned courses with well-known materials. That also means instructors who teach those courses are essentially commodities — one is as good as another, at least from the training company’s perspective. That’s not actually true, of course, as anyone who’s had a bad instructor can attest, but if you’re an experienced professional trainer, you have a certain minimum quality that satisfies most training companies.
Some training companies care more about the quality of the trainers than others. Some are happy as long as they don’t get any complaints from the client. Others insist on top marks on all the evaluations or they want to know why. Of course, most of the training companies don’t actually know much about the topics, leading to this wry joke:
Q: What’s the difference between a training salesperson and a used car salesperson?
A: The used car salesperson knows when they’re lying to you.
To make a decent income, however, you have to be able to teach the hard stuff, and since the technologies change all the time (see point 2 above), you have to keep scrambling to understand whatever the latest developments are in your field. That’s why I make sure to know the latest features added in Java 17, 18, and 19, and the releases of Spring Boot 3 and Spring 6 in the last couple weeks were a big deal to me, even though it could be six months to a year before any client actually cares about any of those versions.
I spent the first five years of my career as a trainer working full-time for a training company (the Golden Consulting Group, which no longer exists — you know you’re getting older when most of the companies you previously worked for don’t exist anymore). These days most training companies don’t employ trainers full time, for the same reason I don’t — they don’t want to have to find work for them in the down times. Instead, most training companies rely on contract trainers. They form an ongoing relationship with a handful of instructors, and try to use them over and over again. As a trainer, building my business in the early years involved forming those sorts of relationships with a rotating set of half a dozen training companies that could keep my schedule reasonably full.
To do that, it helps to teach a wide range of topics. At Golden, in the early days all I taught was Introduction to Java (an exceptionally difficult course to teach, for reasons I’ll address some other time), then expanded into Intermediate and Advanced topics in that area, then picked up XML-related topics like stylesheet transformations and schemas, and more general issues like Object-Oriented Programming concepts and design, and so on. When I went on my own, however, I needed to expand that further.
One challenge that arises is that even beyond learning all those new topics, there really isn’t time to build up development experience in those topics as well beyond what you can do on your own. Even though I occasionally do small, short-term consulting projects, consultants are already supposed to be experts in the topic at hand. Training companies always say that their trainers have industrial experience, and they generally have some, but again, there’s business experience and there’s business experience. Some developers have 10 years of experience on a wide range of technologies. Some have 10 years of experience repeating the same single year over and over, never really learning anything new.
A similar phenomenon happens with code inside companies. Some of the code clients use is elegant and sophisticated. A lot more is made up of compromises that seemed necessary at the time but are now brittle and difficult to maintain. Some code was written by a developer who tried to use the latest “best practices,” only to learn later that today’s best practices are tomorrow’s maintenance problems.
By the way, I never use the term best practices, even though it’s very common in the industry. Other developers understand intuitively that the phrase means how the designers of the technology expected it to be used, combined with what seems to work well in practice. Managers, unfortunately, hear that word best and focus on that — if you modify the best practices, you’re not best anymore, right? Why would anybody want to do that? In reality, of course, best practices aren’t best, they’re common, and at most represent the current thinking in the area, subject to change and certainly subject to whatever constraints you’re under at the time you’re using them. My response to the question of why would you modify best practices is that I’m customizing the advice to our circumstances and requirements. Normally, however, I duck the entire problem by using the term common practices, even when talking to developers, just in case any manager might be listening.
Getting back to the training business, the result is that a trainer often has to oversell their own experience with a technology, based on their knowledge of both the actual topics and others’ experiences, as evidenced by blogs, Medium posts, podcasts, online articles, and so on. While we don’t say it explicitly, the first hurdle in any training course is convincing the students you have something worthwhile to say. If they suspect all you know is what’s in the materials, you’re going to have problems.
We’ve all been there, though. In my early days on my own, I agreed to teach almost anything almost anywhere. That meant I definitely taught courses where I had to rely on an excellent set of materials and dreaded every question that went beyond them. Even if the materials were good, though, I never slept well before my first delivery of a new course, because even if I know the material, I don’t know what questions are going to come up. If you’re teaching an experienced group of students, too, you have the added challenge of not knowing what they know and what they don’t.
All of this is a long prelude to the fact that I taught one of the most difficult courses of my career this week, because it combined a topic where my knowledge was a mix of old and new, for a group of highly experienced developers, online, in a very early time zone for me.
Gradle for Android
A couple months ago a client approached me about teaching a Gradle course. I’ve taught introductory Gradle courses countless times. Until recently, I used to teach the official Introduction to Gradle course for Gradle, Inc, online, every other month, using their materials. During the initial discussions with the client, however, I discovered that they were primarily Android developers, and wanted the Gradle training to be relevant to that.
Okay, I can do that, too, mostly. Then I found out they had already moved to the Kotlin DSL for Gradle, which I’ve used occasionally but don’t know well. Also, most of them were already experienced with both Gradle and Android, so they wanted at least an intermediate class, and possibly an advanced one. Finally, they were in Europe, so while they were kind enough to start late in the day for them, it was still going to be roughly 4 in the morning for me.
I said yes, of course. It’s hard to say no when the client is asking about topics you’re interested in and you can charge a lot of money for it. Besides — and I had to keep reminding myself of this — a few years ago I wrote a whole freakin’ book on the subject, called Gradle Recipes for Android, so I ought to know something about it. The book is pretty dated by now, but as part of my preparation I updated all the examples in the GitHub repository to the latest versions of the libraries, which turned out to be a much easier process than I expected.
By the way, you come up with a price for a course (or any consulting gig) by asking for an amount of money that will leave you happy whether they say yes or no. I went on the high side, half hoping they’d say no, but they agreed. I probably should have asked for more.
To make a long story short (much too late, I know), I think the class went well. At least I think it went well, because I haven’t received any feedback yet (the class ended Friday afternoon). It took everything I had to pull it off. I used a combination of books and third party materials, live coded parts in front of them, had them help me with porting some of my existing implementations from the Groovy DSL to the Kotlin DSL, and somehow managed to fill the required hours.
I know there was at least one student who already knew everything I talked about. I’m not entirely sure what he was doing there, since he knew so much, but I did rely on him to tell the class how these concepts were implemented in his organization. Since the class was online, it was harder than normal to find out what most of the students were thinking, but they seemed to be engaged.
I learned a lot, and it all came out okay. In the end, I don’t think I aged more than five years during the process, and hey, what was I going to do with those five years anyway?
(I’ll tell you, the idea of retiring is starting to look better and better all the time.)
At least for the rest of the year, I’m back to teaching things I (mostly) already know.
Miscellaneous
The Holiday Jokes Have Started
Glen Weldon is brilliant at these sorts of gags, and even though this is a Donner Party joke, I liked it. Here’s another of his:
Wow, both a Soul Train and a Yukon Cornelius joke, together. Nicely done.
One of his most popular every year, is this one:
I think I better just move on.
Pulsh
What could go wrong?
Everybody remembers The Far Side gag with the Midvale School for the Gifted:
My favorite variation of this gag is the short poem:
Signs marked pull
Reduce the speed
Of those who push
Before they read
Indeed.
Coke and Bears
If you’re wondering what this is a reference to, the following movie trailer set the Internet on fire this week:
That could be epically good or epically awful, but good for them for trying.
Finally, Elon
I was going to include a summary of the combination of exceptionally stupid and extreme right-wing actions Elon took this week, but I’m too tired. People seem to forget, however, that his worth before the Twitter acquisition was estimated around $250 billion, which means even if Twitter lost $1 billion / year, he could fund it for the next hundred years and still have $100 billion.
I’m slowly transitioning over to Mastodon. If you’re one of those people who posts the same messages on both sites, I’m unfollowing you on Twitter. Nothing wrong with that, but I don’t feel like reading the same posts twice.
Tesla, too
Speaking of Mastodon, here’s a couple from there, as embedded images:
I admit it — I still like my Tesla Model 3. It’s over four years old, has given me almost no trouble at all, and still runs perfectly. But yikes.
Kanye, or Ye, or other less flattering names
I was going to say Elon’s self-own since buying Twitter is the biggest one I’ve ever seen, but then there’s the tattered remnants of Ye’s reputation.
Elf on the Shelf is too much of a reflection of our surveillance society
And finally,
Awesome.
Have a great week, everybody. :)
As a reminder, you can see all my upcoming training courses on the O’Reilly Learning Platform here and all the upcoming NFJS Virtual Workshops here.
Last week:
Android Development Bootcamp (week 3), on the O’Reilly Learning Platform
Gradle for Android, private class
This week:
Spring and Spring Boot in 3 Weeks (week 1), on the O’Reilly Learning Platform
Java Testing, Part I: JUnit 5 and AssertJ, an NFJS Virtual Workshop
Java Testing, Part II: Mocks, Stubs, and Spies with Mockito, ditto
Nice thoughts and article, thanks for sharing! ;-)
You used a lot of rimshots this week. ;-)