On Teaching a PowerShell Class for Brent Ozar Unlimited

How we got to here

Back in January of 2017, I was sitting in a conference room at work, getting ready to present an online demonstration of what’s possible when you start to leverage PowerShell with SQL Server. The venue? Brent Ozar’s recently launched GroupBy conference, a free, two-day online event that uses crowd sourced feedback to see what sessions a given person would want to watch. I’d given this talk before at a lot of SQL Saturdays, so the content was already prepared. Presenting online is always a much bigger challenge (for me, at least) because you can’t gauge how invested people are in what you’re saying. The presentation went well (aside from the lights going out in the room while I was on camera), and I got really nice feedback from the people who watched it.

I was back a few times to GroupBy after that, mostly hanging out as a co-host for some sessions and also asking Pinal Dave what he likes to get at McDonalds. I was happy to have been a part of it, and this story could have ended there. However, I had noticed that Brent had recently contracted with some other folks outside of his team to present different topics, like High Availability, advanced SSIS, and even some statistics analysis and data science stuff. This was about the same time I was knuckle-deep in building the HASSP project, and Brent and I had been in touch since he so graciously donated some new GoPro cameras to the project.

I first met Brent way back in 2013, when I attended a live training event he and his crew were running in Chicago. I learned a lot at the event, but I took away much more than just knowledge: I left with the push and desire to start speaking, thanks to Kendra. I didn’t jump right in, at least not right away: I kept attending technical conferences (and a lot of SQL Saturdays and user groups) looking to see what other people were doing, and how I could develop my own voice. Since then, I’ve had the opportunity to present a lot of paces, including PASS Summit and awesome places like Norway.

Fast forward to last summer, around early June. I was catching up with Brent online on a number of things (cars, HASSP, SQL Server stuff) and we were talking about various projects, and I mentioned that I thought it was cool he was offering up classes from guest instructors. He shared some of the details with me, about how they work, and why he does them. I casually mentioned, half joking, that he should offer a PowerShell one.

All he said was “Sure. When do you want to present it?”

After I picked up my jaw off the floor and caught my breath, I realized I really didn’t have an answer. I knew getting all the material together, practicing, and then presenting was going to take a lot of work, and I didn’t want to rush. I figured a lead-up time of six months would be plenty, so we agreed on mid-January of 2018. We then talked about how the class would be structured, and what it would offer. Brent gave me some tips on how it could work well, and what to avoid. And with that, he told me to go and write an abstract.

Writing good abstracts is hard, and some people are just better at it than others and as with most things, the more you do it, the better you get. I’ve written my share of them, with varied success. I took my time crafting the first draft, and Brent also put a lot effort in reviewing the various revised drafts I sent over. We took our time with it, making it as marketable as possible. It took about three or four revisions to get it right, to where we (both Brent and I) looked at it and just said: “That’s it. That’s the one.” So we rolled with it.

The class enrollment page announced and opened on October 30th, 2017, with spots for 25 students. It hit Brent’s email distribution list the same day.

It was sold out by November 15th.

What’s in a class?

Flop-sweat time; now I actually had to get a class together. For the months leading up to the announcement I sketched out rough outlines but I didn’t have anything concrete. It was time to hunker down and figure out just how I was going to accomplish this. I had never done any kind of training outside of a 75-minute talk before; I’ve never (as of this writing) even submitted to present a pre-con at a conference or SQL Saturday before. And that’s just one day; I’d need enough content to fill two days’ worth of class.

I knew ahead of time this was going to take a lot of effort to get right, so after the class announcement went out I set about creating outlines for each of the modules for the class. I wanted to break the class up logically, with the first day being about PowerShell basics (including setting up and configuring your own development environment) and jump straight from the basics into working with SQL Server in PowerShell.

But what topics to offer? This was the first big hurdle: what would people want to learn, and what could I expect them to come in knowing? It could be all over the board, so I just threw out everything I assumed about how they’d want to learn and instead focused on how I wanted to teach. I thought about how I felt when I started learning PowerShell; things I wish I knew and understood better instead of learning later, and used that to build a guided series of modules that went from bare basics all the way up to writing functions and scripting out tasks in SQL Server.

