Archive: January, 2020

CoasterBuzz is 20-years-old

posted by Jeff | Wednesday, January 29, 2020, 9:55 AM | comments: 0

There aren't many things that I can think of that I've done for 20 years. The next longest thing I can think of is my marriage, clocking in at almost 11 years. I've been a parent for less than 10. My longest running job was 3 years. But 20 years ago, I started CoasterBuzz, and it's still a thing.

Tomorrow is actually the official anniversary of the launch date in 2000, and to commemorate it, I've been writing some history down to share with people over the next few months. I've had a unique view of the industry and met a lot of interesting people. Some of the stories are self-indulgent, some are general interest, but whatever, it's my stories. The introduction that I wrote probably captures it all best:

What you're about to read is a one-sided account of 20 years of amusement park history and the web site that covered it. It's part memoir, part history, probably too inside-baseball and definitely more nostalgic than it should be.

I landed in this place quite by accident. Back in 1999, I was beginning to mourn the death of my broadcast career, after being pretty sure in college that I was going to own it. I was 25 when I started Guide To The Point (now known as PointBuzz), and 26 a year later when this site became a thing. There aren't any rules when you're 20-something, or at least, you ignore the rules, and the Internet definitely had no rules. I didn't know what I was doing, I just knew I enjoyed this new hobby of publishing without a printer, a video camera or a transmitter.

Over the years I got to do some really cool things. I was invited to countless roller coaster openings, created an online club, attracted unwanted attention from a ride manufacturer, acquired a professional friendship with a CEO, toured a factory where they made coaster track, and most importantly, built a network of friends that I never expected to have.

Online community in the roller coaster world has already peaked. Maybe it will be more prominent again someday, if niche communities can wrestle it all away from social media giants. But there was a time and place where this community, at CoasterBuzz, brought people together. A few years ago I was at a wedding reception at Walt Disney World. As we enjoyed the drinks and the fries and tots bar (best idea ever), someone made the observation that many of us knew each other primarily because of this site. Sure, I created it, but its existence was something bigger than me. It was the one thing we all had in common. For that, I will forever be grateful.

It's hard to predict the future, but it can be fun to look back. I hope you enjoy some of these stories. You probably won't be interested in all of them, but I hope at least a few of them prove interesting. Thank you for your support over the years!

-Jeff

Truthfully, I can't tell you how much longer I'll do it. I don't have any reason to stop, but I've definitely slowed down. There isn't as much news as there used to be, and huge ride installations like Millennium Force, while not exactly common, aren't setting new records or surprising the world. The industry doesn't have a lot of room to innovate, and there are only so many parks where you can install these great new rides.

Right now, the ad revenue from the site is funding my side project, cloud-hosted POP Forums, which may or may not be a bona fide business, but there are other companies doing it, so why not? My immediate focus for that is to get PointBuzz's forums moved there so we can decouple all of the content stuff from the forum and improve both independently.

So here's to two decades of nerding over roller coasters!


When you want to be a "technology company"

posted by Jeff | Tuesday, January 28, 2020, 8:35 PM | comments: 0

I've had a series of conversations in the last two weeks about the mentality with which companies approach the use and creation of technology. There's an attitude, more a spectrum of attitudes, that companies take toward tech, and it sets a tone and vastly affects outcomes. It ranges from viewing technology as a necessary evil to viewing the company as an entity that creates technology to arrive at some outcome. As you can guess, those companies that live closer to the latter scenario generally get it more right than those at the opposite end.

That doesn't mean that a pure technology player has its collective head in the right place though. There are stereotypical tech companies (that use words like "disruptor" and other nebulous terms) that think the tech itself is the most important thing, above the outcomes. It's a strange and arrogant thing to think that way, but there's an entire culture around it that originates largely from Silicon Valley. But I strongly believe that when a company views itself as a technology company that solves a problem, the outcomes are stronger.

My favorite anecdote about this was the group where I contracted for a short period of time at Progressive. I don't really know if this was a top-down intentional decision, but the leaders I had contact with were very deliberate in their language. They believed the company was a software company that sold insurance. As the first to really embrace online sales, away from the decades-old agency model, I believe that this was the wider intent. It made a difference in how they acted.

Another company that I worked at, or should I say endured for a year, was definitely in the "necessary evil" camp. It doesn't mean that they didn't spend money on technology. In fact, they spent an extraordinary amount, most of it on outside contractors and vendors, with a skeletal staff of B-players internally to try and glue it all together. Had the company viewed itself as a technology company pursuing strong outcomes in their space, I firmly believe that they would have made the creation and use of the technology a core competency, instead of a secondary concern. I'm reasonably certain that they would spend less money, too.

