So when I got home, I started to work on getting the site live, at least on the IP of the Amazon instance. I had previously switched my Recruits project to being at the ipname/recruits, which is what the Varnish instance was pointing to and caching. Thankfully, good pal and well-known lover of fancy food Jeremy Bowers had once written a great tutorial on using uWSGI and nginx, which is what my Django server was already running (and I had since forgotten how it all worked). And he was online and helped me out when a few things, uh, didn’t work.
Then I had to fix some stuff in Varnish. This is where Michael Strickland, boy genius and Jesse Eisenberg’s long-lost brother, had a good idea. He told me how to set up my nginx.conf file better than Jeremy did, and made me abandon my super-difficult-and-extended idea of how to set up Varnish (which may be, now that I have talked to others, maybe not such a bad idea to begin with). I’ll go more into detail in the intense nerdery in a later post.
So, I sudo service restarted and bam. It worked. EVERYTHING WAS ON THE SCREEN! Whenever such things happen I usually almost cry, because I constantly fear that maybe I’m a con artist and I don’t know what I’m doing. But it worked, with some help from my pals. Woohoo!
Next I made sure the admin was working and set it up so it’d be easier to use for our various newspapers. I set them up with usernames, added in some fake information for placeholder and got the correct Omniture tags from Andy Rhinehart, one of my coworkers. Metrics are important, as we wanted to know how well/not well the app was doing. Otherwise, how could we learn from it?
The Next Day
I went to bed around 4 a.m., slept a few hours then went to work. It was Friday. First thing I did was write an email to the other newspapers to get them abreast of where we were at. I had started developing it Thursday afternoon and then realized I had to ask them if it was okay. So I emailed and asked, and they all agreed and bought into the idea. This is important: If our partners didn’t want to work on it, it surely wouldn’t have been a success, in my opinion. I sent them their login information for the admin and told them they could start adding names when they got a chance.
When my coworker who did the design, Yinnette Olivo, got into work, I showed her where we were at. We came up with a quick list of things she had to do and I had to do and we got to work. I still had to fix a few bits of the urls.py file — the part that sets up the url structure and connects to the views — as some of my urls weren’t working. She made some jquery fixes and made it prettier in general.
By late morning, the other newspapers had already started to add names and information, so we had something to work with while double-checking the design. Then after forgetting to eat lunch, we were more or less ready to go. I sent the working address to a few friends who aren’t web savvy to ask their opinion. Some of them critiqued the copy we used and had better suggestions. I liked them, so I changed it.
Before we launched, I realized we had some text different in different spots. I wrote a new include and put it in all of the templates. I would at least follow the Don’t Repeat Yourself philosophy a little bit, you know, just for shits and giggles.
The Launch and Some Thoughts
Then at 1:07 p.m., we launched with about 10 names loaded. It had been about 25 hours since I came up with the concept. This was the fastest I’d ever built anything. I mostly did this to prove a point, like I tend to do many things. Breaking news and web development can and should go hand in hand. I, along with many other people, have proved it. This guy is goddamn wrong.
I did this with the help of a few pals, but it was mostly me and a designer. If this is all you need to make fast projects like this, we should be doing it more often as an industry. The only excuse, in my opinion, is that some people fear giving such authority over server and data architecture to people who aren’t, well, traditional developers. I think this is a mistake, and the media organizations who seem to be doing great work are the ones who’ve broken down this barrier.
That being said, here’s what I learned:
1. Your original idea for how an app should be used may be wrong
I built this with the idea that we would start adding information about every state’s victim. Slowly, though, I realized we would just be focusing on Alabama. Perhaps in the future we will add more names, but right now the focus is on Alabama. Because of this, I changed some of the templates to get rid of a “See All States” tab.
2. Facebook comments > Django comments
I had originally planned on setting up forms and doing a bunch of Django comments muckery. I had never used them before, but I thought they were neat and totally worth using. Matt Wynn told me I should just use Facebook. And we did. It was much easier to deploy and, frankly, has helped to drive a lot of traffic, according to our metrics.
3. Check your ad code and metric code
Multiple times I screwed up adding the right Omniture code. I did it multiple times. I also didn’t have the right advertising code until Monday. Why? Because I was dumb and didn’t ask our ad department or another coworker to get that stuff right in the beginning. This made it harder to track the metrics. I now know this should be the first step when setting up a new project when you get to the actual building phase.
4. If you’re stuck, ask for help
Like I’ve pointed out multiple times, I asked my pals for help on occasion. Sometimes I just threw ideas past them to see what they thought. Other times I showed them code and they offered suggestions. This is why you should be reaching out to your fellow geeks and nerds, making good connections with them and being helpful to one another. Also, Twitter is a good resource for throwing out OMG HALP on occasion.
5. Reuse your old code
Part of the reason I was able to build this so quick is that I documented in my blog how to set up a basic app, and I also had lots of old code I could reuse. I know this is probably a no-brainer, but thought it worth noting.
6. More photos
The people who have photos have, by far, the most Facebook comments. People are more apt to click on photos than just placeholder images. If you’re setting up something similar, remember to try and always get photos of the actual people. It has a bigger impact, and people are more drawn to it. Our newspapers were calling nursing homes and checking social media for photos. We also were sure to include information on how to contact the newspaper to send us photos or let us know about any data that may be wrong.
7. Don’t do something fancy when you can just make it work // Code whatcha know
I probably could’ve attempted to set this up as my first Ruby on Rails project. Maybe it would’ve been slick to use Mongo or node.js. But I didn’t have time to be fancy, so I used Django, an MVC-styled framework that I know. What is the time to be fancy? When you have longer deadlines and can try out new stuff. Or when you spend your free time — like many of us do — learning new toys so you can use them when the time comes. I could have set up the Django sites framework, but I didn’t because I didn’t want to spend the time learning it on the fly when I knew I had another way that could work. Probably bad programming decision, but a good workflow decision.
8. We should be doing more projects like this
I can’t disclose traffic numbers, but suffice to say this thing got a lot of traffic. Personally, think it was good journalism, and it certainly is better than just a list of people’s names. I was able to do this on two Amazon Web Services small instances using all open source technology. If my dumbass can figure out how to do this stuff, you probably can, too. I’d be even willing to help you. Also, this was a good business decision. It helped to increase traffic to our site and get users engaged. It promoted our newspapers’ brands on social media when people posted comments, and it also showed up on some blogs in Alabama. So it’s good journalism and it’s good business. Why aren’t we doing more of this, especially when the costs — other than personnel — are pretty minimal to get started?
Well, that’s that. I wanted to walk people through my process, so I hope I accomplished that. This was probably the project I’ve felt the most connected to in my life. Many times, especially Friday night when I added 87 names and continued to see people who appeared to be relatives — or, in one case, an entire family — I did get pretty emotional. I just wanted to do it justice. Hopefully I did.
Let me know what you think in the comments. Thanks for reading.