Archive: April, 2016

It's about the next vacation

posted by Jeff | Saturday, April 30, 2016, 9:00 PM | comments: 0

Something I've noticed in the last year is that I seem to always be very focused on the next vacation. I'm not saying that's a bad thing, necessarily, but it makes me wonder if what I'm doing in between is somehow not adequate, exciting or something else. Granted, it's really intense now, because my next big vacation is a cruise to Alaska, which will easily be my longest in duration, distance and expense in my lifetime. (Yeah, I'm kind of kicking myself for that, because it's coming so late in life.)

Part of this I suppose is caused by cruising. Prior to 2013, I saw cruising as a way of getting on a germ-infested flotilla of death (thanks, Carnival), but we had such an amazing time on our first cruise aboard the Disney Dream in early 2013 that I fell in love with the experience. Once we moved to Orlando and had easy access to Port Canaveral, we took full advantage of the three-day weekend cruise, and realized that cruising would be a great way to experience a lot of places we haven't previously been, to sample different cities and countries and perhaps revisit them for longer periods of time later on. That's where I think we're headed, hoping to do some European tours in the next two or three years.

But truthfully, even the short-term trips here and there are something I look very forward to. Summers have generally meant weekend trips up north. We've also done local weekends at places like Legoland and Clearwater. Heck, we've even done passholder rates at Disney resorts for hardcore, all-grownup experiences without Simon, literally a few miles from our house. I treasure these experiences.

I don't dislike daily life. I'm fortunate to have such an adorable little family and a job that mostly goes well. But I have to say, when we leave town, we do it right. The experiences-not-stuff lifestyle is for real. That's how we roll.

The EV future is also autonomous

posted by Jeff | Tuesday, April 26, 2016, 9:39 PM | comments: 0

We decided last year to buy a Tesla Model S despite the cost, because we felt so strongly about going all-electric. It's the future. I know a few other owners, and none of us are wealthy, not by a long shot, but our enthusiasm for EV's is intense. I'm sure we all had our own justification (for science, American can-do, gadget fetish), but I know that being part of an amazing future is certainly part of it.

If you're watching certain headlines, then you know that there is a bigger vision in play for Tesla. It's an ambition shared by Google, probably Apple and maybe Detroit... self-driving autonomous cars. Sure, we were supposed to have flying cars by now, but traffic accidents are a problem because people suck at driving. Cars have been able to park themselves for a few years, and the Model S will do that. It also takes adaptive cruise control to the next level by also steering the car and changing lanes by simply clicking the turn signal. It's like magic.

Unfortunately, while the car ships with the hardware for all of this magic, the software is a $2,500 upgrade at the time of order, or $3k if you want it after the fact. It was hard enough to justify the car in the first place, so this was not an option I could justify. Tesla benefits from having as many people as possible using it though, because it records data and sends it back to the mothership for analysis. As a tease, they're offering a 30-day trial of the software, so I got to try it today. It blows my flipping mind. I don't trust it, and I can't believe that it works. But there it is.

This is our future. Think about it, there will come a day when you can drive without driving, and I suspect that the biggest problem won't be the technology, but government regulation. Made in the USA.

Death to merchant accounts

posted by Jeff | Monday, April 25, 2016, 3:00 PM | comments: 0

After 15 years, I am finally without a merchant account. These are the things that you once needed in order to accept credit cards. I first obtained one in 2001 when I started taking orders online for CoasterBuzz Club. I also used it when I had to essentially resell tickets for events we did. This arrangement resulted in three fees: A monthly fee for the account itself (plus an additional cost for the company that did the Internet gateway for the charging), a per-transaction fee and the discount fee, which is a percentage of the transaction. Collectively, this meant about $35, plus 3.7% + 25 cents on each transaction. That means even if I didn't take a single payment, I was spending $420 a year. After using three different banks over the years, it kept going up. Granted, if you process cards in person, swiping or using the chip, the discount rates are much lower, and if you're doing volume, the monthly fee basically doesn't exist. However, for someone who has never exceeded $10k in a year by very much (when I was selling tickets), it's way too much.

For the last few years, I was hoping that Square would finally open a gateway and start taking Internet-based transactions. They're the people who have been sending out the little swipe readers for phones for years. They finally did start doing ecommerce, recently I think, but the API and documentation aren't super clear. Then I noticed that Stripe was doing it, and you could literally be up and running in under an hour. Sure enough, the payment part of the code for the resurrected PointBuzz Premium took a half-hour tops. What's nice is they also generate receipts by email, and you can set the name to be anything you want on the credit card statements. Their discount rate is lower, but transaction fee higher, compared to Square, but it's basically a wash.

