18
May

Seattle Public & Private School Resources

I’m giving a talk at Ignite Seattle 14 called How to Go to Kindergarten – it’s an introduction to the public and private school system in Seattle for parents (or parents-to-be) who are unfamiliar with the territory. I’ll link to the video once it’s online, but in the meantime, here are some resources for your research:

General

  • GreatSchools is a relatively independent source of student and parent reviews of public and private schools in the area. (Note that this search does not include Shoreline schools.) As always, community reviews can vary, and there’s definitely some astroturfing going on.

Public

  • Find your attendance area school. Here’s a fun fact: during the 2010-2011 application process, our assigned school changed two times. They’re more stable now.
  • School Reports shows the attendance area map and some school data for each school (these links seem to work randomly).
  • The Student Assignment Plan is a 35-page PDF that explains what I talked about for ~1min.
  • Advanced Learning explains the range of accelerated programs.
  • Save Seattle Schools is the leading blog for the Seattle public school system, with authors who are well-informed, generally thoughtful, and strongly opinionated, and commenters who pour out their thoughts and invective. If there’s a revolution, it will come from here. Greg Linden runs the Discuss APP blog, focused on Seattle’s program for kids in the 98th+ percentile: there are also thoughtful comment threads, which are occasionally pulled into posts.

Private

  • PNAIS is the governing body for independent (e.g. non-religious) private schools in the region, and has a canonical list of all accredited schools. (Again, don’t forget to include Shoreline.) There’s no similar body for all parochial schools, but the GreatSchools list seems quite comprehensive.
  • Here’s a spreadsheet for the Private School Cost Estimate I presented during the talk. Feel free to copy and modify. As I mention in the notes, there’s a very wide cost range, especially among parochial schools.

A final note: I’d love any feedback on this talk. I tried to focus on the importance of thinking about the opportunities of school selection and taking charge of the process, plus talking a bit about the foibles of each. I attempted to avoid advocating for any particular path, but I might well have failed, and I know how emotionally charged this topic can be. Feel free to email me your thoughts: scottru at gmail. Thanks!

23
Jul

Lazy Testing your URLs

So I have a Rails app that’s broad but not very deep: there are a lot of different types of URLs and thousands of pages, generated dynamically or built through a CMS. No one page is that complicated, but there’s a fair amount of shared code and thus some tentacles throughout. Yes, I should have written behavior-level and unit-level tests from the beginning, but I didn’t, don’t judge me.

Anyway, after I broke the site yet again, I realized what I really wanted was a post-release test suite – I wanted to test a whole bunch of pages in production and make sure they’re still rendering.

Stealing from the Net::HTTP canonical examples, then, I wrote a standalone script:

require ‘net/http’

URIs = ['http://example.com/', 'http://example.com/page/2']

puts “Running URL Test Suite…”
URIs.each do |uri|
  url = URI.parse(uri)
  req = Net::HTTP::Get.new(url.path)
  res = Net::HTTP.start(url.host, url.port) { |http| http.request(req) }
  unless res.code == ’200′
    puts “ERROR: #{uri} #{res.code}”
  end
end
puts “Test Suite Complete!”

Then, since I deploy directly with git, I added a call to this script in my post-receive hook. As long as I watch the deployment (which I do anyway), I’ll see if there’s a problem and fix it immediately. (I can handle a few minutes of downtime or just roll back.)

There are obvious improvements to this (like not storing the URLs in the file), and this doesn’t handle redirect, workflow, or authentication scenarios, but it’s a perfectly acceptable 99% case for a content site.

Note that if you are doing Rails development and you’ve built a custom 404 page, you’ll want to make sure that you’re actually returning a 404 status code, or this won’t catch errors: you can test your status codes, and if you aren’t, you can add code in your application controller to do the right thing.

15
Jul

The reason to upgrade to iOS 4.0.1

There’s a great reason for iPhone users to upgrade to the new iOS 4.0.1, and it’s not the changes to the signal strength indicators: it’s the reversion of the behavior of the wake/sleep button.

There are two principal complaints users are making about the iPhone 4: the loss of signal when you bridge the antenna with your salt-water hands, and the oversensitivity of the proximity sensor (aka the “I keep hanging up on you with my cheek” problem). I’ve found the antenna issue to match the conventional wisdom, and have had far fewer dropped calls on the iPhone 4 than on any previous model. The proximity sensor, though, has been a real problem, as I’ve been hanging up, accidentally muting calls, and starting FaceTime calls – no matter how much I think I’m holding the handset away from my cheek at a weird angle.

