bradleyboy

The online home of Brad Daily

Day One

Today is very new day. This morning, I stepped of the F train in Brooklyn, NY – a far cry from our previous home in Nixa, Missouri. My destination? DUMBO. Today's my first day as a Senior Software Engineer at Etsy.

I'll be joining a fine group of folks inside Etsy known as the Maker Innovation team. I can't wait to get started. Etsy is a company I've long admired for how they connect the crafting of physical goods and the digital world and how they empower seemingly anyone, anywhere to start their own business. 

Whither Koken? 

As part of this, I'll no longer be working full-time on Koken. My longtime co-conspirator Todd Dominey also left day-to-day involvement in the project when he began working for Mailchimp in January. For more on the story of Koken and its future, see Todd's post "We're selling Koken"

With our new positions at separate companies, Todd and I's run – of nearly 10 years – is coming to an end. Way back when, Todd took a chance on some random guy in Canada writing terrible PHP, and I'm forever grateful. In the end, we created products that ran sites small and large and had users who fervently followed and supported us. There were hard times – late nights babysitting servers, vacations with the family that involved setting aside time to answer support email each day, and the worry in the back of your mind that maybe tomorrow will be the day that people just stop buying your product. But those difficult times were far outweighed by the good. We were extremely lucky to be able to work on products we loved, of our own creation, for so long. Thanks Todd. 

Onward  

So here's to the next chapter. I can't wait to jump in and join the great work already going on at Etsy. Let's go!

Groundhog day

Today I was reading about a snafu over at GitHub, where an error caused an email to go out to way more people than intended, and was reminded of my own embarrassing brush with mass email failure.

.communicate

In the early 2000s, I had my first real job running communications for an organization in Canada – the Canadian Convention of Southern Baptists. I was given far more responsibility than I probably should have been trusted with, as this story will no doubt illustrate. One of my early tasks was building an email newsletter system to manage our growing list of contributors, leaders, pastors and so on. In line with the times, I gave it a catchy internet name – .communicate. (And yes, the .com portion was in bold. I told you it was catchy!)

At the time, sending email newsletters was hard. The plethora of options available today (like Mailchimp and Campaign Monitor, to name a few) were not yet around. There were some off-the-shelf products available, but they were expensive and I was young and cocky and wanted to build something myself anyway.

So I set off building a subscription system coupled with an administrative panel where our staff could create new email campaigns, schedule when the email should be sent, and select which of our lists the email should go to. As was the case then and now, I spent days checking all the different email clients to ensure our designs looked halfway consistent throughout. In the beginning, things worked wonderfully. The lists grew steadily and we had a constant stream of emails going out each week.

Day 2

A few months later I was in Atlanta for a meeting. I woke up in my hotel room, flipped open my laptop and noticed something odd in my inbox. A new email from the .communicate system that I was certain I had received the day before was back again. I looked back in my trash and sure enough, there it was.

Now, I am not a morning person. My wife can tell you story after story of times when she has asked me a simple question before 9am only to be left worrying about my health due to my incoherent answer. So for a few minutes I sat there staring at my inbox trying to work out how that could have happened.

Maybe the staff member who set it up accidentally scheduled it twice?

No, nothing in the database to suggest that. 

Perhaps this hotel wifi is screwing with my email?

I could only be so lucky. Like any good developer, I chose a strong course of action. I trotted off to my meeting hoping the problem would just go away on its own. Surely some sort of anomaly that could only be explained by the internet gods had caused this, and all would be well tomorrow.

Day 3

The next morning, I woke up in the same hotel and started over to my laptop.

Wonder if that email thing is still going on?

Before I could get there, my phone rang. It was one of our team members at the home office in Calgary. "Brad, we have a problem", they said as I opened my laptop to see that yes, the email had gone out again. In fact, it was going out to our largest list – thousands of people had received the same email for three days in a row now.

After yet another check of our system to make sure nothing was amiss there, I became convinced that something was wrong with our web hosting provider. We were using a bargain service out of Toronto, so getting in touch with them was difficult and getting them to admit they were a part of the problem was nearly impossible. I suspected that this particular email was stuck in their mail queue, so it would continue to go out indefinitely until we found a solution. Of course, they saw nothing wrong.

I spent the next 4 days fighting on two fronts. Our staff – not to mention the list's subscribers – became increasingly frustrated as the email continued to go out each morning, and our hosting provider became increasingly unavailable to help us troubleshoot. To make matters worse, I was due in Calgary for a meeting on day 8, so I was a pretty popular guy when I showed up at the office.

You know that email went out again this morning?!

We had so many complaints that we actually sent another email out instructing people to block our newsletter's email address and that we would be sending from a new address when things were back to normal. So yeah, we were in the tall grass.