In any case, I'm really pleased with Stripe. They have tokenization and such available too, so you could do recurring charges if that was your thing. It's the speed to market that impressed me the most. They delay the first deposit by a week, but otherwise, it's remarkably fast to get started. Huge thumbs up.

Content has value, because you wouldn't be asking for it if that were not true

posted by Jeff | Tuesday, April 19, 2016, 3:00 PM | comments: 0

Musicians have easily taken the brunt of the abuse around the notion that content should be free. There is never ending irony in the idea that something sought out by people is simultaneously declared as having no value. Photographers seem to win second place in this realm, and a range of content creators, mostly on the Internet, make up the rest.

Today, a PR agency representing a major travel service was working on some kind of bullshit "listicle" piece that they were pitching to their client, and they wanted to use the data from the CoasterBuzz 100, which is the top 100 roller coasters in our database. This content is valuable to me for a lot of reasons. There was effort that went into calculating it and aggregating the data automatically, it's very frequently viewed by users, it has great search engine juice, etc. It's one of the few times I've actually achieved any of that by design. In any case, this is how the conversation went via email around the use of this content (some light editing for clarity). Watch how the change in tone happens...

Agency: Happy Tuesday! We were reaching out for permission to mention in our upcoming [client name removed] press release around summer travel. Please let us know if you need anything from us to make this happen! Thanks!

Me: I'm not sure you really need permission, but what's the context?

Agency: Ok, that's easy! We just want to cover our butts. We're putting together a summer index list that'll cover summer travel that includes beach destinations, national parks and amusement parks. We're using the CoasterBuzz rankings to figure out the amusement park rankings by number of top coasters.

Me: That's not a mention, that's reusing content. You'll have to be more specific about what you're going to do and how you will attribute the data to CoasterBuzz.

Agency: We're taking a list of top 50 cities in the US and using the CoasterBuzz rankings to help us identify the cities with the most top rated roller coasters. We'll mention that we used information from CoasterBuzz and link the list to the press release. Do you need further details?

Me: That's still vague and unsatisfying. The attribution doesn't really help me... you're just using content for free. I'm not OK with that.

Agency: I explained exactly how we're using the data in my previous email. [gives example]

We continue this for all 50 top cities in the US. We also pulled top rated beaches, identified whether or not they have a national park, their average weather, etc. From all of this data, we create a travel index for consumers to reference as they're thinking about their summer travels. Does that make sense?

We're also pitching this content to top tier consumer and travel media as well as distributing a national press release (which isn't cheap). We're essentially driving more eyeballs to the CoasterBuzz website and increasing potential traffic.

What terms would you be OK with?

MeIf you want to pay for use of the data, that would be fine, but I'm not interested in eyeballs. They don't pay for the hosting services or software. If that's something you can budget for, do let me know, otherwise, I'm not willing to allow the repackaging of our content.

AgencyWe'll look elsewhere.

Awesome, right? When you want something for free, there's nothing quite like making it sound like you're doing me a favor. I can assure you that after 17 years of doing this, it's not a favor. I've had mentions in the LA Times and on NPR, and I can assure you that there's no flood of traffic that comes from these mentions. And in those cases, at least it's around something newsworthy, not generating content for the purpose of marketing. What started as a "mention" was really redistribution of content for free.

Content has value. If it didn't, you wouldn't be asking for it.

Collaborate and contribute vs. order taking and kingdom guarding

posted by Jeff | Tuesday, April 19, 2016, 11:00 AM | comments: 0

I was chatting with a coworker yesterday about the various kinds of IT work environments that we've been in. It was largely in the context of the kind of influence we have, depending on our career stage. I was making the point that it's easier to "sneak in" the right things when you get further along, a perk that I've enjoyed a bit in recent years. There is definitely a difference in the flavor of environments that are out there, ranging from the full-on IT-as-innovator shop to the stodgy old heads-down status quo.

When I say "IT," really I mean the software end of things. The hardware and infrastructure side of things is a different beast, though this is slowly changing as more companies adopt a devops world of virtualized everything and stop buying racks full of silicon that they'll eventually throw away. On the software side of things, there tends to be two m.o.'s at play, and it's striking how infrequently the shops fall somewhere in between (at least in my experience).

The first is the world where IT is a collaborator and contributor to the business. Good ideas come from everywhere. The IT people are engaged and understand the context of the business, so everyone from a junior developer up through management is able to identify an opportunity and suggest it to the other parts of the business. Those other segments embrace the ideas, and together the ideas are refined to turn a drip of awesomesauce into a steady flow. These are the companies that end up doing truly great things.