Slowly but surely, the content started to fill the slides. There was a lot of editing, consolidating, then un-consolidating, and finally more editing. In the end, I had twelve sets of slides, six sets per day, for each module I wanted to present.

And that’s when I started to panic a little: what if this wasn’t enough? The last thing I wanted was to get 28 people on a web conference, and them expecting to be instructed for 8 hours a day and finishing around 3:00 PM. I carefully reviewed each slide, obsessing on the content and transitions. It drove me insane.

Slides aren’t enough, though. I wanted to do more than talk, I wanted to show. For that, I’d need demos. Lots of them. As the slides started to come together, I started creating a series of demo files to go along with what I wanted to show them. I bounced back and forth from slides to demos, and then back to slides as the demo code helped me remember points I omitted. Suddenly, the content started to congeal. All that was left now were the labs.

Oh yeah, the lab work: In addition to me talking and showing off demos, I wanted to have the class work on their own on assignments. So at the end of each session, I put three or four “challenges” to put the content we just discussed into practice, which meant more coding and testing on my end. But where would these students do these labs? That was the real “killer” feature of the course: we were going to stand up individual Amazon AWS virtual machines for them to work on! Sounds like a great idea, right?

It’s also a lot work to get a good working template together. I spent a lot of time working on that, racking up charges, to get the template just right for each student. Once I was happy with it (and walked through each lab a half-dozen times), I shut it down and had Brent clone them for each student.

This all unfolded over the course of months, in addition to all the real-life work, personal projects, and other speaking engagements I was queued up for. Once the holidays hit, instead of spending time with family like I normally did, I pretty much spent 4 – 5 hours a night rehearsing, correcting, and finalizing my content. I obsessively timed each section, mapping out what each section took to present and then adding in time for the labs, until I was confident I had the timing down for two straight days of presenting.

Still, I was a ball of nerves. After all, as Napoleon once said: “merde merde merde merde merde merde merde” “No plan survives first contact with the enemy.” The only way to figure out if this was going to work was to just do it. A couple of days before the presentation, I just had to unplug and try to relax.

When the days came and went, I couldn’t believe how exhausted I was afterwards. It felt great, don’t get me wrong, but I was just so tired after being “on” for two straight days. I hate to sound hyperbolic, but I couldn’t have been more pleased with the outcome. The classes went off without a hitch; the content came across (mostly) how I wanted it to, the students were engaged and entertained, and people really seemed to learn a lot and were really kind in their reviews.

With the dust settled, and me slowly decompressing, I got a message from Brent. All it asked was “when do you want to do it again?”

Things that went great…

Honestly, I don’t think I could have asked for a better first go-round with the class, but here’s what I thought worked extremely well:

  • The student VMs were a big hit. I pre-staged them with a lot of software (like SQL Server instances) and some test data and files, and let the students do the rest. I spent a short first session walking though the environments and making sure everyone could log in and successfully use the tools I staged in the template. Making sure everyone was on the same development environment took away almost all the “X” factors from individual machines and instead let me focus on content and not troubleshooting.
  • The bridge between me and presenters was the SQL Server Community Slack channel. We had a channel set up where students could ask questions. It worked so much better than the standard “ask a question” functionality in GoToMeeting, and it even let me set up polls to check on students as they progressed through the labs. Plus, having someone from Brent Ozar Unlimited on the line to help moderate really worked well too.
  • Rocky also was a big hit with the attendees:

    That was legit concern; I was presenting from home and Rocky sure likes to bark. But he was a really good boy! He loved laying there watching me, plus the people on the call all shared their dogs too. They’re all good dogs.

  • I was was also really impressed with how the students all helped each other too. As they were working through the module labs, if people had questions I would do my best to answer on camera, but the students also really enjoyed helping each other too. They were also really excited to share their answers to some of the labs, too. That was really amazing to watch.

… and things that could have been better

