Focusing on what’s important

At the No Fluff, Just Stuff conference I attended last week, I managed to talk to a couple of the presenters and quietly ask about the rates they charge.

That’s always a dicey subject, of course, but it’s very hard to get good information about that.  Software trainers don’t have a union, or anything like that.  We also tend to be a pretty independent lot.  Also, software developers are almost always highly opinionated, and trainers can be even worse since they have a soapbox to stand on.  It’s easy to see how egos can bump into each other when we get together.   The result is that my “market research” consists of talking to a few, trusted individuals and then negotiating with my favorite training companies as a subcontractor.

Those can be unreliable sources of information, though.  Individuals can exaggerate and claim that they gate a particular rate when they rarely see it.  Training companies want to minimize their costs so they may claim they can find someone else for a lower price.

My original approach was to talk to a good friend who was a trainer and adopt his price as mine.  It also fit my budget, which is based on invoicing a certain minimum amount per month.  Based on that amount, I know how many days I need to teach.  I’ve learned over the past couple of years what my upper limit is before I start to get really tired and my quality starts to suffer.

For me, though, I still get many more requests than I can honor.  Without any marketing at all, my schedule can get booked solid for months.  It’s probably inevitable that I start wondering whether I’m undercharging for my services.

At the NFJS conference the presenters are among the leaders in the development industry.  They consequently are in serious demand for their services, but mostly in the form of contracts.  Most of them also do training, though, and they charge a premium for it.

Comparing my rate to theirs, though, is not so easy.  I’m a trainer first and a developer second, though writing code is very important to me.  I can’t imagine I’d ever be happy without being in a classroom occasionally, for reasons I’ve detailed here many times.  Since I spend much more time and effort teaching than writing code, it’s also very unlikely that I’ll ever come up with some fundamental framework that everyone adopts, so I’m unlikely to be the sole or original source of some highly sought-after technology.

Still, it’s hard not to get greedy.  I spoke to a couple of presenters at the conference, as I said above, and what they said gave me the feeling I was significantly underpaid.

Now, I’m not a presenter at NFJS.  I don’t have major book publications to my name.

(Aside: I once read that Bruce Eckel, author of Thinking In Java — now in 5th edition, but whose first edition was my first Java book — said that the book didn’t make him a lot of money.  Instead, being the author of that book helped him increase his rates considerably, and that made him a lot of money.)

I don’t run a consulting firm with lots of employees.  I also don’t run a training firm with lots of employees.  I occasionally work directly with a client instead of as a subcontractor to training companies, and that’s both much more lucrative and much more work.

Greed is a great motivator, though.  So is jealousy.  I don’t like either one, but it’s hard to ignore them.  I suppose they’re acceptable if I use them as motivation to work harder and improve myself.  I’m now thinking I should get more involved in book projects, for example, and become a better developer by doing more project work.

In the meantime, though, I prodded my clients by asking for a slightly higher rate.  One client accepted without a second thought.  Another pushed back, and I compromised.  A third said fine, charge anything I want, but that it will affect what work is offered to me later.

I also had a change to talk to one of my friends at a training company and discovered that one of those presenters at the conference was lying to me, or at least exaggerating.

The upshot of all of this is that I have to periodically remind myself what’s important to me in this business.  I want to work with clients I like.  I want to work on state-of-the-art technologies using state-of-the-art tools (I’m never going to be a Microsoft Word trainer, for example).  I want to make money for people I like.  I want to help students do things they couldn’t do before.   I’d also like to make a million dollars, but only if I can still do all the above.

Money isn’t the most important thing, not by a long shot.  I need to have enough that it’s not an overriding issue, and there’s a certain amount of pride involved, too.  I believe I am a very good trainer and I’m always working to get better.  I think that’s worth a certain amount of reward and a certain amount of respect, a respect in this culture is often given in dollar amounts.  Still, the key is to do what I want to do with the people I want to work with, and that’s awfully valuable.  I spent years and years in other jobs where I didn’t get any of that.

My route to making money will be to learn what’s both popular and enjoyable and cutting edge and do a lot of that.  That’s why these days I teach a lot of Hibernate, Spring, JSF, and Ajax classes.  I also happen to like EJB3 and think it’s going to be very big.

In the meantime, I’m going to spend this afternoon digging into  Dierk Konig’s Groovy in Action book some more and get ready for next week’s class.

Always trying to make contact

I guess this is more of a Xander story than a holiday story, but it has the benefit of being true and even cheerful.