Enough was enough. Convinced that our web host was to blame, our IT guy and I decided that we would transfer all of our web properties to a new host immediately. Normally, that's not the sort of thing you would do on short notice, but we were desperate. We spent half the night getting setup on a new host and transferring everything over. We flipped the DNS switch just after midnight and cancelled our hosting account at the old provider, so I thought that maybe, just maybe it would be over.

The next morning, the email came again. 

Maybe the DNS just needs to propagate. 

The email came again for another 2 days. I was beginning to feel like Bill Murray in Groundhog Day. Just switch the annoying alarm clock for the email that wouldn't die.

Out of options and patience, I did the only thing I could think of. I called the old hosting provider, got their answering machine, and left a message that if they did not respond, I would get our legal team involved (we did not have a legal team that I was aware of). It was a bluff, but it worked. They called back in an hour, promised to disable all services associated with our cancelled account – including the mail servers – and whaddya know, the email was never heard from again.

Experience matters

Sometimes we bristle at the experience requirements listed alongside job postings. "How am I supposed to get experience without experience" is the common refrain. But this story reminds me that it is indeed beneficial to learn some hard lessons in front of smaller audiences along the way. Luckily, we had some relatively patient subscribers at the time, it certainly could have been worse.

I love to hear stories like this when talking to other people. Don't tell me about the great things you've done. What's your biggest screw-up? You can probably learn more from a soldier's scars than you can from his medals.

Ideas of March

In high school, I had this group of friends. We ridiculously called ourselves the "Fab Five", one of those stupid things you do when you are 16 or 17. Also stupid: messing around in that one class you have to pass in order to graduate. You see, several of the Five were in the same English class in the last hour of the day of our senior year – a recipe for disaster.

Six weeks or so before the end of the year, some of us were in danger of failing the class. If that happened, we wouldn't be able to walk with our class at graduation – something the colleges we had already been accepted into might frown upon. Luckily, our final class group project accounted for a large portion of our grade and by working together, what could go wrong?

I don't remember what exactly the project covered, but we were able to cobble a video together using a VHS camcorder and a strobe light, if memory serves. We also created a web site for the project – a primitive sort of blog – where each of the group could record their thoughts. It was 1997, by the way. I created the website using Netscape Composer and hosted it on the free web space that came with my AOL account. Oh how I wish I could find those pages again. I'm almost certain clip art was involved.

Anyway, when it came time to present the project, we played our video and gave our presentation, then showed everyone how to pull the web page we had created up on the 20 or so Macintoshes that lined one wall of the classroom. Our teacher, who held us in some contempt and rightly so, was genuinely astonished. We all ended up passing the class. Disaster averted.

While I didn't realize it at the time, I was experiencing first hand, and for the first time, the power of self-publishing that the internet unleashed. Then it was just about saving my lazy, 17-year-old behind. Later, when I began developing websites in the early 2000s, blogs were the way to keep up with the latest techniques and trends. I'd never be where I am professionally today had it not been for blogs.

Over time our narrowing attention spans began to favor shorter form writing that either spawned from Twitter and Facebook or spawned Twitter and Facebook themselves, depending on who you talk to. Blogs began to take the back burner as it was much easier to fire off 140 characters than to sit down and think critically about an issue.

But like many trends, there is a resurgence of blogging and self-hosting one's content. Chris Shiflett has revived his Ideas of March movement, encouraging more blogging and self-publishing during the month of March. This aligns well with what we are doing with Koken, as we've also seen a desire from those who create digital content to control and curate their content on their own terms.

So, here's to the revival of blogging. For my part, I'm going to try and blog at least once a week this month. What say you?

Want to get involved? Blog your thoughts and share a link to them on twitter with the #ideasofmarch hashtag.

The Milk Carton Kids

My musical tastes have changed quite a bit as I've gotten older. I sometimes wonder if that is due to the fact that I work all day with headphones on. Blaring loud electronic music doesn't mix well with writing code for long stretches of time, at least for me. In particular, I lean toward acoustic, folky music without too much twang. So the usual suspects of that scene can be found in heavy rotation in my playlists – The Avett Brothers, Joe Purdy and Mumford and Sons, to name a few. 

Lately I've been coming back to a duo I found last year that doesn't seem to get the pub they deserve. The Milk Carton Kids feature Joey Ryan, Kenneth Pattengale and two '50s era acoustic guitars. Right up my alley.

Of course, the best way to get to know a band these days is to watch their tiny desk concert at NPR. Enjoy.

If you like that, both of their albums are available as a free download on their site and their new album – Ash & Clay – is due on March 23rd.

U-turn

One of the things I love about Koken is that it makes me want to write more, upload more images from my library, and most of all get off my keister and use my camera more. I think that's the sign of a product with potential. And I know what you're thinking – I'm biased, right? Well, I haven't always been the most fervent user of stuff I've built in the past. Koken feels different. 

To that end, I've been going through my old images and found a favorite that I had long forgotten about. One night, when we were living in Montreal, I set up my tripod and experimented with some long exposure shots. As luck would have it, I caught a u-turn in progress on the busy street below.

