Archive: May, 2013

Coaster dorkage and traffic

posted by Jeff | Friday, May 31, 2013, 11:56 PM | comments: 0

I got some ink in IAAPA's Funworld again this year, so hooray for that. As far as trade orgs go, I think it's a pretty great association. Good people there, too.

In other news, it's great to see the sites doing crazy traffic this year. PointBuzz is near double compared to last year, which shouldn't come as a big surprise since Cedar Point hasn't opened a new roller coaster since 2007. I love that site dearly, but it's kind of annoying that it's only as popular as the park is. Funny how that works.

CoasterBuzz is also doing much better than last year. A lot of things are contributing to that, but comparing the month of May to last year is particularly useful because it's just after I relaunched the new site. I paid a lot of attention to search engine optimization, and it has paid off in a very long-tail way. Trying to "win" any big search term like "roller coaster" is a waste of time and nearly impossible, but as it turns out, you can do OK when you rank highly on hundreds of less common search terms. The other thing is that people are actually using parts of the site other than the forums, which is validating for me because that crap is a lot of work to maintain!

With surges in popularity also comes the predictable appearance of new users who annoy the piss out of you. I've been pretty hands off about moderation for years, because the community tends to discourage dipshittery and it just takes care of itself. Unfortunately, we've still had a number of trolls, attention whores and otherwise annoying people show up, but I think we're working through it. We're just now getting to June, with the prime season still a few weeks away. I'm encouraged by the way the community has spoken up against the asshats.

Right now, I'm focusing most of my attention on something new, with my dearest wife and Vice President of Product Development. Yep, I like to hand out titles because I can. I'm not quite as effective as I'd like to be in that work yet, but I'll soon have a room I can lock myself in to minimize distractions. It's all part of the 2013 master plan (which is subject to change). Stay tuned!


Review: One Mile High... Live by Garbage

posted by Jeff | Friday, May 31, 2013, 11:11 PM | comments: 0

Having seen Garbage seven times dating back to 1995, I can honestly say I've seen an amazing transformation. The first time I saw them, it was like they weren't sure if they belonged on stage, and Shirley Manson seemed to have no confidence at all. I'm glad I stuck with them, because this, kids, is how you perform rock music.

In the first few seconds, the video nerd in me was shocked to see pretty much straight 1080/60i HD video, but it wasn't long before I guessed that maybe that was the point. This is not a video full of fast cuts and tired effects. In fact, I'd be shocked if there was a cut shorter than five seconds. It was shot in what I call "PBS style," in that the entire focus is on the performance, not some clever editing nonsense or goofy color grading. It was the right choice.

Garbage is one of the tightest live bands you'll ever see, but without being entirely perfect. You'll hear a few pitch problems or hear the players get out of sync, but the sheer power and volume of the performance makes it easy to overlook. Instead you're impressed with the noises that come out of the guitars ("Hammering In My Head"), and arrangements that often improve some classic songs ("Only Happy When It Rains"). You're completely drawn in to the sorrow of "Milk," and punched in the goodies with the noise and fury of "Vow."

The set list evolved quite a bit on this tour, and as much as I love the band, I will admit that this wasn't their strongest. I understand they mix it up (I'd get bored playing the same thing every night). I thought performances of "I Hate Love," "Man On A Wire," "The World Is Not Enough," "You Look So Fine" and in particular, "Beloved Freak" were real treats, but they're not here. Think of it as incentive to see them in real life.

A companion CD or MP3's would be a great addition.


Negotiating idealism and realism

posted by Jeff | Sunday, May 26, 2013, 11:15 PM | comments: 0

I watched Up In The Air again tonight, and loved it even more. I related to it a lot more than I did originally. There's one specific scene that I think encapsulates what we all eventually have to go through.

The younger Natalie character gets a text from her boyfriend indicating they should break up, and it sends her into a tailspin of realization that the ideal life she had planned, in terms of career, relationship, status and wealth might be entirely nonsense. The older Ryan and Alex characters gently explain to her that a more realistic view suits you better, especially as you get older. There's a brief exchange about what settling is, and whether or not it constitutes failure, and that's as far as the scene goes. I view this as the start of someone having to weigh idealism against realism.