Of course, I used to press buttons accidentally on previous versions, especially when I would put the phone in my pocket and wear my handset. In every version of the iPhone and iOS before 4, this was easy to avoid: pressing the wake/sleep button during a call would lock the phone. So I’d press the button as I put the phone in my pocket.

In iOS 4.0, that behavior changed: pressing the wake/sleep button during a call would hang up the call. So for the first week, I’d try to avoid the accidental hangup problem by pressing the wake/sleep button, and so then I’d hang up on them anyway. This was a clear change in behavior that I haven’t seen documented anywhere. (I don’t know if it behaved the same way on the 3G or 3GS.)

In iOS 4.0.1, the behavior is reverted – pressing wake/sleep locks the phone again. So now, if you make “always lock when you start the call” part of your muscle memory, you won’t hang up on people quite as often. And if that isn’t what you want from your phone, what is?

UPDATE: It turns out that I was entirely wrong – Elan Lee had a larger array of phones to test than I did, and he determined that the behavior didn’t actually change – it’s just that the wake/sleep button only locks the phone when your headset is in. Since I’d never had the cheek problem before, I wasn’t locking the phone when I held it to my ear – that hangs up in earlier models as well.

I did hear from a few other folks thanking me for telling them about the locking-with-headset trick, though, so my doofusness wasn’t entirely useless.

15
Mar

Sometimes the 25th time is the charm

I have plenty of evidence that I’m not that bright, and so I’ve worshipped at the altar of A/B and multivariate testing to validate my wild guesses since my days at Amazon. (Interestingly, when you Google for “weblab Amazon”, all you get is this old job description. I may have just revealed a huge secret.)

So I have a project where we tossed up some best-guess UI around the project, all focused on driving conversions to a third-party form. Over the last 16 months, we’ve run 24 different tests, each with 1-5 different treatments of one of the five conversion paths.

Not a single test produced a meaningful improvement. (I noted this a few months ago on Scott Porad’s blog post about redesign testing.) Our best-guess UI has either outperformed or shown no statistical difference. That’s kind of like a review at work where your manager has only positive things to say: it sounds nice, but you wanted something meatier than that.

Then I got a simple idea based on conversion data from a smaller site, tossed up a new test, and in <1 day, voila: a new winner with massive improvement – with one test the upper limit of what I believed was possible was surpassed.

I can't tell you what the name of the test was or you could get all my money

(BTW, that test on the bottom? That’s the one I thought was going to win. Lesson learned: Always bet on the big button.)

So even if that testing regimen isn’t showing anything – you don’t feel like you have enough traffic, nothing is changing, it doesn’t seem worth the pain – keep it up: the 25th time might be the charm for you, too.

19
Jun

O’Reilly’s Velocity Conference & Spike Night

FYI, I just guest-posted on O’Reilly’s Radar Blog about an event I’m running at this year’s Velocity Web Operations & Performance conference. It’s called Spike Night, and it’s a real-world look at managing operational spikes in two interesting, high-scale businesses (MySpace and MLB.com).

It wasn’t the easiest thing to bring together – not least because I have hardly had time to think about extracurricular activities, but also because it seems scary to potential participants, and scary means lots of approvals, etc. – but I’m excited and it should be good fun. See you in San Jose!

17
Jun

Your iPhone flies (to you) for 46 cents

It also bends time and space

It also bends time and space

On Friday, June 19, the iPhone 3G S launches, and for the first time, Apple has made launch day home delivery available. This has made some things clear – for example, we know that phones are shipping from China to Alaska all on the same day. I was curious about the magnitude of this delivery – size, cost, etc. Here are some estimates:

Total Sales

Apple sold at least 1 million 3G’s in the first weekend. It’s reasonable to assume that the number will be about the same – ease of home delivery counterbalancing the extra few days. So we assume 1,000,000 phones shipping from China.

Getting to the US

We know that the phones are shipping from Hong Kong to Anchorage via UPS. Unless UPS has some undiscovered stealth supertechnology, it’s by plane. Let’s assume they’re all shipping at the same time (though that doesn’t matter, it’s more interesting).