Of course, there’s always room for improvement. Here’s some things I didn’t really think worked out that well:

  • I spent so much time worrying I wouldn’t have enough content, that I ended up having too much. That meant cutting things. I didn’t get to two modules that I would have liked to, and while I was okay cutting one related to doing basic ETL with PowerShell, I ended up skipping over a module dedicated to the SQL Server agent, which I didn’t want to do. In a future class, if I have to cut anything I wouldn’t cut that one, instead…
  • … the backup and restore module didn’t go over as well as I would have liked. I think it’s an important concept to cover when talking about SQL Server and PowerShell, it’s just that it could easily be twice as long as I allowed for it, and in the end I wasn’t as clear in my messaging with it as I would have liked. I’d much rather have dropped this one, and focused on the agent (creating/copying/querying jobs) and how to “properly” schedule agent jobs to run scripting and instead left the students example scripts to play with instead for the backups and restores (and automating them).
  • I ended up using OneDrive to make the slides, demos, and lab answers available to the students. Next time, I want to write some scripting that copies out the content to their VMs as we complete section. I don’t want to put the content out there ahead of time so they don’t jump ahead, but I also want to make it easy for them to work with the code I made available (and easier to get to after the class too).
  • I need to drink less caffeine. One student commented I was jumping around too much on camera while I was presenting, and he wasn’t wrong. I’m going to chalk that up to being nervous presenting this for the first time, as well as drinking lots and lots of coffee throughout. Of course, I get really fired up for PowerShell, so maybe that came through a little too. Still, I’ll try to be cognizant of it for next time.
  • I invested in some nice lighting, a new microphone, and upgraded web camera for the presentation, but for next time I’m going to put even more effort into it. I really was over-lighted during the presentation, and I need to adjust my setup for next time. Maybe warmer color lights, or more space to present from.

It helps to have good people in your corner

Honestly, as much credit as I could take for putting this all together, I can’t take all of it. Heck, I can’t even take half of it. There’s a long list of people who supported me in different ways throughout this process, and I’m not going to hit them all here, but I want to call a few people out for helping me:

  • None of this would have been possible without Brent; I mean, his company’s name is on the training. But it goes way beyond just that: Brent has been a mentor, a salesman, a confidant, a critic, and even a friend throughout this entire process. I doubt I’d have the success I’ve had with this or some of my other endeavors without him. I’m lucky to be able to rely on him. I’ll probably never come close to being able to repay all the time, effort, money, and energy he’s invested in me, not to mention his patience talking me off the ledge throughout the process when I thought I was close to losing it more than once.
  • I also had a bit of a cheering section, too: people like Andy Mallon, Jes Borland, and Chris Yates checking on me to see how things were going, and constantly giving me some moral support as I worked through all this stuff. I couldn’t have done it without them, and I’m pretty heckin’ pleased to call them friends, too.
  • I may have delivered a good two-day class on PowerShell, but I still consider myself far from an expert. Fortunately, I know a few, specifically, Chrissy LaMaire who helped shape and craft this course. For me, it’s not enough to teach a class; I want it to be fun, exciting, and most of all, technically accurate. That’s why I love knowing Chrissy and being able to bounce ideas off of her and make sure I’m adhering to best practices surrounding PowerShell. I’d feel terrible if I gave someone some bad advice during training, so I’m thankful she made (and continues to make) time for and my questions.
  • Even though this was well outside my day job, I had a lot of solid coworkers show their support to: Alex, Matt, Jon, John, Robert, Paul, Julie, Adam, Rick, and of course, Gene. These are friends, too, and I hit the lottery working at a place with people like these. If you think I’m good at this stuff, you should see these guys and girls. IGS has been nothing but supportive for me, and I can’t thank them enough.
  • And last, but not least, my wife and my dog, for putting up with me during these long months of preparing to present. I know that I’m not always the most pleasant person to be around when I’m stressed, and those last few weeks were, uh, pretty rough. Through it all though, they were there for me, and I can’t imagine trying to do this alone and without them being there for support.

There’s so many more people, though, that I’m sure I’m leaving out someone. The point is, in order to do something like this you need a good support network, and I’m blessed to have the one that I have, because without them I doubt I’d have been as successful as I was, because we’re presenting another class in March. I can’t wait to continue to build on what I’ve done so far, and I hope you get to be a part of it, too!


Leave a Reply

Your email address will not be published. Required fields are marked *