There's an obvious curve we go through in life. When we're younger, idealism fills us with hope and dreams. As we get older we rely more on realism to guide us. I'm not sure I can describe either extreme as something that makes us happier, but I do wonder if going too far to realism hinders us. More importantly I ask, is it possible to stay somewhere in the middle?

Idealism can make you miserable over what you can not attain, and realism can make you miserable over what you can not attain. Isn't it funny how that works? You can have miserable bastards at both ends.

So as I head full throttle toward midlife, it's pretty clear to me that I have to embrace idealism and realism. I need idealism because I need to believe in what's possible, and I need realism because the constraints of life can help steer me toward fulfilling the ideal. The two concepts are not, as I once thought, mutually exclusive.

It seems like this year may in fact be just the proof of this that I need to serve me the rest of my life.


Same starting point, different paths

posted by Jeff | Friday, May 24, 2013, 11:31 PM | comments: 0

I met up with a friend today that I've known for almost 20 years. What started as lunch turned into a four-hour conversation. We admittedly don't talk that often, but this is one of those many situations where I can reconnect with someone and get deep as if no time has passed at all. I'm fortunate to know a lot of people like this, and I'm guilty of not better taking advantage of these relationships. It's not to call in favors, but to learn more about literally everything.

The recurring theme of our conversation is how we all start things from common ground, but often end up on diverging paths. This is certainly true for careers. Other than people in specific career fields like education or medicine, I don't know many who end up doing exactly what they expected for decades. It's also true for relationships. Certainly every relationship starts at a common point, but the people often go in different directions.

This is hard to explain to some people. I know a lot of people split for pretty solid reasons, like Chris Hansen catching a husband as a predator (true story). Sometimes it's even scarier things, like physical abuse. But I think there's a big category of people who split for more boring, subtle reasons, where two people have just gone in different directions in terms of their... relationship functionality. It's not that anyone is really at fault, it's just that one person grows more, or maybe the other has drastically changing priorities, or one simply can't get what they need from the other.

I definitely categorize my first marriage in this category of different paths. There's no question that we loved each other to death, but there were definitely a combination of things that changed over the course of our relationship that ultimately made us better candidates for friendship than marriage. We can see things that we both could have done differently, but perhaps it just wasn't in our capacity to do so at the time.

This begs the question, is there something you can do to prevent this divergent path? That's hard to answer. It's true that some people never change, others change a great deal. It just depends so much on how people are wired, and the tolerance and accommodation on the part of a couple to handle change. I used to be awful at change, but I look at how much Diana and I have changed in the six years we've known each other and it's staggering. We've moved three times, had a constantly changing child, and she has even gone from work to stay-at-home mom. We seem to be wired to handle this and stay on the same path, but 10-years-ago me would have never made it. So much of it is timing.

I'm reminded of a time that I sat down with one of my volleyball teams, and explained to a bunch of over-achieving teenage girls that everything they expected to transpire in the next 10 years would probably not happen. Indeed, they were all starting from the same place, but they would all end up going down very different roads from each other, and even from their own expectations. It's not that this was necessarily bad, but I think it's important to have awareness when the things you do, or the relationships you're in, no longer serve you. Sometimes that new road is all you've got, and you need to embrace it.


Cool story bro

posted by Jeff | Wednesday, May 22, 2013, 10:40 PM | comments: 0

I realized today that two-thirds into the month, I've written exactly 8 blog posts. That's some kind of historic low for me, going back nine years. Diana has written more on her new blog this month. Since people seem to interpret online action, or in this case the lack thereof, in strange ways, I figured I should do some splainin'.

First off, I'm fine. My little family is fine. Things are generally good. Highlights include sharing great moments at Cedar Point with Simon, working with Diana on a new project, reading more and actually participating in the communities I help run.

So why you no write? Two reasons, actually. First, I honestly don't have the mental bandwidth. I've been feeling completely spent lately. It's mostly in a good way, but when I would typically write, late in the evening, I just don't feel like I have anything left. The second reason is that there are a lot of awesome/cool/hard/ridiculous things that, for now, I want to hold a little closer to the vest.