I don’t know the whole UPS fleet, but they bought 27 Boeing 767-300ER’s in 2007, so we’ll use those for our size analysis.

How many planes?

The limiting factor could be volume or could be weight.

Volume

The 767-300ER holds 30 LD2s. Now, the phones could be shipping in of three forms:

  • raw phones in trays to be Apple-packaged and ship-boxed in Alaska or another port.
  • Already-assembled Apple boxes, still not packaged for ship.
  • Fully shippable boxes (for home delivery)

Obviously the tradeoff in each case is volume you can ship v. assembly time on landing. The first seems really unlikely – there’s no way accessory boxing is happening across the country in ports in such a tight timespan. I would assume the second case, because ship boxing is a partly-automatable process and because the volume savings are so significant.

We don’t know the size of the new 3G S box, but the 3G box was 2.25″ x 3.5″ x 5.75″, so let’s assume the same dimensions. Each LD2 is 61.5″ x 60.4″ x 64″ (in their more generous size).

As I haven’t yet solved the packing problem, let’s just assume 80% utilization of the full volume. (That’s probably generous with pallets and such.)

181683 in2(LD2 volume) / 45.25 in2 (3G volume) * .8 = 4200 boxes

So 30 DL2s = 126,000 boxes: thus it takes 8 fully-loaded cargo planes to bring 1,000,000 iPhones to the US.

Weight

Weight’s not a limiting factor. UPS says my package is 0.5kg, and the 767-300ER can carry 96,870 kgs – at 80% utilization that’s 155,000 boxes/plane.

Estimate, then, is 8 cargo planes to get the phones to the US. I like to think of them in Top Gun formation.

Cost

The 767-300ER uses 3.47gal/mi: the air distance is ~5100 miles, so each plane uses 17,700 gallons: the estimated price today for jet fuel is $1.80/gallon (nice price if you can get it – assumes bulk discounts), so that’s $32,000 for gas – add another 20% for overhead and you have ~$38,000/flight to Anchorage. Anchorage to Miami is another 4000 miles: assume an average of 2000 miles for in-US travel (and higher overhead) and you add another $20,000/flight’s worth of travel (obviously spread across many other planes, many with smaller cargo holds). That’s $464,000 in flight costs, or $0.46/phone. (I haven’t factored in packaging and local delivery costs – either from Shenzhen to Hong Kong [23 miles] or from the airport to your home or store – which aren’t insignificant.)

It’s also ~57,000 lbs of CO2, but, y’know, whatever.

Final Words

Only $500K to get the phones to local ports in the US? Really? I’m surprised it’s so low, but math is math (though my packing assumption could be flawed).

If you add the UPS packaging in China or HK, you probably add 3-4X the planes and the cost, so there’s no way that’s happening. Anchorage was probably quite busy today.

08
Dec

Software Management: Avoiding Boss Bugs

So you’re a manager of a team, and you’re building a cool customer experience. You’ve got developers, you’ve got testers, you’re running around balancing schedules and worrying about processes and getting the legal team on board and dealing with deployment issues and watching the bug count and haranguing the team to fix one more thing and then you say it’s done and you ship.

And then you get the mail, and you know what it’s going to say as soon as you see

From:  Boss, Your
Subject: Re: Project Rubik Launched Today!

Sure enough, you open the mail, and Ms. Boss (or Ms. Boss’s Boss) has found a bug. And it’s a stupid bug. It’s a spelling error on the second page, or it’s I clicked the link on the bottom and nothing happened, or it’s I tried in IE6 on my home machine and all the words are jumbled, or it’s I typed “mass” in the body and it was rejected for profanity. And you see this bug, and all you think is I should have caught this, Ms. Boss must think my team has no quality control, and damn it, that’s all anyone is going to remember. Congrats – you’ve snatched defeat from the jaws of victory.

Has this happened to you? It’s happened to me. It probably happened on half of the customer-facing features I launched at Amazon, where Boss was played by my actual boss, or my SVP, or Jeff Bezos, each one of whom was a passionate advocate for the customer’s experience and was going to click through the moment we shipped to take a real look, no matter how many times she had seen it during the planning and testing phases. The WhitePages CEO had the same skills and obsessions. Aaaaggghhh – we should have done better.