I think that even large companies can and do change when this attitude is taken from the top. Look at Disney... CEO Bob Iger's three high level goals were to invest in the best content (acquisitions of Marvel, Lucasfilm, Fox, etc.), be global and use technology to reach customers. That last part is the top-down direction I'm talking about, and it made Disney+ a thing. Ordinarily, I wouldn't trust a media company to figure that out. You can't phone it in. But there it is, and despite a rough first day or two, it's works pretty well. It took Netflix years to get to that scale. The media company made the decision to be a technology company that served media, instead of a media company that used technology. There is a fundamental difference in thinking there, even if your business itself is technically not the technology thing.

Sometimes I wonder if this is what keeps American business from innovating and winning (aside from the defense of incumbent industry). Think about Tesla's approach to making cars. They relentlessly focused on "the machines that build the machines," which is a different focus from building cars. From that learning process they opened up a plant in China in less than a year. Amazon started by selling books, but the machines that sold the books are now the business segment with the highest margins. The outcomes, the products, are important, but you can't approach getting there in spite of the technological need, you have to get there because of it.


Post-Christmas decoration withdrawal

posted by Jeff | Thursday, January 23, 2020, 7:30 PM | comments: 0

You may know this, but I'm married to a Christmas decoration junkie. The cheer that my darling wife Diana brings to our house every year is amazing and unmatched. We have no less than four Christmas trees in our house. In fact, we bought this particular floor plan in part because we knew the railings along the second floor would be awesome to wrap in lighted garland. Our electrical usage increases by 800 watts when the lights are all on. We tell the Google "Merry Christmas" and all of it comes on at once. (We tell it "Happy New Year" to turn it all off.)

If you were anything like me in college, you probably had Christmas lights up in your dorm room, and probably all year. Sometimes I wonder why we don't do that in our adult life. OK, so it would look junky, lights duct-taped to the wall, I get it, but it still seems weird that we don't do something like it as adults. I sort of do, because I have a bunch of Philips Hue lights in my living room, and go to funky colors when I want. But the duration of decoration, that seems too short. People are really critical about that, with stores selling stuff before Halloween, but when you don't have a real winter, it's different in Central Florida.

This year, our first decorations went up on November 11, and I enthusiastically endorse this. By Thanksgiving, almost everything was up. The last items didn't come down until this week, about half way into January. So yes, we have Christmas decorations up for about two months, or one-sixth of the year, and we're not ashamed.

Now that it's all down, it's kind of sad in here. Actually, that's just because we're enduring some cold and rainy weather, but it does feel like something is missing. Our general decor is not strong. We're not minimalists or anything, but we're far from the type of people who need to put something on every horizontal surface and hand something on every square inch of wall. And while we could hire an interior decorator, that would make the place feel like a model home because it's not "us" stuff.

The good news is that it'll all be back out in ten months. And there might be one tree still hidden in plain sight.


Revisiting the search for inspiration

posted by Jeff | Wednesday, January 22, 2020, 4:05 PM | comments: 0

I've been reading and viewing a lot of stuff about people and things that inspire people. I'm a big fan of catering to intrinsic motivators (while recognizing that people want to get paid what they're worth). A lot of things can inspire people, mostly the words and actions of other people. When you look at history in a wider context, you can see it everywhere. Dr. Martin Luther King's I Have A Dream speech is a big one on my mind given the holiday. Kennedy's declaration that the United States would go to the moon. Heck, 17-year-old Greta Thunberg's plea for action on climate change is a big deal.

I see inspiration in technology all of the time. In software, you can launch a business with very little capital because of the cheap cloud resources available now. We drive a pair of electric cars that cost half as much as they did five years ago, but have twice the range. More than half of our power, including that of the cars, comes from the sun. Most of the world's observable fact is recorded online and searchable from a super computer in my pocket.

But it's hard to focus on all of that positive when there's a whole lot of negative. In my lifetime, we've been taught to be afraid of nuclear weapons, then terrorism, then the economy, and with all of the associated scapegoats largely resigned to non-threat status, the culture has moved on to fear anyone not like you (if you're white, anyway). Especially in light of Dr. King's speech, it's disheartening to see that, in 50 years, we still haven't come far enough. It even feels like the world is making all of the same mistakes again.

There are a few lines in the song "The Stairs" by INXS that always kick me square in the goodies when I haven't heard the song in a long time. It's almost as if I hear them at precisely the right time:

Listen to by the walls
We share the same spaces
Repeated in the corridors
Performing the same movements