I suspect I'll ramp up again soon. After lots of travel and special events, things are starting to be a little more routine. Plus, I have many topics to share, like Diana's hair, home improvement, career stuff, preschooler tales, and of course, a whole lot of personal projects.


Building something enduring

posted by Jeff | Sunday, May 19, 2013, 11:27 PM | comments: 0

Om Malik had a great post about how venture capitalists are so hung up on quick return and scale from startups that they would never fund some of the greatest innovations we now take for granted. I also made the point that it isn't just the VC's, but people who do start new businesses are more interested in the funding events and potential pay-outs than they are in building something enduring and important, regardless of scale. It's my chief complaint about technology and Silicon Valley.

I'm not a hater. If I had some not-that-brilliant idea like Tumblr that I could have executed on for a billion-dollar buyout, I'd certainly be OK with that. It seems to me though that no one is that interested in investing in the smaller thing that could be awesome, occupying a particular niche. I was catching up on my Fast Company subscription when I read an article about Kevin Rose, who correctly states that there are many "lifestyle businesses" that could clear a couple hundred grand a year, but no one invests in those.

There is a certain danger in all of this, as I see it. Technology, especially involving the Internet, has driven a portion of our economy when other areas have struggled or entirely gone away. There are big bets that had huge payoffs in the last decade and a half, like Google and Facebook, but I worry that not enough people are interested in the long tail of smaller plays. Do you know how thrilled I would be to have a quarter-million in revenue every year?