The good part is that you really can avoid Boss Bugs, and you’ll be happier if you do so. There are simple and complex things you can do, and I try now to do all of them, and it mostly seems to work.

  • Take a break, then be a user. The hard part is the precedent – take a break. This doesn’t mean just go get coffee – you need to find a way to clear your head of all of the things that you are thinking about related to the project. Do it first thing in the morning, or right after dinner, or after a bike ride. But make yourself do it – go through the whole process. Do it slowly, read the screens, take your time. Your users will not be as fast as you are.
  • Demo to someone you know. Show off your work to someone you trust, in the software business or not – really use the features and look at the pages while you’re doing it. Ask them to drive, too.Both of these first two techniques will also help you find things that you need to check “later” or have someone look at, so have a pen handy.
  • Do a real bug bash, and be part of it. Yes, bug bashes are a pain to schedule, but I’ve never been unhappy that I did it once it was done, and they’re always useful. Make someone else deal with coordination – you should put on your headphones and do your own bash. I try to “win” (find the most bugs) and encourage others to do the same. Great managers are great bug finders. And if you find a lot of bugs? You’re further away than you thought. (Good to know now.)
     
  • Set your expectations with your QA team clearly. It doesn’t matter if they work for you or for someone else – your QA team is the way you make sure your product is good enough to ship. So make sure they understand what your quality bar is, and that even if you have good specs, you need them to help make sure that the product is great, not just that it matches the specs. The worst product I almost shipped came about because I didn’t make sure that my QA team knew that unfinished sentences on web pages were ship-stoppers, and that there was nobody else who was going to find them. Quality isn’t just that the API or Selenium tests pass – it’s that the product looks and feels right, and if that’s subjective, there you go – if it was easy, we wouldn’t be paid for it.

On balance, having a boss who cares about the customer experience is like having a boss who’s technically competent – it’s great having someone who gets it in your chain. Pretend to be them and you will deliver better software, guaranteed.

If you have other tips to suggest, by all means, please add them to the comments.

(BTW, Boss Bugs don’t just apply to software – they also apply to processes and planning. I had a Boss Bug in my own planning process recently, and my Boss caught it – good for him and good for the project.)

04
Dec

Amazon’s iPhone mobile app and privacy

The new Amazon mobile app for the iPhone is excellent – well-designed, a great mix of iPhone and Amazon visuals, and easy to use. Despite the lack of Gold Box integration, I’ll use it all the time.

And the idea of Amazon Remembers – a place for you to take photos and have them stored online – that’s neat, though obviously overlapping with dozens of other photo storage services. It also offers product identification – take a picture of something and have people tell you what it is.

Remembers, though, breaks the social contract: it makes pictures that reasonable users might assume will be private, and makes them public.

As has been documented online, when you take a picture and upload it to Amazon Remembers, it’s sent out to Mechanical Turk users for product identification. That makes sense – product identification is hard and mturk is great for these kinds of problems – except that

  1. People might use Amazon Remembers for non-product images. The marketing materials talk about how you _can_ use it for product images, but not that it’s the only use of the service. Here’s the first page of the Remembers tab in the app:

    Amazon Remembers iPhone image, first screen 

    And here’s the pre-picture screen:

    Amazon Remembers, Screen 2

    No content on either screen assumes that it must be a product, or that other people besides you will see it.

    For the user who does click “What happens to my photos?”, you get partial information:

    Amazon Remembers, Screen 3
    This does say that people look at it, but it’s not clear who those people are.

  2. Every picture is then visible to strangers via Mechanical Turk. There’s no obvious pre-screening of images to make sure they’re acceptable. Keep in mind that Mechanical Turk respondents are not Amazon employees – they simply can’t be expected to keep private images private and not to violate people’s privacy. To test this, I took an image of a young-looking, non-recognizable Dakota Fanning and added a fake name and address to it: I then took a photo of that image and added it to Amazon Remembers. Here’s the image:


    And here’s the Mechanical Turk hit that appeared <15 seconds after the image was sent up:
    Amazon Mechanical Turk for Amazon Remembers
    So to review: I posted a picture of a minor with a name and an address, and that picture showed up on Mechanical Turk, in front of strangers, immediately. (To their credit, the Turkers who saw this image did recognize it as Dakota Fanning, and sent me to this head shot.)

The violation is that people will assume that memories are private. This isn’t the same thing as Amazon’s Customer Images, for example, where customers know when they’re using the feature that the images show up on the product page. 