The nature of your tragedy
Is chained around your neck
Do you lead, or are you lead
Are you sure that you don't care?

Think about that... it calls out that we have more in common than not, and the ability to move forward is largely up to you. Inspiration is the product of what people do together. If we can't find the inspiration, perhaps we need to be the inspiration.


Using Azure DevOps pipelines for cloud-hosted POP Forums

posted by Jeff | Sunday, January 19, 2020, 11:35 AM | comments: 0

Last week I did my first production deployment of the cloud-hosted version of POP Forums. I'm really excited to offer a version that others can use without setting it up themselves (I'm really excited about the performance, too!). If you've followed me for any length of time, you know that I've been maintaining POP Forums as an open source project since around 2003. The new cloud-hosted version is about 95% the same code, with a few substitutions in the dependency injection container to facilitate multi-tenancy, especially in the asynchronous Azure Functions to make sure that they're acting on behalf of the right tenant. What I'm excited to share is that it's so easy to use the output of the open source project and get those bits into the commercial product.

Any time a commit or merge is made to the master branch of the open source project, a build is triggered in Azure DevOps. Beyond the actual building and running the unit test suite, there are several important steps:

  • dotnet pack: All of the assemblies are wrapped up in Nuget packages. POP Forums has a Razor View library that has all of the server-side UI bits and controllers, so as demonstrated in the sample project, you can run the thing strictly from packages.
  • nuget push: The packages are all pushed to MyGet.
  • gulp: The tasks in the gulpfile.js run to minify and package the scripts and css.
  • npm publish: The output of the front-end packaging is pushed to MyGet.
  • All of this is pushed out to a CI build site, where I can verify the changes. From commit/push to on-air takes about three and a half minutes.

This was all happening even before I decided to light up a hosted version of the app, because I was using it to power the forums on CoasterBuzz. Keep in mind that all of this was free to set up. GitHub is of course free for open source, and when you have a team of two, Azure DevOps is free as well. You can only run one build job at a time, but again, that's not a constraint.

As you may have guessed, the cloud-hosted POP Forums app references the packages on MyGet so it has the very latest bits ahead of the typical releases. The source for the commercial app is stored in a git repository in Azure DevOps, along side of its build pipelines and work items. Pushing to the master branch has a similar outcome, in that the new bits land on a development copy of the app, with configuration for fake payments and everything. It was here that I was able to test the recurring billing and maintenance tasks over the last few months.

The hosted app doesn't take a ton of additional schema to work, but there have been quite a few changes to it in the weeks leading up to release. For those, I used DbUp. I am seriously enamored with this library. It's always made me uncomfortable that most database versioning works on the premise of calculating the diff between old state and new state, and then generating SQL scripts to bridge the gap. If things get into a weird state in any one environment, your CI, QA or staging updates then are not necessarily exactly what will happen in your production deployment, and that could have unintended consequence. DbUp simply executes the exact same scripts at every update, in order, so your lower deployments are in fact a rehearsal of the production deployment.

The shorter story is that the DbUp project is a console app, so I ship that in the artifact, and a PowerShell call (on a Linux build agent!) runs it as part of the deployment pipeline.

Azure DevOps has an artifact-based deployment mechanism, so when I'm satisfied with the build that was deployed to the dev environment, I can specify manually specify that build be deployed to the production deployment. You can set up gated deployments as well, meaning that a user with the right permission has to click a button after a verified deployment to a lower environment, but I don't typically deploy to production as often.

Some other observations:

  • Did I mention that all of this automation is free? I doubt the cost to Microsoft is significant, and when someone in my career stage gets all of this for free and applies it to a day job environment with 40+ people in there, they certainly make it up with licenses.
  • Because the back-end code is all .Net Core, I can build on Linux build agents. When I switched from Windows-based agents, I shaved about a minute off of build times. (Not exactly related, but it should not be surprising that scaling app services up or out is also faster on Linux.)
  • The longest time of the build is package pulling (NuGet and npm). You can get around this if you host your own agents (not free), but since the free agents are ephemeral, they're going to pull every time. I'm surprised that they haven't found a way to cache for you, since it would be in their own interest to not tie up the free compute and incur the bandwidth cost of every pull.
  • The set up time for all of this is a fraction of what it used to be. I felt like I had to relearn all of this once a year, but it has been predictable and easy the last few years.

Overall, I'm really satisfied with the experience of using Azure DevOps for pipelines. Getting the value that you're creating in front of customers fast is easier (and cheaper) than ever. Go visit meta.popforums.com to see the hosted forums in action!


Nothing I write makes sense

posted by Jeff | Saturday, January 18, 2020, 12:20 PM | comments: 0

