Good Enough is Good Enough

Often, it seems that quality and quantity are inversely proportional. You can spend all day doing lots of really quick things poorly, or you can spend all day doing one thing really well. Most people would tell you that quality is really important, so you should spend all day doing one thing really well.

Sometimes, I’m sure those people are right. If you’re assembling an airplane, please take as much time as you need. But increasingly, I find the focus on perfection to be an obstacle. Guy Kawasaki is famous for his, “Don’t worry, be crappy” quote. He doesn’t mean that you should show up to work late, give a half-hearted attempt at doing your job, take a 2-hour lunch, and then leave early. The point is just that you should focus on getting something done, and worry about perfecting things when it becomes necessary.

There are really a lot of reasons to focus on being “good enough”:

  • Why try to “finish” something before getting user feedback or full testing? From the PlentyOfFish Architecture article on HighScalability.com comes this quote: “The development process is: come up with an idea. Throw it up within 24 hours. It kind of half works. See what user response is by looking at what they actually do on the site.” Maybe they like it, and then you can perfect it. Maybe they find bugs you would have missed anyway, and you can fix them. Or maybe they hate it, so you take the feature down, not having wasted too much time perfecting it in the first place.
  • Why waste time fine-tuning something that doesn’t need it? As a mundane example, I added an admin tool to something at work, and tried to figure out how to gracefully handle the fact that it would do an awful full table scan against one of our biggest tables because it depended on running a SELECT on a field with no index. The solution? Do nothing. The tool is used infrequently enough that we just wait a few seconds for the results. It’s not user-facing, and it doesn’t impact the site performance, just the particular page. Adding the proper indexes would have taken considerably more time and yet manifested itself by shaving half a second off the load time of a tool used a couple times a week. Why bother?
  • Don’t spend too much time on the small things. Just as a pastry chef wouldn’t spend all day keeping the front of his store immaculate, it’s not really my place to pour copious resources into perfecting an unimportant feature. Build something that works. If it’s an important task, do it very well. If not, it’s taking time away from you doing a better job on something more important. (Don’t mistake this with doing a bad job. The pastry chef with a small shop wouldn’t allow the front of the shop to become a disgusting mess that scared customers away, but he shouldn’t spent twenty hours a week polishing the floor and shampooing the carpets, either. Do a good enough job on the non-priorities, and focus on doing a really good job on what you do best.)
  • You might not even know what you’re building. I’m doing some rapid prototyping of some new features, and the specifications change considerably all the time. This is sort of an extension of the first point, really. As we flesh out the prototype a bit more, they firm up some features a little bit more. Just as you wouldn’t work on hanging the blinds while you were still putting up the frame of a house, it’s not a good use of your time to work on tweaking the performance of features that are still being developed. Again, don’t do a bad job and build something that can never scale without being reimplemented from scratch, because you’re shooting yourself in the foot.  But don’t do a perfect job building the most efficient interface ever on something that has an excellent change of being scrapped.

Fairly tangential to this, and yet the same general concept, is the Pareto principle (the 80/20 rule). What I find fascinating is the areas where it’s considerably more distorted. Spam is a good example, really, of something that’s more like the 99.9/0.1 rule. Both here and at work, spam has been a massive problem. But if you focus on solving the 99.9% of spammers, it turns out to be extremely simple. The ability to block registrations from an IP or range, the ability to quarantine posts containing certain keywords, and a throttle on what new users can do has practically eliminated spam as a concern. The people that would sign up and start spam-bombing every user on the site still try every now and again, but find that it doesn’t work.

We spent a while discussing some of these things. “If we block their IP, won’t they just use a proxy server? Should the limit be x or y messages, and over what time period?” At the end of the day, though, an unreasonably huge amount of spam can be stopped by a few really basic rules. In theory, spammers can just get a new IP, or can exploit a few things we identified as possible vulnerabilities. In reality, a handful of very basic features made spam volume drop orders of magnitude. Rather than spending all day working through a growing backlog of spammers, we click a few buttons every now and then to delete the few that bother. It’s somewhat like greylisting with SMTP: in theory, spammers have had years to work around it, and it should take 30 minutes of coding to make their spam software pass greylisting. In reality, something like 95% of people who get graylisted (at an inbox that gets 100% spam) either don’t try again at all, or they try again with totally different information and get rejected again.

I feel compelled to repeat that none of this is saying you should do anything but your best. You should always do your best, but often, doing your best means that you do a good enough (still acceptable) job on the things that you need to do that distract you from what actually creates value. If you slack off or cut too many corners, you’re not doing good enough. Thus doing good enough is necessarily good enough.

Web Templates

Way back when, OSWD.org was the place for free templates. Most were public domain or had GPL-type licenses, and it was a great way to get a site up and running with an attractive layout.