My son Xander (short for Alexander — calling him Xander makes him unique in a crowd full of Alexanders and Alexandras) enjoys playing baseball, but he never had a chance to play in an organized league until we moved to Marlborough two years ago.  When he started, he was a 12 year old in a league that let in 12 to 14 year old boys, most of whom had been playing organized baseball all their lives.

(That, as it turns out, is a New England thing.  When I was growing up in Pennsylvania, football was king.  Since I was small and made up for it by being slow, I didn’t have much of a career.  Around here, everybody plays baseball.  Frankly, I think that’s a good thing, as long as they’re not accursed Yankee fans.)

Xander was smaller than most of the other boys at the time, but he always had more confidence than he could handle.

(Winston Churchill once famously said that the Balkans manufacture more history than they can consume locally.  I often feel similarly about Xander.  If he survives, he’ll be a very impressive adult.  Sometimes I think that’s a pretty big “if”.)

Xander therefore played anywhere and any time he got the chance.  Still smarting from my own little league baseball experiences (I got to play in a 12 to 14 year old league when I was 15 and nobody minded), I arranged to get the boy some lessons at a local batting cage.  That helped, but he was still way behind the other kids in skills development.  He had a natural eye, though, and was learning fast.

Anyway, at the end of that first season the league had an all-inclusive playoff.  The game was held on a Friday evening in late October (this was a Fall league focused more on instruction than winning) so it was pretty cold out.  I was teaching that week but made it back from Boston during the first inning.

The game was a back-and-forth affair, as games with kids that age often are.  Pitchers are unhittable for an inning or two, then can’t find the plate at all, then find it again sporadically.  Fielders made hard plays and botch easy ones.  Throwing to a cut-off man is always an adventure.

Finally we reached the bottom of the last inning (the 7th), with my son’s team down by three runs.  A couple of kids get on, a couple of outs happen, and eventually my wife and I realize that a potential nightmare is about to happen.  Xander is about to come to the plate with two outs and two men on in the bottom of the last inning of a playoff game.

Now as bad as my baseball career was, I still remember a lot of it.  I remember the first time I saw a real curveball and dived out of the way just before the umpire said “strike!” I remember actually hitting the ball over the center fielder’s head and making it all the way to second before the throw came in.  I remember fielding a ball cleanly at third (third? what the heck was I doing at third?) and being so surprised I’d snagged it that I airmailed it over the firstbaseman’s head.  I remember grounding to the shortstop and being thrown out at first even thought the fielder bobbled the ball three times.

(Another kid, trying to be nice, said to me on the way back to the dugout, “are you faking it, or are you really that slow?”)

So I’m very worried now, because if Xander strikes out to end the game with the tying runs on base, it could scar him forever.  I looked over a Ginger and I could tell she was thinking the same thing.

So what happened?  My boy fouls of a bunch of pitches, takes two strikes, and hits a grounder up the middle that he beat out for a single.  The next kid up flies out to end the game.

I, of course, let out a huge breath that I hadn’t realized I’d been holding.  When I met with Xander afterwards, I asked him about it.

“Weren’t you worried about striking out?” I asked.

“Nah,” he replied.  “I knew I’d make contact.”

And there you have it.  It’s been two years now and I’ll bet he’s even forgotten about it, but that’s Xander in a nutshell.  He’s got a lot to learn and the thought of him being a font of wisdom is bizarre, but that’s not a bad life lesson.  When it’s your turn at bat, know that you’ll make contact and everything will be okay.  I can live with that.

Happy holidays, everybody.

Some things I’m happy about

I realized I’ve been doing some complaining lately, probably because I’ve been fighting a cold recently and that makes everything harder.

(Aside: In almost seven years of full-time training, I’ve never missed a day due to illness. This week I came awfully close to breaking that streak, but pulled it out somehow. Now if my ears would only unplug…)

To compensate, I thought I’d list a few things, both technology-wise and other, that I’m happy about.

1. The EJB3 spec means I never have to deal with JNDI again. They’ve replaced it with dependency injection. Since JNDI is also known as the bane of my existence, I’m very, very happy about this.

2. Speaking of EJB3, they took a technology that was a maze of complications and confusion and made it really easy. Sweet.

3. My Comcast cable modem is probably three times as fast now as it was a couple of years ago. I realized this week that IBM had finally released RAD7. The total download size is about 5.3 gigs (yes, gigs). I waited until I got home and started the download and it took just over two hours. Amazing. Of course, it makes me wonder if I could have had that speed all along, but they’ve been throttling it…