I've started at least four blog posts this week, and not one of them makes sense. Or maybe they make sense, but I feel like I'm unjustifiably complaining about things.

Diana and I are having "a week." Not with each other, thankfully, but in the general sense of life, this week hasn't been one of the stronger ones we've had. This has put my creative side in something of an incoherent place, so writing isn't working out as I would like. For CoasterBuzz's 20th anniversary, I'm writing some stories from the history I have, to start publishing at the end of the month, but they're going nowhere. If art comes from experiencing unpleasant things, I'm doing it wrong.

Next week has to be better.


It's not the death that worries me, it's the prioritization of life

posted by Jeff | Tuesday, January 14, 2020, 5:45 PM | comments: 0

Last weekend, a long-time blogger and educator specializing in the software stack that I've been around died at the age of 50. If that weren't weird enough, his last blog post appeared after he died. He had some great courses on Pluralsight. It's weird to think that any one blog post you make could be your last.

At the conference last week, I caught up with a former coworker that I had not seen in a decade. We had a lot of war stories to trade, mostly around the shared experience that strong business leaders are rare in software, from the executive level down to individual developers. This puts people in our career band, the managers between the makers and the C-suite, in a hard place as we serve two different audiences and act as the glue (or often lubricant) that makes it all work. It can be a thankless job, but we get enough out of it that we feel like it's worth it. Sometimes the big success is big when you've got it right on both sides, other times not so much. I suppose that's true for any job.

But being 40-somethings, approximately half way between wearing diapers and wearing diapers, we're acutely aware of the clock. I'd like to think that I've been at peace with my own demise for a long time. There isn't much point in fearing what you can't stop. What you can do is prioritize the time that you have to optimize for a meaningful and excellent life. That's the thing that stresses me out.

First you think in terms of relationships, and hopefully you start with your relationship with yourself. I probably spend too much time self-loathing for various reasons, but I'm at least self-aware of what's good or bad. I got lucky and scored a partner that is about as perfect as one gets. She's supportive, an amazing parent and my equal. This is the part I'm pretty good with. I'm spending that time right. I would lump parenting into the relationship bucket too, but once you start that, you can't really bail on it.

Work, whether it's the thing you do for money or the way you spend time to improve the world in some way, that all takes on a different meaning when you're optimizing for a good life. Sometimes you do crap work for a ton of money, or meaningful work for free, but it always feels like there's a priority aligned to it. For example, I once started a small team from scratch and built up a product that initially couldn't scale beyond a few users, and that felt good. Another time, I worked at a giant company where our team built a system that processed 100 million transactions per month. You bet that felt good. Another time I worked for a health insurance company trying to make their process better, and it was soul-sucking and terrible. I worked for an agency for like two months that wanted me to lie to customers. That didn't feel good either.

But most work probably lies somewhere in between. Our circumstances sometimes dictate that we have to do whatever it takes, which can certainly force the meaning curve. If we get lucky, we can often make our own story and have choices. But you never really know when you're taking your last shot, and you hope that the one in front of you is the right one.


I can't go to the Cleveland!

posted by Jeff | Friday, January 10, 2020, 5:40 PM | comments: 0

I'm back at CLE after the conference. CodeMash is so good, and I guess it's surprising just because you wouldn't expect a great conference to be in a winter-bound tourist area an hour away from Cleveland. Again this year, the quality of the people and content was amazing.

I had to drive through a light monsoon back to the airport, but it was easy compared to the worsening conditions two years ago as a mini-blizzard approached. But I was struck with the grayness and lack of color. As I was rolling up in the rental car shuttle, all I could think about is how badly I wanted to hibernate somewhere and take a nap. The memory was connected 100 different ways... college, high school, all of my jobs while living in Brunswick... all with a feeling of gloom and hibernation. I can't help but question: Are the unhappy memories a product of circumstances, or environment? I'm sure it's at least partly environment, because I had a lot of happy summer memories, but there are 36 winters worth of cold there too.

Objectively, Cleveland has had its shares of ups and downs. I remember the silly campaign, "New York is the Big Apple, but Cleveland is a plum." But it was a big deal when we scored the Rock-n-Roll Hall of Fame, and downtown had a (very) gradual renaissance that continues today. "White flight" gutted the parts of the city neighborhoods, and then later the reinvestment in those neighborhoods happened. The former Continental Airlines made the city a hub, but now the airport is half-empty, the "commuter" concourse closed. And while the Cavs finally had their championship moment, the Browns permanently suck.

What has always struck me though, was how loyal people were to the city. I was certainly a cheerleader for it back in the day. I still want it to succeed.