These smaller, niche businesses also have another benefit that the big bet chasing doesn't have, in that they're likely to endure a lot longer. My own business is more hobby than lifestyle business, but since forming my LLC, more than $300k has changed hands that may not have otherwise. (Don't be impressed by that figure... the profit margin has not been very high!) I never had visions of being the next Google, but I didn't end up like Pets.com either.

My hope is that more people pull their heads out of the bay area and think a little smaller, a lot longer term. To me, it's all of those smaller things that last that will add lasting value to the economy and to our culture.


Everyone else is doing it (incorrectly)!

posted by Jeff | Saturday, May 18, 2013, 4:19 PM | comments: 0

Innovation is hard. You can definitely foster it, but you can't really force it. It's completely fascinating when people innovate in a massively disruptive way. While you can't make innovation happen, it's something I try to strive for. There are certain ways that I've had a great deal of success innovating, and others where I haven't. Professionally, it's easy to get into the rut of doing things a certain way, because everyone else does it that way. The first step to doing it in a better way often requires questioning the establishment. While my inner rebel is all about that, it's also an exhausting practice.

Coaching volleyball is one of those scenarios where the questioning comes easy. For example, before a match, you're given several minutes of court time to warm up (the actual time depends on the governing organization). Since I was in high school, that time was always used by coaches to send perfectly tossed balls into the air for hitting, while your one or two short defensive specialists tried to dig those hit balls. This results in a lot of "whoo-hoo's" and pleasure on the part of your athletes, but I wasn't sure if it was constructive.

Attacking the ball is always step three in volleyball. Someone has to expertly pass the ball first, then someone has to set it for the hitter. Without those two things, there is no hitting. So after a season or two, I thought, why am I wasting time on this, especially when my kids can't pass to save their lives? So despite the protest of the kids (and parents, who always have the answers), I ditched the hitting lines. I put six kids on the other side of the net, and tossed balls in for them to pass, set and hit. I rotated them around. This exercised all of the skills necessary to score, including the ever important transition on and off the net. It was real, core to the game, and made a huge difference. It also happened to be noisy and menacing in appearance, which freaked out the other team, so that was a plus.

I tossed out what everyone else was doing, and tried something that seemed to better serve the scenario. I try to do this with all things in life. And yes, it can be exhausting questioning everything, especially if you end up where you started, and "everyone" had it right.

It's a lot harder to innovate your way out of the norm in my line of work. In terms of the actual computer science, sure, there are a lot of things that have been thought to death and they're good ideas. It tends to be the process and the associated people issues that are harder to change. There is an important parallel though to the volleyball warm-up. It turns out that process is almost always wrought with wasted time for things that don't matter, that don't get to something real and valuable. Even in celebrated (capital "A") Agile practices, teams have a hard time identifying the things they do that aren't adding value, let alone innovating.

Innovation isn't easy, but you can get practice at it. It starts when you stop accepting sheep behavior and ask if there's a better way.


Simon's best amusement park day ever

posted by Jeff | Thursday, May 16, 2013, 4:52 PM | comments: 0

Despite feeling like I've been through a ringer yesterday, after a solid week and a half of travel, illness and awful sleep, the weather was simply too awesome to stay home. We packed up the boy and headed for a day at Cedar Point.

This is the new thing for us, where we don't over prepare and just roll with it. No stroller, just a snack and a water bottle. We got there around 1 and had lunch at Famous Dave's, which is one of our favorite things to do. Simon was digging it too because we had a window seat, where he could see Blue Streak running.

Inside the park, we let Simon lead. He knows where everything is and how to get there, and we were perfectly happy to follow his agenda. On opening day, he asked to ride the carousel, and that's what he did this time as well. We did six rides total between the two carousels, and by the time we were done, he was totally comfortable riding without one of us standing with him. It was really awesome to see a little independence.

His eagerness to try rides did not end there. He did a number of others, with varying degrees of success. The trucks were no problem at all. Sir Rub-a-Dub's Tubs were OK too. The Lolly Swings he did not care for, and since he and Diana were the only ones on the ride, the operator was kind enough to stop it early. Camp Bus was no problem. We did that Zamperla mini-whip-style ride, and he really didn't like that until it was almost finished. He had Snoopy Bounce all to himself, but just walked around the perimeter.

Simon's Jr. Gemini lap count was one, plus another time he sat in the train but wanted out immediately. This time, we let him see it, and he seemed to get sucked into the enthusiasm of the other kids. This time, Diana went up with him. He mostly did OK, but the last turn seemed to alarm him a bit. He opted out of the bonus lap.

Simon was very patient about riding bigger stuff with us. He loves the train, and insists on sitting on the outside. He also waited for Giant Wheel for 20 minutes (as they loaded 8 of 36 cars). He was a little unsure at first, but seemed to otherwise be OK with it.

We ended the day in Coasters, where we could have milkshakes and he could have a little dinner while he watched Power Tower go up and down. It was the most fun we have had as a family probably ever, because he was so engaged with riding. Ten rides is a record!

There were other great things about the day, including the sheer will Simon had to carry on, without a nap. Six hours walking around Cedar Point, and we never picked him up or carried him. He also remembered ride names, and pronounced them correctly. He actively asked to "see the show" at Red Garter, but they're still in rehearsals. He was a little disappointed.

It was fairly adorable that when we left around 8, he was asleep in his car seat by the time we got to Cleveland Rd. What a great day for our little guy, and for us.


The incomplete picture of our lives

posted by Jeff | Sunday, May 12, 2013, 11:50 PM | comments: 0

I've had a number of interesting conversations today about the picture that the social Internet paints of us. It was suggested to me today that I appear blissfully happy and completely miserable. I'm generally not that concerned about what people think of me, and maybe I should be, but I should go on record as saying that the only time I've really considered myself unhappy was in 2005, when I was going through my divorce, and in 2001, when I got laid-off for the first time. Even with those unpleasant times, I'm well aware of how awesome my life has been.

There is some degree of filtering that goes between real life and the Internet, as there should be. On one hand, you might see hundreds of photos of my kid on Facebook, and people will say things like, "He always looks so happy." Well of course, I don't post the photos of him throwing a fit. OK, well, sometimes I do, but I'm sure my mom doesn't want to see that. Conversely, when something really irritates me, I'm likely to rant about it in a blog post or drive-by status update. If you know me in real life, you know I'm not one to candy-coat what's on my mind. Neither of these scenarios is grounds to declare a well-formed opinion about my life, or anyone else's for that matter.

The funniest thing, if a lesson learned entirely too late, was that a story from my previously analog life makes more sense than ever now. Back in college, a friend of mine had a hot tub. No one knew he had it, and he didn't want people to know. My thought at the time was, "How cool is that? Why would you not want people to know?" It wasn't until after it got out that he explained it. If he had a hot tub, it was implied that he made more money than other people, or had parties of ill repute, or any number of things that would be unreasonable to assume. Sometimes sharing the most innocuous things can have totally unintended outcomes.

I've generally presented myself as WYSIWYG, because the bluntness of that approach means I don't really have to explain where I stand on things. Still, there are a lot of things that I don't share with people in real life, let alone online, so you never get the complete picture. Go through my blog from 2005, and you won't likely find anything about my crumbling marriage.

I suppose I could easily write the incomplete context problem off as everyone else's problem, but it wouldn't help. I try not to assume anything about people based on their online persona, but that doesn't mean others work that way.

What's really important to remember is that online life is surprisingly not as different from offline life as people like to think. You will undoubtedly encounter people at work or school that you think you totally have nailed down, only to find out they're not at all like you thought. Insert book/cover metaphor here. A hundred years from now, anthropologists are going to look back at our time and say, "Humans began to socialize more and more by electronic means, and in their rush to declare it as different, overlooked that the same social contracts applied online."


Lessons from live blogging with Azure (nothing bad happened)

posted by Jeff | Sunday, May 12, 2013, 1:57 PM | comments: 0

I wrote previously about how I built a "live blog" app in Azure, so we could use it for PointBuzz during last week's festivities at Cedar Point. Not surprisingly, it worked just fine. As I expected, the whole thing was kind of overkill. Sweet, over-provisioned overkill.

The traffic loads we encountered were not a big deal. At one point, we were close to 300 simultaneous connections. We didn't really need Azure to handle that, but the truth is that I wasn't entirely sure what to expect in terms of SignalR and its effect on the servers. What better reason to spin up virtual machines in Azure? I still think that's the biggest magic about cloud services, that you can turn on stuff just when you need it, and pay just for that. It sure beats having to buy or rent a rack of equipment.

The performance was stellar. Average CPU usage never went over 1.5%. I ran two instances of the MVC app as a Web role. I chose this over straight Web sites because of the distributed cache that comes free with it. Of course I didn't really need it, but why not? I didn't do any page rendering timing at the server, because grabbing a few objects out of the cache and making them into a simple page was probably stupid fast, but testing from the park's WiFi, the time from request to last byte (not counting images) was generally under 200 ms. The AJAX calls on scroll for more content were just slightly faster.

The CDN performance was similarly pretty solid. I did a few unscientific tests on that prior to our big day, comparing the latency of the CDN to direct calls to blob storage. Predictably, the first hit to the CDN was always slower as it grabbed the data from storgage, but after that, they were about the same. Again, this was not scientific, and I also can't control which point of presence I was hitting on the CDN. This was another feature I certainly didn't need, but figured I would try it since it was there.

We moved a total of 6 gigs of photos that day, which was a lot more than I expected. This isn't a big deal for a few days of activity, but if I were using this (or any of the cloud services) long-term, bandwidth costs would be a concern. They're still a lot higher than the "free" terabytes of transfer you typically get when you rent a box in some giant data center.

At the end of the day, the app proved two things. The first was that SignalR imposes very little overhead, even with hundreds of open connections. The service bus functionality, still in beta, works great, to shuttle messages between running instances of the app. The other thing that it proves is that I bet you could throw this simple thing up for a big live blog event like an Apple product announcement and it would work just fine. I need to find someone willing to take that chance now. :)