The other end of the spectrum is where IT is relegated to a customer service organization. Its intention is to take orders as they come along, and guard the kingdoms that they've set up. The other business segments aren't interested in getting ideas or innovation from IT, and IT is happy to just keep its head down until called upon. It will tell the business "no!" because of "security!" and other reasons that sustain its kingdoms. People are hired not for their ability, but because they can conform to this model and not ask too many questions.

I don't have to explain which scenario is better for any business, but the cultural leap to get from passive IT to full collaborator is not an easy one to make. The old stereotypes of the socially challenged guys in the basement who set up your printer are hard to shake. It isn't just the perceptions outside of the basement either, because there's a self-fulfilling prophecy among many software workers that, "This is where we belong." But consider this: The software people of the world are indexing the world's information (Google), making social interaction more global (Facebook), teaching cars to drive themselves (Tesla)... why would you not want the same kinds of forces that are changing the world changing your business? If you don't enable this culture, your competition will.

Civic doody

posted by Jeff | Wednesday, April 13, 2016, 6:50 PM | comments: 0

I don't know if others had this experience, but in grade school in the Cleveland school system, in the early 80's, we had something called citizenship lessons, which I suppose would be more broadly classified under the realm of social studies. As early as grade three, I remember learning about the Western Reserve, and how the townships in Northern Ohio were drawn out. Of course, there were lessons about the bigger issues of how the federal government worked, too, but I found it all very interesting, and it was probably some of the most practical knowledge I gained in school.

I assume that they still teach this stuff in school, but either there's a retention problem or people just don't care. I think one of the most critical things about government, and participation in it, is understanding how it works. If recent political discourse is any indication, people have no f'ing clue.

For example, we're all familiar with the usual nonsense ranging from, "Obama is gonna take my guns," to, "Cruz is gonna repeal Obamacare." You shouldn't need to be a constitutional scholar to know that there's a Constitution, or that Congress makes (and repeals) laws, not presidents. The basic principles about the three branches of government seem completely lost in the discussion.