But I think that maybe I just outgrew it or something. I mean, I did leave Cleveland twice. After living in Seattle and Orlando, maybe I just felt like I'd been had, or completely self-unaware. Moving out of town really never occurred to me until the 2008 when the recession started to creep in and there was no work. The only other time I even considered moving a possibility was when I went to a conference in Portland, Oregon, way back when I was 25. Even that feeling quickly left me.

This is the first time I've been back in town since the Steel Vengeance opening at Cedar Point in 2018. That trip was suboptimal because, you guessed it, weather, and I was only there for 26 hours. The time before that was this conference the same year. I think we went for Cedar Point in 2016, and also in 2014 when we basically missed out because of the Great Water Main Break. It's like every time we come back, something borders on disaster.

I don't hate Cleveland, I just don't know what to do with it.


Hashtag conference life

posted by Jeff | Thursday, January 9, 2020, 5:30 PM | comments: 0

Wrapping up on the third day of conference activities at CodeMash in Sandusky, Ohio. Let me first say that it's a staggeringly great conference that goes deep, it's diverse in experience, people and technologies, and it's run by a non-profit. As a speaker, there's nothing to worry about except to show up. That's pretty great. This is my second time speaking at it, and I can't say enough good things about it. It started out many years ago as a small, regional, off-season thing, and now it's huge.

The first two days are long-form sessions, then the last two days are your typical hour-long deals. As a speaker, it's all included for me (they cover the room, too!), but I'm pretty sure the number of attendees doubles for the second half. This year I ended up kind of half-assing the long sessions, because I couldn't really clear all of my work obligations. I regret that, but it did give me time to finish up the deck for my talk, which was definitely not presentable when I landed at CLE. In fact, I really just got it to a good state an hour ago.

With tomorrow left, I'm mentally already pretty spent. There's a lot of content to take in, and then you fill up the in between times with conversations with people from all over. If you find time to talk to any of the vendors (which I've tried to pay more attention to this year, given my career stage), then you add that too. If that weren't enough, I'm trying to catch up with people from my old Ohio network, because so many are here. It's one of the few big driveable events around here.

The one positive about it being rural Ohio in winter is that it's not like there's a bunch of other things to distract you. Vegas conferences are kind of too much, the opposite extreme, where by the second day, you're kind of done with it all just because of what's outside the venue. Three days for these things is the sweet spot almost anywhere.

I'm satisfied, but ready to go home. The dry air I think gave me a sore throat, and Kalahari, where the conference is, has pretty bad beds. Today is also Diana's birthday, 50th no less, and no matter how many times she told me to go to this, I still hate missing the day. It'll be nice to see my little boy, too.


Making stuff in the down time

posted by Jeff | Sunday, January 5, 2020, 1:12 PM | comments: 0

The last two weeks were kind of like a forced vacation (I know, poor me). With the holidays falling on Wednesdays, I took the Mondays off as well, but in many ways I effectively took most of the two weeks off because few others were working. I did have some HR stuff, documentation and writing to do, but I probably put in at most 20 hours between the four "work" days. This caused me some anxiety, because as is often the case around the new year, you're setting goals and agendas for the coming year, and I couldn't really do that work. It's not really even that we have unlimited PTO, because companies that accrue it often force you to use it at the end of the year anyway.

I was able to focus some of that time into relaxation (and anxiety mitigation), including a nice little party on New Year's Eve that involved some nerds, sparklers, lasers and a fog machine. Outside of that, I poured some energy into my hosted forum project, and got a lot done. The software part is like 95% done, which is to say I can take money and make it work right now. That's exciting. The harder part is that there's a lot of polish and selling to do, which is frankly harder than writing code. I wrote a ton of documentation, and that's in good shape, but no real marketing piece just yet. I also have to write some boilerplate privacy policy and terms, which is even more boring. Once I get that all wrapped up, maybe next weekend, I'll advertise it and see what happens.

As I've said before, I'm looking for gravy income, mostly. If I can score 10 recurring customers before the end of the year, that would make me happy. Of course, I wouldn't shy away from 100 either, but that would create some interesting problems. The real intent though is just to prove that I can build something from scratch that's useful. I plan to move the PointBuzz forums into the system at some point, which will be great because it will allow us to keep the forums current and decouple them from the rest of the site, so they can change independently.

There's something deeply satisfying about sitting behind a computer that you built, writing code that does useful things (including collect money), automating the deployment and instrumentation of it all. Sure, you get this working in a team at work, but there's something different about doing it yourself, for fun. I guess some people build furniture or work on antique cars, but I make software.