OSWD hasn’t been actively maintained for a long time, but OpenDesigns.org and GetFreeWebDesigns.com have replaced it. Quality varies; some are amazing, some are mediocre. But for the price, you can’t really complain. It’s worth noting that many are not free (as in speech); they often require attribution or similar. This may or may not matter. (For something like my site, I gladly left the linkback in the footer. If I were designing a commercial site, I wouldn’t be so comfortable with that.)

I bought a template from OneDollarTemplates.com a while back. I was pleased. (Especially given the price!)

Today, I just discovered Theme Forest, where a lot of extraordinarily talented designers sell excellent templates for low prices. Columns is an amazing blog template, for example; Nova and Liberation are quite something, too. And Blue Business. Dezineplus is superb. Really, most everything there is pretty fantastic.

From the comments on one of the designs, I found another tip: the free Nevis font is an approximation of the commercial Gotham font. Ten by Twenty has several other great fonts, too.

Courage

Although I really don’t like the idea of stirring the hornet’s nest, even if I agree with the stirrer, I have to admit that this guy has a lot of guts. Why? He’s walking through a giant anti-Obama protest. According to the first photo in the series, the man was spit upon, called every name in the book, and encouraged to leave the country. He managed to bring out pure hatred and rage in other people. (Others have noted the irony of the cross around the neck of the woman linked as “pure hatred”.)

This sign, sponsored by these people, is pretty offensive, too. Oh, and this one, too. Other seem to cross the line into death threats. And photos of Obama as Hitler. And while Jimmy Carter wasn’t right about opposition being “mostly” seated in racism, it’s no secret that there’s some racism going on here.

In the end, though, the last photo of the set: “a normal discussion between two people with different points of view.” Can we have more of that and less of this?

Obama Wan Kenobi

How can you not love a President who is photographed with a plastic lightsaber on the White House lawn?

Some Olympians were at the White House, and the Olympics apparently include fencing. And for whatever reason, Obama somehow had a plastic lightsaber he jokingly used with the fencers. (For bonus points, can you find the man picking his nose?)

Or, as on Digger put it: “Barack, I’m really happy for you, and I’m a let you finish, but LUKE SKYWALKER HAD ONE OF THE BEST LIGHTSABER STANCES OF ALL TIME.”

My Dream Job

I love my job. But whenever I look at Craiglist, I realize there’s something even more fun I’d like to do.

It blows my mind that there is so much fraud on Craiglist. Take a look at the cars, for example. Just the 100 most recently-posted in your area. See the handful that are unreasonably good deals? The 2007 Mercedes for $5500? Check it out. It’s got photos of the car with palm trees in the background, but it’s listed in Boston. The whole post is one image, and it encourages you to send them an e-mail at their GMail address. If you contact them, they fess up that the car was mistakenly listed, but that it’s a bargain and they can ship it to you really cheap. See the giant warning in Craigslist, bigger than anything I’ve ever seen, saying “offers to ship cars are 100% fraudulent,” only in h1 tags and all caps?

Why isn’t the FBI “buying” these cars and following the money trail before bringing down what’s probably a lucrative fraud enterprise? (For that matter, it’s a pervasive Craigslist problem. Why aren’t they doing more to stop it?) Same thing with the other fraud and phishing attempts that land in my inbox every single day. Sure, a lot have ties to other countries. But some of this is surely happening here in the US, and it’s not as if the federal government is powerless against international crime rings.

I can think of nothing more enjoyable than having a job that allowed me to play the part of many gullible folks amazed at the great deals on Craiglist and wanting to buy the $4500 2008 Mercedes and have it shipped cross-country, and then passing the team on to the SWAT team that would bring them down.

The only thing is that, if the FBI does have a team that’s busting open lots of fraud rings, they sure do keep quiet about their work. It seems that there’s rampant, unchecked fraud going on with no one doing much to stop it.

Driving Advice

I’m one of the considerably-more-than-half of drivers who think they’re above average drivers, so I’d like to present some tips to fellow drivers:

  • The left-hand lane is for going fast. If there is a line of cars behind you, please get over a lane to the right. If people are passing you on the right, get over a lane or three and do penance when you arrive at your destination. This has got to be my biggest pet peeve. People just sit in the right-hand lane and drive slow.
  • When two lanes are merging, it’s a “zipper merge.” Let one car go, and then pull in. Ninety-nine percent of people seem to do this without thought, and it works great. One percent try to cut and they cause absolute mayhem.
  • If you happen to be in a minor fender-bender, you’re supposed to pull off the highway. There happen to be lanes on both sides of the highway for your safety and convenience. Otherwise you (a) stand in the high-speed lane exchanging paperwork, which is practically putting a “Please run me over” sign on, and (b) back up traffic for miles. (This obviously does not apply for serious accidents, though you’re still probably safest if you can pull over.)
  • When entering a highway, you should be traveling at the same speed as those on the highway. You should not (a) be going 60mph when the highway is stopped, or (b) yield at the end of the onramp.
  • If you wish to change lanes, please move your finger an inch to turn the blinker on. It’s actually quite helpful when other people know your intentions.
  • If you’re trying to pull in front of me, the above advice applies double. If you start to drift into my lane, I’m going to assume you’re asleep at the wheel and lean in on my horn to alert you. If you put your blinker on, I’m going to back off on the gas just a tad to give you room. So will 99% of drivers.
  • After you have changed lanes, please turn your blinker off. (How do people not notice this?) You have no idea how confusing it is to be behind someone who has their blinker on. Are they really, really timid but trying to change lanes? Are they oblivious? Or will they change lanes as soon as you decide that their blinker is just stuck on and crash into you?
  • You can’t send text messages and drive. You think you can, but you can’t. I observe this fact daily. Please don’t try.
  • If traffic is bumper-to-bumper, please don’t leave fifty car lengths in front of you. True, we won’t really get to our destination any faster, but it drives people insane when you do that. Why do you do that, anyway?
  • If you come around the corner and it’s sunny, slamming on your brakes is about the worst possible thing you could do. I have an always-dirty, scratched-up windshield and I can see okay with the sun shining right on my windshield. Who are the people who are completely blinded and instinctively slam on their brakes? And do they realize that the people behind them are probably similarly blinded, and thus almost guaranteed to plow into them?

These really aren’t that many rules, and they’re self-evident to 99% of drivers. But there’s that 1% that clearly slept through driver’s ed.

Questionable Inbox

I’ve used GMail for my primary e-mail account for a few years now. A handful of ttwagner.com and n1zyy.com mailboxes still forward to a real mailbox. A handful of oft-spammed addresses need to exist, though, so they collect mail. My current setup is geared more towards collecting spam samples than on excellent filtering, so plenty of junk slips through.

Here’s what my Inbox looks like:

title=”Questionable Inbox by n1zyy, on Flickr”>Questionable Inbox

Twitter, Eons, and Facebook are real. But I don’t have accounts at any of those banks, and am pretty sure that I didn’t horribly screw up my taxes.

Edit: After neutering the URLs in the links (to not contain unique identifiers, so they couldn’t use it to confirm my e-mail), I was seriously disappointed. Of the ones I’ve checked, Firefox has blocked them all so far, and, if I tell it to view the site despite the warning, the site doesn’t exist, and whois records seem to indicate that many domains have been suspended. Kind of hard to figure out what they’re trying to con me into doing. 🙁

Why you should use a CMS

I’ve designed a handful of small, static sites in my time. Over time, I’ve come to the conclusion that a CMS is mandatory if you want to keep your sanity.

CMSs seem like they’re meant for big sites, and certainly feel like they’re overkill on a small site. There are probably lots of features that clutter the interface when trying to use a CMS on a site with just a few pages. So why bother?

For one simple reason: a CMS makes it easy to divorce content from your layout. CSS fanatics might interject here saying that this is what CSS does, but it’s not the same. Do you have an h1 with your company name across the top of every page? A copyright footer? A navigation bar with links? That’s HTML, not CSS. So you add a new page, and then groan as you go about copying-and-pasting the new navigation bar changes into each of your existing pages. You inevitably mess up and paste it in the wrong place on one, screwing up the formatting of the whole page. Or you miss a page and soon your site starts to look totally different depending on what page you view. With a CMS, you update the navigation bar partial and the change applies site-wide.

As an extension of the same thing, divorcing layout from content means that, when you decide to add a page, you just create content. You don’t care about trying to make sure the background is the same as other pages, or that you remember to include all the right CSS files. You just write out the text that should be on the page and the rest happens automatically.

I’m working on porting a static-HTML site I host over to Radiant CMS. It’s not quite my dream CMS, but it’s small, easy, and it’s fast. That’s because it addresses the one pet peeve I have with most CMSs: they turn requests for mostly-static pages into dynamic pages that are database-heavy, sometimes reducing your maximum throughput from a few thousand pages a second to a few dozen a second. Radiant, though, caches the generated page and serves it as straight HTML for a bit, meaning that if you’re hit with a lot of traffic, your site won’t come to a grinding halt.

Incidentally, I see WordPress being used as a CMS pretty often. It seems like it could be used to that end pretty well.

One Hundred Paper Cuts

I just saw a reference to Ubuntu’s One Hundred Paper Cuts initiative. It’s basically a round-up of 100 minor but irritating bugs and oddities, with a goal to fix them for the next release. I must confess, I love this idea. It’s quite common to get bogged down in the big tasks and churn through them, while the little knock-off tasks pile up. And it matches up nicely with the “mini-sprint” concept we have at work, where we periodically identify a thematic group of long-standing, quick-fix bugs and spend a day knocking them down, often closing 100+ tickets in a day. “100 Papercuts” seems like a neat trick to keep in the back of your mind next time you’re looking to mix things up a bit and get a lot done.