It isn't much better at the local level. People don't seem to know or care about the various districts and municipalities they're in. When I lived near Cleveland, we were in six separate taxing districts (city, school, county, library, park and vocational school). Here, we're not even in an incorporated municipality, something lost by our neighbors who call city hall for the town that we share a zip code with. (You would think as a homeowner one would want to know who they're paying taxes to, and what local issues will come up in the elections.)

My intention here isn't to say, "What a bunch of morons." I'm just frustrated that people won't engage at a basic level to understand their surroundings. I don't want to live in the movie Idiocracy.

(Sidebar: There's a certain irony that the immigrants that so many people don't want actually learn this stuff to become citizens.)

Another Azure outage, and why regional failover isn't straight forward

posted by Jeff | Saturday, April 9, 2016, 9:23 PM | comments: 0

It's been a rough month for my sites in the East US Azure region. On March 16, a network issue made it all fall down for about four hours. Today, on April 9, just a few weeks later, I've endured what might be the longest down time I've ever had in the 18 years I've had sites online, including the time an ISP had to move my aging server and fight a fire in the data center. It will probably be awhile until we see a root cause analysis (RCA), but the initial notes referred to a memory issue with storage. The sites were down for around 7.5 hours this time, and the rolling up time over the last 30 days is now down to 98.5%. That's not very good. Previous outages include the four hours on 3/16/16, two hours on 3/17/15, and two hours for the epic, multi-region failure on 11/20/14. Fortunately, none of these involved data loss, which is the thing that cloud services should achieve the most. I moved in to Azure about two years ago.

Here's the thing, I know firmly that CoasterBuzz and PointBuzz don't support life or launch rockets. The ad revenue lost is really not that much, which you could probably guess considering how much I complain about it. Still, the sites are an important time waster for a lot of people, and I've spent a lot of years trying to get some solid Google juice. When the sites are down, it harms the reputation of them for users and for search engine bots that are trying to figure out how important the sites are. There is a cost, even if it isn't financial.

My costs are lower, while my flexibility and toolbox are better since moving to Azure. No question about it. The hassle free and inexpensive nature of SQL databases in particular are huge, especially the backups and ability to roll back to previous points in time through the log. That said, the down time for all but the broken 2014 incident were regional issues, and the only way to get around that is to have everything duplicated and on standby in another region.

If the only issue was the apps themselves, this would be super easy to handle with Azure Traffic Manager. Sites go down, boom, they route to a different region. Where things get less obvious is when you have a database failure. Today's failure appears to have been caused by a failure of the underlying storage for the databases, so the apps returned 500 errors. In this case, ATM would presumably reroute traffic to my stand by region, where I would have the sites ready to go and pointing to the failover database, also in the other region.

In today's case, I'm not sure if that would have worked. The documentation says that the database failover won't happen until the primary database is listed as being "degraded," but for the entire 7.5 hours today, it was listed in the portal as being "online." It most certainly was not. The secondary database won't come online until the other fails. I assume I could manually force it, but I'm not sure. I'm also not sure what happens when the original comes back online in terms of synchronization, and designating it back as the primary. And what if the apps went down but the databases were fine? Traffic would roll to the other region, but wouldn't be able to connect to the local databases because they're not failed over (and no, I don't want to connect to a database across the country).

So really, there are two issues here. The first is the cost, which even for my little enterprise would add up a bit over the course of a year. The secondary databases in another region would add around $25 per month. Backup sites would cost another $75 a month. ATM cost would be negligible. An extra hundred bucks seems like an awful lot for what I'm trying to do. I did see a good hack suggestion that says you can put the backup sites in free mode, and manually scale up if you need them, then point ATM at them.

The second problem is that the automation is far from perfect. In the sites down, databases up scenario, it would fail. Today, if the databases were "online" but really not, it would fail. I wouldn't feel comfortable getting on a cruise knowing that while I'm at sea there could be a problem.

This is mostly academic, and I realize that. If I have to deal with a few hours now and then with the sites down, so be it. Like I said, they're unimportant time wasters. It's just that 98.5% uptime in the last 30 days sucks. I know they can do better.

When will things go horribly wrong?

posted by Jeff | Saturday, April 9, 2016, 3:34 PM | comments: 0

It's not lost on me that I've got a pretty good life. I've worked pretty hard for much of it, made changes where I could, and paid particularly close attention to the quality of people I allow into my life. I have a good job, have great friends, a darling wife and child. I'm not rich, but I do OK. This is what I think we generally aspire to, and I'm generally happy.

But then you hear about things that happen to other people, just arms length from you. Someone gets cancer, a child is hurt, a job is lost or a couple splits. You start to wonder when it will happen to you. I don't think this is an issue with having a morbid perspective or anything, but I do believe that one knows intense happiness because they've experienced intense pain. Once you know that's possible, I suppose you're on the look out for it.

At this stage of my life, it's not that I fear death. I got over that a long time ago. Now what I fear is not having enough time with my wife and child (or them with me, in the more worrisome scenarios). I hate all of that "everything happens for a reason" bullshit that people use to rationalize death. I found it freeing when I accepted that the only "reason" is that everyone eventually dies, period. I can't change that, so I'm not going to stress over it. But again, now it's just that I don't want to squander the time, or have it taken from me.

I know, this all sounds horribly pessimistic, but sometimes the brain goes where it goes. I like my happy bubble, and I don't think it's entirely unreasonable to want to stay in it. We've been without any serious and instantly scary challenges for a few years, and I'd like to keep it that way. As rational as I try to be, emotionally it's still possible to feel as though you're "due" bad things.

So if karma is a thing, hopefully I've got some good stuff stored up.

A remote day at work

posted by Jeff | Friday, April 8, 2016, 3:00 PM | comments: 0

At last weekend's Orlando Code Camp, we (as in, my employer) had a table in the common area set up to talk to people. One person asked what it was like to work remote, and the best I could describe is that it's "different." I think generally that there are more pros than cons, and as an employer, you aren't limited by geography to have the best people. Silly "command and control" environments are obsolete, and if anything, you are judged more fairly because you have nothing to show for your work other than the results. You don't get points for showing up if there isn't a place you're showing up. An entire book was written about why it's awesome.

But the question seemed to be more about how you work. I suppose it's different for everyone, but my routine goes something like this:

  • 7:30 a.m., roll into the home office, handle email, prepare for whatever is in store for the day.
  • 9 a.m., at some point during the hour, most of my projects have had our daily stand-up meeting. That's where each person on the team says what they did yesterday, what they will do today, and if they have impediments. This usually takes less than 10 minutes, and follow-up conversations happen after if necessary.
  • 10 a.m. - noon, somewhere in that window I typically shower if I didn't when I got up.
  • Lunch: Time and duration varies based on meetings. If I stay home to eat, most of the time I don't take a very long break, maybe 15 minutes. If things are slower, I may stream a show for background (The Daily Show is typical). If time permits, I'll go out for lunch, and it's not uncommon for Diana to come along. We've even gone into Walt Disney World a few times for lunch!
  • Afternoons tend to have the highest density of work, but they aren't without meetings.
  • I usually intend to wrap up by 5 p.m., but sometimes I don't realize what time it is and I go longer.

The weirdest thing about this is that it's not unusual to do actual work for more than 9 hours in a day, but it's also easier to fit in things like haircuts, a Christmas concert at school, or said Epcot for lunch. Since the job requires billing clients, I can see that total time, billable or otherwise, tends to average between 40 and 42 hours a week. All things considered, that works out consistently. Projects have budgets, so you can't usually arbitrarily work extra just because. I've put in longer weeks, but I don't think that has happened more than two or three times in two years.

My year working remote at Humana was pretty similar to this routine. The point of contrast is that I don't spend time in the car commuting. I'm not racing out of a building at 4:30 or getting in at the crack of dawn to avoid traffic. That time instead is spent working or having the flexibility to do life stuff. It's pretty fantastic.

We happen to have an Orlando office, so those of us who are Orlando based do try to come in Tuesdays and Thursdays. It varies, as I'll skip out when there are long meetings (in my case, sprint review and planning) or if I really need a little extra time out of the day. But it's a nice arrangement because I get to hang out with people and talk about work and be social. On those days, I tend to get there by 8:15 (beating traffic, mostly), and then leave in the afternoon whenever I'm at a logical stopping point. Then I finish at home until 5-something. I still tend to get a solid 8 hours of work done, no problem.

Can everyone work this way? I'm not sure. I don't think so. I find it very easy, and the collaboration tools and phones and screen sharing all make it work pretty well most of the time. It feels more efficient to me. I love "coming home" instantly and seeing my darling wife and child. Professionally, it's great to work with great people, all over the country.

Team Puzzoni at 7 years

posted by Jeff | Sunday, April 3, 2016, 10:25 PM | comments: 0

Tomorrow is already our 7th anniversary, and I can't believe it has already been that many years. Diana and I were married on the beach in 2009. I'm always saying how I celebrate our marriage every day, which sounds like b.s., but it's mostly true. (I mean, some days I'm sick or whatever, and I don't really celebrate anything.)

This year was another full of adventure for us. We sent our kid to kindergarten, took three cruises, bought a ridiculous car, had some health challenges, Diana worked part-time for the year and continued to build an impressive quilting audience online... never a dull moment. Sometimes I wonder if we should have more dull moments. Do other married couples have those?

Despite all of the adventure, I do feel like we have a pretty steady routine. There's a level of team work that steadily improves. I still think she does most of the work when it comes to Simon and the house and such, and the fact that we have settled into these 1950's gender roles makes me uncomfortable for reasons I can't explain. The love itself doesn't seem routine, which surprises me. I don't get "used to it," it still has the intensity one associates with newness, which is awesome.

I love that I have to wait up for Diana when she's working late, and love that I smile every morning waking up next to her. I'm pretty lucky to have landed someone so kind, beautiful and inspiring. She's amazing.





Developers: You have to share and mentor others, for the sake of our profession

posted by Jeff | Saturday, April 2, 2016, 10:41 PM | comments: 0

Again this year, I did a couple of talks at Orlando Code Camp, the amazingly awesome free mini-conference that our local user group, ONETUG, has been putting on for a decade now. I am again fascinated by the vibrancy of our community, and all of the people who volunteer their time to share knowledge. It's humbling and amazing. (My decks are on GitHub, by the way. I won't rehash the mentoring and career development stuff here.)

One of the talks that I did was about mentoring developers. It's something I'm passionate about, and I think it solves a problem that keeps getting worse. Our profession doesn't have enough people to do the work, and the experience and skill level in the pool that we do have isn't high enough. And if you dispense with the egos and hyperbole often associated with some segment of developers, you start to see the pattern that our work has more in common with classic trades than it does a truly academic pursuit. In other words, it's more like learning how to be an electrician or carpenter than it is learning to be a doctor. You need experienced people to teach you how to do the work, hands on.

With that in mind, mentoring has to be a part of our daily routine when we're in senior positions and when we're managers (assuming that we're managers who code). I didn't mention this in the talk, but I flatly reject the idea that we don't have time to do this. It's built in to everything we do, whether it's formal code reviews, pairing activities or informal talk about life. You can read all of the blog posts and StackOverflow answers in the world, but unless you have contextual, interactive opportunities with other humans, you won't gain the experience that you need to improve your skills.

That's why it's vitally important to get involved with something like a local code camp or user group. A strong technology market doesn't get strong just by having the right companies move in. It's ultimately composed of people that make work happen. If you're in any career stage where you feel like you have something to share, to pass on your experience, do it. The amount of work there is to do keeps growing, and the number of people who can do it isn't keeping pace. There's no need to protect your knowledge. Share it. Our profession depends on it.