The principle is pretty simple: if you’re going to take something that people might assume to be private and make it public, you have to be explicit about it. This approach is either poorly-thought-through or sneaky, but either way, it’s a violation of customer’s trust in Amazon. This problem could be seriously reduced with much clearer messaging, or eliminated with employee human review (which almost certainly won’t happen). 

I don’t know how large this problem is – I’ve looked at ~30 submitted images, and only one was an obviously personal image, and had no (obvious) identifying info (though there could be data encoded in the image). But the people picking up the app now are likely early adopters, and are perhaps more likely to be well-informed or to read the fine print. 

(Disclosure: I worked at Amazon for four years, working on customer-facing features that dealt with similar issues.)

20
Oct

Those who can’t do, consult

So since leaving WhitePages.com a few months ago, I’ve talked to literally hundreds of people – bigcos, smallcos, nocos – searching for what I wanted to do next. Sometimes these searches can be very directed – when I went to WhitePages, I was aiming for something specific (executive leadership at a mid-sized company with a strong business). This search has been a bit less focused – more of a What Should I Do With My Life(TM) sort of search – and so it’s taken a good deal longer. (Also, global financial crisis, maybe you’ve heard of it.)

The process has of course been interesting, but after a planning conference call for Velocity 2009 last week where “for example, if you’re unemployed like Scott,…” was (kindly) used three times, I decided it was time to get a damned job.

But I didn’t really want a “job” – in particular, I didn’t want a job where I was unambiguously working for someone else, and I didn’t want a career ladder that I felt obligated to climb (one of my favorite things about being at WhitePages). I’ll write more about this, and the job search, in a post in the coming days, including some tips.

So after coffee with Matt K (where he really pushed me on what I wanted to do), some well-placed phone calls, and a sign or two, I’ve decided to dust off the occasional-sometimes-consulting business and make it my real business.

I have a first contract (which I’ll write more about in a few weeks) that can feed my family and a bit more. I’m looking for one-two smaller advisory-type contracts. (<weak_pitch> See “contact me” on the right if you’re looking for some help on technology/program management/product strategy, app prototyping, lead generation, etc.</weak_pitch>) I’m also taking what I’ve done for free for years – pairing up great jobs and great people – and turning that into a sometimes-for-pay-service.

I was talking to Todd Sawicki about caused him to stop consulting and go full-time with Lookery. He said that he went full-time when he realized that he wanted to join something more permanently and be more part of something. I liked that answer, because it was as natural as the decision to _not_ do that – it makes you think about moving between consulting and full-time employment as more of a continuum and less of a straight path.

So, I’m on “my own” (still working for people, but in different ways) for a while – not the least-scary decision in the world, but one of the easiest, once I finally saw it clearly.

I still have a personal project or two to improve, so those will be out soon. In the meantime – on on!

30
Sep

Programming: write it down (again)

Last day of last month, I talked about the importance of writing down your questions when you’re programming. Last day of this month, similar post – now, it’s about writing down your algorithms when you’re programming.

Since college (when I would “program” by the light of a desk lamp at the top of a bunk bed – pre-laptop), whenever I have a reasonably complex piece of logic to work through, I always start with a piece of paper and pencil, and I sketch out the entire algorithm in pseudo-pseudocode – basic structures, algorithms, control flow. (It’s like being at the board for an interview, but nobody’s watching.)

Why do this? In order of importance:

  • You can focus on the problem. When you’re writing real code, you’re focusing on a lot of things – the logic, but also the syntax and markup, the object-method structures, the tabs, the comments, the format. Each of those things takes some thought, and each moment causes a mental task switch from solving the real problem. (Maybe you’re both so talented and so experienced in a particular language and IDE that none of those things actually require any thought – you’re as fluent as you are in your native tongue. But I’m not, and you’re probably not either.)
  • It’s much faster. You might type faster than you write when taking notes, but nothing’s faster than writing fake code on a piece of paper, drawing arrows and braces to mark sections, using carets to insert content, etc. You aren’t worrying about any of the things above: you will find the problems in your thinking much, much more quickly.
  • You can do it anywhere. On the bus, by the bed lamp, when you’re pretending to make art with your three-year-old. You can think about the algorithm in between things and record your notes, rather than waiting for the moment you’re sitting down. Paper & pen are still more accessible and portable than the MacBook Pro.

Highly recommended approach. Let me know if this or similar things work for you!





Twitter Updates

Recent Comments