4. In a year when we got a new James Bond, a new Superman, and a new Batman, the Batman movie totally wins, mostly because it had a wonderful script, great performances, and even excellent music. I liked the Bond movie, too, but the torture scene was disturbing, even though it was true to the book. I found the Superman movie disappointing. Still, as Meatloaf once said, two out of three ain’t bad. Daniel Craig and Christian Bale are two actors I’d never heard of but now look forward to watching.

(Another aside: Rachel Dawes gives this big speech at the end about how “the man she loved” never came back.  Excuse me, but you’re talking to a good-looking, intelligent billionaire who obviously loves you.  Aren’t you setting your standards just a wee bit too high?  Of course, then she went and married Tom Cruise, so her judgement is seriously open to question anyway.)

5. The movie Daredevil (which I felt was quite underrated) introduced me to the band Evanescence. Their album The Open Door was released a couple months ago and I still play it every time I’m in the car. It’s become one of my all time favorites. The song “Good Enough” is almost too gorgeous.

6. I’m still grateful that I get to read columns from the Sports Guy (Bill Simmons) and articles from the writers at Baseball Prospectus (I almost said “guys” and then remembered Christina Kahrl, who is excellent) on a regular basis.

7. I love my job, really enjoy running my own business, and people keep calling offering me money to go to new places and teach interesting things. Life is good. 🙂

Some things I have to remind myself periodically

Here are some instructor tips I’ve learned but have to remind myself over and over again, because I forget.

1. If a student asks a question that I’ve just finished answering, keep in mind that if the student is thinking, they’re not listening to me.  That’s a good thing.

2. Just because a student is in a training class, their job doesn’t stop.  I understand when they have to monitor their email.  I still find IM clients in class annoying, though.

3. At every educational level, teachers tend to focus on the brightest and most aggressive students, and on the slowest and most disruptive students.  Most students fall in between, though, and that’s really the group to pay attention to.

Corrollary: if you’re a student wondering which group you’re in, if the teacher ever looks around and says, “where is everybody today?,” then you’re in the middle.

4. While the Myers-Briggs Type Indicator is certainly an oversimplification of reality, some students are E’s rather than I’s (extraverts rather than introverts).  In other words, they’re going to think out loud, even if they’re just echoing what you just said.  That, too, is a good thing — it shows they’re engaged in the class.

5. Explain everything in great detail, very slowly, demonstrating each step as you go, and still somebody will miss a step and get lost.  It just happens.  Don’t worry about it, even if you have to explain it again and again.  That’s what you’re there for.

6. Show just the tiniest bit of irritation at a question, and you’ll pay for it later.  And you deserve to.

Corrollary: if you find yourself irritated at questions more than once in a long while, you’re teaching too many weeks in a row.  Take a break.  Everybody will be happier for it.

7. If I’m learning something and there’s a part I don’t get, sooner or later I’ll wind up teaching it.  It happens to me all the time.

Fact: the worst grade I ever received was in a numerical analysis class my senior year at M.I.T.  I almost failed it and it nearly cost me my math degree.  Sure enough, the first course I ever taught as a professor was numerical analysis.  G-d’s sense of humor works like that for me.

8.  Materials sometimes don’t show up, or they do and they’re wrong or out of date.  Software sometimes won’t install, or crashes at odd intervals, or suddenly stops working.  Computers are evil, pure and simple.  But a positive attitude in class really does help, as much as I hate to admit it.

9.  Students are there to learn what they need to know, not to be dazzled by what you’ve spent years learning.  An occasional story is fun, especially if it’s about a related technology experience, but don’t waste too much time on them.  Do your job.

10. If a student isn’t happy and complains, be very grateful.  It’s the quiet ones who never say anything that you have to watch.

11. I do love my job and definitely was born to do this, but I can’t reach every student every time.  It’s just not possible.  And as charming, clever, and witty as I am, not everybody appreciates my sense of humor.  Just move on.

12. As the old saying goes, when the student is ready, the teacher will appear.  I hope I’m not booked that week. 🙂

Design Patterns

The class I’m teaching this week and next is a massive, customized combination of Design Patterns, JSTL, JSF, Spring, and Hibernate. It’s going to be an adventure.

Today, though, we were digging into patterns. Design patterns has usually been my favorite course to teach. If teaching is all about giving people the ability to do things they couldn’t do before, then patterns is one of those fundamentally enabling topics that helps all your code everywhere. It also helps people understand code from others that they’re reading, not to mention the Java APIs.