So what does all of this overkill cost?

166 compute hours (2 small instances): $13.28
6 gigs out of the CDN: $0.60
18,000 CDN transactions: $0 (it's a dime for a million)
11,000 service bus messages: $0 (it's a buck for a million)
1.2 gigs out from app: $0.10
200 MB storage: < $1
SQL database: < $5 for a month


Days are rarely this awesome, at Cedar Point or anywhere

posted by Jeff | Thursday, May 9, 2013, 10:38 PM | comments: 0

Today was the media event for GateKeeper at Cedar Point. The park hasn't had a serious media event since 2006, the year that Skyhawk opened. The opening of Maverick in 2007 was kind of a makegood, since the park was already open and the ride was delayed. This particular one was epic: They invited enthusiasts of any club to come, for free, with tons of food and refreshment. If that weren't enough, we were invited to stay in Breakers the night before, even though it's not really open yet. That was particularly nice, since the event started at 4 a.m.

I've done a lot of these events, but the last really special one was in 2000 at Cedar Point, when they opened Millennium Force. I was just starting to forge the friendships that persist today at the park, and I spent the entire winter watching the ride literally grow up from a parking lot full of track sections and support pieces. This one was special for different reasons. I got to see the actual fabrication of the track, joining the CEO (who I would place at the top of my list of people I would treasure as a mentor) in seeing how they make these things. Perhaps even more importantly though, this was the first real chance that I've had to share with Diana the perks of being a big roller coaster nerd with a Web site. Not only that, but I got to share it with Simon, too. He might not really know what's going on, but he can say that he was there!

A day like this also gives me a chance to tell stories with video. I may not do it for a living anymore, but I still enjoy it. Time and circumstances kept me from accomplishing everything that I wanted to do, but I may have a chance to make up some of what I missed. I did get some night time stuff of the new ride, which doesn't exactly tell a story, but it sure is cool to see!

I also got to pull off a great technical experiment, building a simple "live blog" app to send updates out to the world in real-time. I built it in Windows Azure, what I would describe as a hero platform in terms of scalability. It performed flawlessly, never breaking a sweat. At one point it had several hundred active, open simultaneous connections, which isn't a huge deal, but one that worked well given my knowledge of the platform. It gave me a lot of technical validation.

One of the great things about a day like this is the convergence of great friends. There's a great deal of humility that comes from a day like this, given the breadth and depth of people I encountered. I ran into a college classmate I haven't seen in probably 18 years, working the satellite truck. A 20-something thanked me for the work I put into the Web sites, who probably wasn't old enough to sign up for the site when it launched. A guy I knew only virtually a dozen years ago is now a creative giant in the industry, and when we first talked, I was giving him advice on pricing his lucrative side business. A younger friend has struggled with the same issues that I did regarding broadcast work. Oh, and the general manager of the world's greatest amusement park trusts me with his cell phone number. It's not lost on me, and I don't take for granted, that I am surrounded by a lot of amazing people.

Some days I wonder if I shouldn't be working in some kind of capacity in the amusement industry. If I had this kind of network in the software industry, I'd be doing anything I wanted. I just don't know that there are specific roles that would be right for me. "Director of software" isn't really a big title in an industry that took forever to embrace the Internet.

By the time we got back from lunch, I realized that I had been in the park for nine hours already. Insane as that is, I've never had that much fun. And if that wasn't awesome enough, I got to share it with my little family. Simon got to high-five my hero CEO. Days this good are something of a rarity, but I'll be smiling about this one for a very long time.


Building for Web scale is a different skill

posted by Jeff | Monday, May 6, 2013, 11:37 PM | comments: 0

There are a lot of things that one can find satisfying about building stuff for the Web. For a lot of people, it's probably just the act of building something cool, pretty and useful. These are certainly things to strive for, but for me, the interesting thing has always been to build something that can scale.

Like so many things in life, this particular desire grew out of experience. Very early on, before I was technically getting paid to be a software developer, I learned about scale problems. In the wild west of 2000, I launched CoasterBuzz and did some advertising for it. I was on a shared hosting plan, and the site started to get slow in a hurry. There were a number of things I did poorly, including some recursive database queries, and worse, fetching more data than I needed. You live and learn, as they say, and I got better at it over time.

Many years later, I would have the chance to work on the MSDN/TechNet forums, which served well over 45 million pages per month. It's not lost on me how rare it is for anyone to get to work on a Web app that has to scale to that size. My team was actually there to try and rope it in a little, because it required a huge number of servers to run. There was a lot of low-hanging fruit, and some really hard things to do as well. I didn't directly do a lot of the performance enhancing stuff (though I did pair for it), but I still took a lot away from that experience.

With my own sites, they collectively do 12 to 15 million pages per year, depending on what's going on that year. Respectable, but under any normal circumstances, not a lot. At peak times, that works out to be between 6 to 10 pages per second, and less than 1 in off-peak times. It's very rare that my server ever gets pushed beyond 25% CPU usage (it doesn't hurt that it's total overkill, with four fast cores).

Still, I've noticed that people who work on Web applications don't always think in Web terms. By that, I mean it's not uncommon for them to think in "offline" terms, where time is not nearly as critical. For example, someone who works a typical job doing line-of-business applications doesn't care if they build a SQL query that has a ten-way join over two views. It might take a few seconds (or minutes) to get results, but it doesn't matter for the report it's going to generate. For the Web, that timing matters.

So here are a few of the things that I think people building apps for the Web need to think about. If there are others you can think of, I'd love to hear them! This is not an exhaustive list...

  • Denormalize! Disk space is cheap, and disks are huge. Really, it's OK to duplicate data if it means you don't have to do a bunch of expensive database joins. This is even more important now, in an age where we might use different kinds of data storage, like the various flavors of table and blob storage.
  • Calculate once. This is perhaps the biggest sin I've seen. You might have a large set of rules on whether or not you should display some piece of data. You have two choices: You can make those calculations every time the data is requested, or you can do it once and store the outcome of that decision. Which is going to be faster? Calculating once, probably in an infrequent data writing situation, or calculating every time, in a frequent read-only situation? I think the answer is pretty obvious.
  • Use caching, but only when it makes sense. Slapping an extra box with a bunch of memory on your network to store data is a pretty quick way to boost performance. There are some pitfalls to avoid, however. If the data changes frequently, make sure your code to invalidate the cache is well tested. Beware giant object graphs that serialize into gigantic objects that are many times larger than their binary counterparts. If you're caching because of expensive data querying or composition, fix that problem first.
  • Don't wait until the end to understand performance. I'll be honest, premature optimization annoys the crap out of me. Developers who waste time on what-ifs and try to code for them drive me nuts. That said, you can't pretend that performance is a last mile consideration. Fortunately, most shops these days are working with continuous integration environments at least as far as staging or testing, so problems should become apparent early on.
  • Use appropriate instrumentation. I worked with one company that had a hard time finding the weak spots in its system, because it wasn't obvious where the problems were. Big distributed systems can have a lot of moving parts, and you need insight into how each part talks to the other parts. For that company, I insisted that we had a dashboard to show the average times and failure rates for calls to an external system. (I also wanted complete logging of every interaction, but didn't get it.) Sure enough, one system was choking on requests at one point every day, and we could address it.
  • Remember your HTTP basics. I'm being intentionally broad here. Think about the size and shape of scripts and CSS (minification and compression), the limits in the number of connections a browser has to any one host, cookies and headers, the very statelessness of what you're doing. The Web is not VB6, regardless of the layers of abstraction you pile on top of it.

These are mostly off the top of my head, but I'd love to hear more suggestions.


Busy weeks of Pointness

posted by Jeff | Saturday, May 4, 2013, 12:07 AM | comments: 0

I have to say, for all the years to be living in close proximity to Cedar Point, whilst co-operating a big fan site for it, this is pretty much the year. We haven't really had a year quite like this since 2000, and that year was just a new ride, not a huge facelift for the entire front of the park.

GateKeeper is certainly a headline worthy roller coaster, and it really is quite good, but to me the striking thing is that entrance makeover. It was still a bit of a mess when I was there the other day, but the difference compared to the way it looked for 40 years or whatever is stunning. It's modern and classic at the same time, and with the ride looping overhead, completely iconic. There are some parks that have amazing entrances, like Magic Kingdom and Epcot, or the Kings parks with their fountains. Perhaps the Great Americas with their carousels. But this is something to behold. You really know you're entering a special place when you approach the gate.

Walt and I were hoping to re-do PointBuzz by opening day, but that just didn't happen. We're getting there, and certainly the new forums are an important feature, but we're not done. I did, however, whip up a live blog app that we're going to use, starting on the media day, and going through opening weekend. I'm really excited about it, as it will update in real time, running in the cloud with a CDN and lots of caching... total overkill. I even wrote a little Windows Phone app to upload photos.

Cedar Point remains the only thing I really like about living here. So many great friends there. PointBuzz has been around in various forms now for 15 years. That's nuts. I'm glad I don't have to run it by myself anymore.

The next week should be super fun. I'm really glad I get to share it with Diana and Simon. Even though he doesn't get to ride, there's no doubt that he'll be thrilled just to see those trains roll out of the station.