U-turnLong exposure capture of a u-turn on Montreal's Parc Avenue.

Self-healing software

I'm a dad. One of the things I really enjoy about that is getting to watch my son figure things out (he's 20 months old at the time of writing). Often, there comes a time when he almost has a toy apart – or back together – but can't quite push through. At this point, I'm torn. The problem solver in me wants to let him figure it out on his own, instill that drive in him that will make him tear his hair out solving software problems for the next 50 years. The compassionate dad in me wants to run to his aide and fix the problem, averting further frustration and potential tantrums. In the end, I usually try to divert his attention while fixing the problem with some sleight of hand, making him think he figured it out on his own.

Just recently, I've been thinking of the same situation, except this time substituting father and son with software and the end user. We often focus so much attention on documentation and error messages, when in many cases we can intelligently and transparently guess what the user is actually trying to do and avoid an error altogether.

Sounds good. Example?

In the few weeks since the Koken public beta was launched, our installer has been getting rave reviews for its simplicity. However, the one issue that has surfaced almost daily is confusion over database connection information. Koken requires the hostname, database name, username and password for the database. Our users are a mix of web developers and photographers DIYing their site. For those who don't do this sort of thing every day, navigating through a host's control panel looking for MySQL information is not the easiest thing in the world.

The database entry screen in the Koken installer

In the end, most people are able to find the database name, username and password. The hostname is often confusing though, and many users simply put their own domain there, which is almost always wrong. Their next step is to fire off an email to us that usually goes like this:

User: MySQL info not working. Help!
Us: Try "localhost" for your hostname.
User: Thanks, that worked!

I bet I get one of those a day. You see, a large number of shared web hosts have MySQL setup on localhost, so in almost all cases where the user doesn't know what to input, localhost is the answer.

As I started thinking about what to do, my mind immediately jumped to bandaid solutions like documentation, or a better error message suggesting they try localhost. But then it hit me: instead of suggesting, we should just immediately try the connection again with localhost as the hostname and if it connects, simply use that. The user never knows. No frustrations. No tantrums.

So next time your dealing with a common user error in your system, ask yourself if there is a way you can fix it in code, automatically and transparently. Your users will love you for it, and they won't even know why.

A new day

In November of 2002, I was hunkering down for my first Montreal winter. The debilitating cold was a great excuse to stay inside and learn something new. And there began my first foray into web development. I had no idea what I was doing.

What I did know is that you needed identity – and that's how I came to register bradleyboy.com. I spent the next several years tinkering with its design and use, with varying success at both. But over the years, I've used it less and less. In fact, when I started cleaning things up a few weeks ago, I immediately noticed that it wasn't working at all. My former WordPress blog had stopped loading altogether and neither I or anyone else noticed (cue "tree falling in the woods" analogy here).

The question is why

The decline of bradleyboy.com was no random event. At the same time as I was neglecting this website, the web was transitioning to the cloud and social networking. With that came an ease of sharing and connecting that made it easy to abandon your own homegrown site. I too fell into the vortex of Facebook, Twitter, Flickr, et al – with pictures and posts scattered to the four corners of the internet.

However, that ease of sharing and connection came at a cost. It meant our content was now presented inside someone else's frame. That photo you toiled over, making sure the composition and lighting was just right? You don't mind if it sits here next to this 1800Flowers ad on Facebook, do you?

These frustrations were nothing new, of course. The reason we gravitated to these services in the first place is that their ease of use outweighed any warts that came with them. I had tried – unsuccessfully – to revive bradleyboy.com on several occasions, but the mishmash of software I needed to install and maintain to get anywhere near what I wanted always left me back at square one.

The right tool for the job

A few years ago, Todd Dominey and I began discussing what was next for SlideShowPro, the suite of multimedia publishing tools we had been crafting for several years. It was becoming clear that people wanted more than a component within a website – which is what SlideShowPro was, and still is – and instead needed a tool that could publish their entire website for them. That began a long journey into an exciting new product, now named Koken, as well as a new addition to our team (say hi to Lauren!). An early beta of the Koken platform is the engine behind this new version of bradleyboy.com.

So, I'm dogfooding here and am very excited about that. For all of SlideShowPro's utility, I could never find a use for me personally, and that made it difficult to relate to our customers who were passionately using it themselves. Koken is perfect for my needs here, and I have a feeling it will fill the void for many others as well.

So, here we go.

Weekend getaway

With the first beta release of Koken imminent, and the mountain of work that usually comes with a beta release on the horizon, we decided to take a long weekend and jump down to Panama City Beach, Florida, for a few days of downtime before the storm. My folks are there temporarily for work, so it was nice to spend a few days with them and show Brayden his first beach.

Another firstBrayden gets his sea legs during his first visit to the beach.

Also, sunsets. Like a moth to a flame, my camera and I would migrate to the beach each night for one spectacular sunset after another. Here's a few of my favorites.