We talked mostly about Abstract Factory, Factory Method, Singleton, Strategy, Template Method, and Observer. Suffice it to say that it was a rather long day. I happen to like all of those and use them regularly. There are other creational patterns, too, like Builder and Prototype, that our materials didn’t dig into but I discussed with the students.

Yup, they’re fried, and it’s only Tuesday. It’s a standard dilemma. We have lots of material to cover, but it’s just hard to absorb that much that quickly. The students are roughly intermediate Java developers (with a wide standard deviation), but still sometimes the Java stuff itself is a bit of a challenge to them.

I brought up the Head First Design Patterns book and they seemed interested. I have mixed feelings about the whole Head First series. Kathy Sierra herself once wrote that people who criticize the books are often people who already know the technology. That’s probably true. The Head First EJB book was wonderful and got me through the Sun Certified Business Component Developer exam. On the other hand, I didn’t like the Head First Servlets and JSPs book at all. But, then again, I already knew servlets and JSPs when I read the book.

Personally, my favorite patterns book is still Applied Java Patterns by Stelting and Maasen, even though it’s getting a bit dated by now (published in Dec, 2001).

[The Mets blew a great opportunity. They had men on 2nd and 3rd with one out and didn’t score. They’re down to three outs left in order to keep from going down 3 games to 2.]

Incidentally, the students use IBM’s Rational Application Developer 6.0 in their jobs. That’s normally okay, but the design patterns materials I have use Java 5 generics, enhanced for loops, and other cool features. For this part of the class we’re using Eclipse 3.2 with the ever-popular MyEclipse 5.0 plug-in. That should really pay off later when we get back to the server side.

What happened to IBM’s tracking of Eclipse developments, anyway? When they first released WSAD 4.0 (WebSphere Studio Application Developer), they also released Eclipse 1.0. They stayed exactly 3 numbers apart for years after that, going to WSAD 5 (Eclipse 2), WSAD 5.1 (Eclipse 2.1), WSAD 5.1.2 (Eclipse 2.1.2), and even RAD 6.0 (Eclipse 3.0). Now Eclipse has moved to 3.1 and then to 3.2 and we’ve gotten nothing from IBM. I’ve heard rumors of a RAD 7, but I don’t know what that’s all about.
Okay, the move to Eclipse 3.1 was big and difficult because that’s the first version that really worked with Java 5. WebSphere still doesn’t get Java 5 at all, which is one of the many reasons I tend to prefer JBoss (now a division of Red Hat).

Speaking of annoyances, Hibernate 3.1 works with Java 5, but doesn’t use Java 5 generics. As ugly and awkward as the generics implementation is (try making a Map where the values are also a List some time), I find it very annoying that I can’t use generics in my code because query.list() and criteria.list() methods both return List of Object. It’s back to casting again, plus I can’t use the for each loop.

Hibernate 3.2 is a hairs-breadth from release. I hope they’ve fixed that, but the betas don’t seem to show it.

The Mets went one-two-three in the 9th. So much for that. As long as the Yankees have been eliminated, I’m happy. 🙂

Ajax in Amsterdam

You know what I hate?  When I feel my phone vibrating on my hip and I’m not wearing my phone.

This is my first time in Amsterdam.  The training site is an IBM center, but I think this is just a room rental.  I’m a sub to a sub to a sub again, so it’s a bit confusing.  It’s also rather surprising that my client’s client felt that it was worth the travel costs to hold a class for only three people.  Works for me, though.

The Ajax materials I’m using this time are very different from the one’s I’ve used before and they’re pretty raw.  Lots of set-up and lab corrections to do, but I think I have most of them worked out now.  It’s very interesting that these materials are strongly focused on Ajax tool kits like Prototype, Dojo, and Rico.  That’s no doubt the future of Ajax.  From a spectator sport point of view, I’ll be watching to see which toolkits win the mindshare wars.

Prototype is definitely going to win, partly because it’s cool ($(), $F(), and all that) and partly because it’s the basis of so many others.  I’m not sure whether Dojo and Rico are going to win out over Scriptaculous, though.  We’ll see.

World Traveler

One of the cool things about this job is that every once in a while I get an email like this:

From: one of my training company clients
To: Me
Subject: Want to go to Europe next week for us?
Would you like to go to Amsterdam next week to teach an Ajax class for us?


How cool is that?

%d bloggers like this: