By Nathan L. Walls

  • .
  • Encased/Raleigh
  • .
  • Completed Snow Angel/Raleigh

Articles tagged “software”

Immature optimization

My wife and decided on dinner out Tuesday night. We picked Olive Garden.

It’s an easy option to nitpick. It’s a chain. It isn’t authentic Italian. The portions are ginormous. The pasta’s overcooked. All true. We went anyway because we typically enjoy the heck out of the salad and salty breadsticks.

Now, we’re both aware of the chain’s ordinary course of business, but in many restaurants, minor customizations to the menu aren’t problematic. So, we ordered two entrees. Capellini pomodoro for me, eggplant parmesan for Robin. Knowing what we would otherwise get, we specified al dente. Our server confirmed that as she put the orders into the system.

When the plates arrived roughly 15 minutes after our order was put in, it was evident by sight that the pasta was overcooked, entirely contrary to what we and our server understood we wanted.

How did this happen?

When we’ve gone to Olive Garden before and I’ve made a point of asking for al dente, the response I got from the server was effectively, “What’s that?” So, when my order arrived overcooked, I assumed the server didn’t relay my request to the kitchen. This time was entirely different. Our server made the specific point of confirming detail — acceptance criteria, if you will — as she put the order in.

My wife and I began speculation about why. We didn’t get very far when our server returned a couple of minutes later and asked if the pasta was correct. We both said no. That’s when we learned from our server that Olive Garden precooks pasta in the morning as part of the preparation process. When a dish is ordered, the pasta is warmed up for a minute or two in hot water.

We stopped. We both understand that running a restaurant means preparing the kitchen before opening. My expectation of early preparation is getting sauces made, vegetables cleaned and broken down, cooking stations prepped for use. I could understand making the lasagna early, then finishing in the oven when ordered. But precooking all of the pasta? Unbelievable. We were told it was in the interest of time. The kitchen is incredibly busy.

Here’s what I understand about pasta. It’s best fresh, but good pasta from dried is very doable. It’s best served with some resistance in the noodle, that’s the “to the tooth” of al dente. You can keep a boiling pot of water going in the kitchen and drop pasta a few minutes before the order needs to go into the window for service. The water’s boiling, seasoned and ready and you can keep using that boiling pot of water all night. The actual noodle cooking doesn’t take that long. What’s key is knowing when to pull it.

John Siracusa, best known for exceptionally comprehensive reviews of Mac OS X releases on Ars Technica, wrote the following about cooking pasta:

As you gain experience, you’ll be able to tell when pasta is ready by “feel” (with a pair of tongs or a stirring spoon). But the old fashioned way is still the most reliable: taste a piece. Drop the pasta in the boiling water (see the next section for more on that), set a timer for 1-2 minutes less than the time on the box of your trusted dried pasta brand, and start tasting when it goes off.

There’s an old saying about cooking eggs: done in the pan, overdone on the plate. The same goes for pasta. It will continue to cook after you remove it from the pot, and even more so when you put it directly into another hot pan or combine it with other hot, moist ingredients.

Even setting aside the fact that, in the usual course of business, Olive Garden intentionally overcooks pasta, cooking a batch to customer taste shouldn’t wreck the kitchen’s timing. Might it take longer to order a fresh batch of pasta? With thinner pastas like the capellini I ordered, they’re probably doubling the time they need to cook the dish by handling it twice. Two minutes in water might be over doing it. Capellini pomodoro is dead easy to make.

Strictly for sake of argument in this paragraph alone, let’s accept precooking pasta as beneficial to the business overall. Is it then unreasonable to expect the kitchen to set-up a pot to boil water to accomodate variance? No. We’ve already established they already have water boiling to reheat previously cooked pasta.

Restaurants can’t offer every variation of ingredients and cuisine. You’re unlikely to get grilled cheese at a teriyaki house. Software also can’t be all things to all people. At the same time, a smart business understands and embraces adaptation to meet customer needs. Restaurants handle this frequently to work with dietary restriction, food allergies or, as offered at Olive Garden, cooking a steak to order off of a standard of medium.

The desire to optimize is strong. Businesses have it with operating process. Chipotle precooks some of their meat in a central commissary, then ships it. Chain fast casual restaurants have plate plans, showing how every dish should be assembled at every restaurant, every time. Similarly software engineering focuses on optimizing process and development through use of automation, frameworks, higher-level languages and so on.

Just as there are known optimizations and patterns, there are also antipatterns, such as premature optimization. Premature optimization is a potential fit for my Olive Garden experience. But, what slays me isn’t precooking the pasta. It’s the fact that it somehow precluded me from getting what I asked for, even after it was implied I could have it. Smart, mature businesses don’t screw that up.

Don’t “save time” to deliver the exact wrong thing.

Lonely coding

Marco Arment created Instapaper, one of my absolute favorite ways to cache and read links I just don’t have time to read right now. He was very recently interviewed by Bridging the Nerd Gap, and was talking about his set-up, coffee, editors and other geek bits. There’s much to respect there.

Then, when asked his hardest to replace tool, he names PHP. I know good, valuable PHP can be written. Instapaper is written in PHP. Flickr is, too. I’m not so much interested in his choice of language, but his rationale at using it:

Most people judge PHP on bad tutorial code they saw ten years ago. But it’s a very capable, advanced language that supports many modern programming amenities

Very true, and I’ve been guilty.

But then, he outlines what he doesn’t like:

… Its method names, parameter orders, and general styles are inconsistent. Its core designers and Zend are all over the place and often make decisions that I strongly disagree with. It doesn’t have any practical support for parallelism. And nearly every third-party module or library I’ve ever used has been terrible.

Coding professionally in PHP is lonely. While I know this isn’t the case, it always feels like we’re the only ones using it at this scale, because we hit so many bugs in critical modules …

I feel a strong aversion to that lonely feeling as a developer. That’s one reason why I’ve grown more attached to Ruby and moved away from Perl as my preferred language in recent years. It isn’t the community around the language. I’m certain PHP has a sizable community. Instead, there’s something else – are the developers I want to learn from where I am? I know there are benefits to being a great teacher, so even being the smartest guy in the room doesn’t have to be all bad. But I don’t see any benefit in being a programming monk.

Further, I’d find it very frustrating as a developer if I felt the language maintainers and I were working at cross-purposes. And to not have great third-party libraries? I’ve run into my share of RubyGem and CPAN crap, but there’s always been a number of great things that provide much better solutions than I could make (or, given my interests, would care to make). This all sounds like this frustrates Arment as well, but for the life of me, I couldn’t see myself continuing to hold on to the tool if all this were true. I’m fascinated Arment can.

Links for July 15, 2010

Why governing Americans is so hard

Howard Gleckman in the Christian Science Monitor:

The conventional wisdom is that Americans are fed up with their government. But our demands on policymakers are so inconsistent and irrational that we make governing nearly impossible. We hate big deficits, but oppose the actual tax increases or spending cuts that we need to dam the flood of the red ink. We are furious that government passed an $800 billion stimulus last year, but feel lawmakers are not doing enough to get the economy going. We want government to “do something” about the gulf oil spill but reject government interference in private business.

We are, collectively, four. We want what we want, and we want it now. And we want somebody else to pay for it.

Why your plane is always full

James Fallows:

… I got up before 5:30am today to get an 8:15am flight out of Dulles, only to find an email from the airline saying that the flight had been delayed to 10:45. The inbound flight – from Dubai! – is late, and there are no spare planes to go on to San Francisco. OK – gladder to know now than before leaving the house for the airport, though ideally it would have great to know last night. Nothing to be done. But it was a serendipitous intro to the very next item in the email inbox: a report on how substantially airline capacity continues to be cut. There just are fewer flights anywhere, and more of them are full, than in yesteryear.

Microsoft opens source code to Russian secret service

Tom Espiner, ZDNet UK:

Microsoft has signed a deal to open its Windows 7 source code up to the Russian intelligence services.

Russian publication Vedomosti reported on Wednesday that Microsoft had also given the Russian Federal Security Service (FSB) access to Microsoft Windows Server 2008 R2, Microsoft Office 2010 and Microsoft SQL Server source code, with hopes of improving Microsoft sales to the Russian state.

The agreement will allow state bodies to study the source code and develop cryptography for the Microsoft products through the Science-Technical Centre ‘Atlas’, a government body controlled by the Ministry of Communications and Press, according to Vedomosti.

(via Bruce Schneier)

iPhone OS 4.0 prediction recap

Yesterday, I posted thoughts on what Apple would announce at today’s iPhone 4.0 OS event. Today, Apple announced seven “tent-pole” features. There are 100 or so other features, so while I can say I hit on some things, I can’t say I hit or missed on others.

  • Multitasking. I was right on being able to background and that it would be limited to the iPhone 3GS (and I presume the iPad). I was very wrong on how it would be implemented. Apple’s solution looks elegant
  • Fast user switching. No info, but I doubt it for the initial 4.0 release.
  • A more mature mechanism for notifications. Notifications are part of the background piece, but it doesn’t appear to be what I thought it would.
  • New maps features Unknown.
  • Lock screen widgets. Based on the brief lock screen I saw, I’m calling this a miss.
  • Lock screen emergency number dial. As above, a miss.
  • Unified inbox for Mobile Mail. A hit
  • Email signature differentiated by account. Unknown.
  • Multiple Exchange-account support. A hit.
  • A better document management method. Unknown.
  • No wallpaper on the iPhone. Very wrong.
  • No (native) turn-by-turn navigation. Not seen, but since they demo’d TomTom, I’m going to guess Apple’s not pursuing this themselves.
  • No video-conferencing support. Unknown.

All in all, I’m pretty happy with what was announced and I’m looking forward to seeing the rest this summer.

What I hope to see in iPhone OS 4.0

I have no particular insight into the iPhone OS development. I don’t have sources. I’m not an iPhone developer. But, since I found myself thinking about it earlier, I came up with a few things I’m hoping Apple announces as part of iPhone OS 4.0. I’m not claiming any particular ease, but these are generally things I think could be implemented elegantly and straightforward for the vast majority of users.

  • Multitasking. If they stopped here and allowed me to background Pandora, I’d be happy. If I was drawing up the feature, I’d have people explicitly ask for certain apps to run in the background vs. everything automatically getting to run in the background. With limited memory on the iPhone, iPod Touch and iPad, users are going to have to specifically request a small subset of apps be able to run in the background. I can see this being limited to the iPhone 3GS and iPad since they have 256 mb of RAM.
  • Fast user switching. Or, some other method of allowing an iPad to be used by multiple people in a family and keep settings straight.
  • A more mature mechanism for notifications. As Fraser Speirs has requested, the ability to have a notification quiet period would be nice. There’s also room for having a way to review all notifications, particularly if you have several of them.
  • New maps features including cycling directions, terrain tiles and, for the iPad, street view.
  • Lock screen widgets. The iPad has the slideshow. I wonder if Apple might add the weather, the stocks widget or something similar.
  • Lock screen emergency number dial. There’s a number to call if your phone is found or you’ve been involved in some manner of accident.
  • Unified inbox for Mobile Mail.
  • Email signature differentiated by account. I’d like to keep the same signature for each domain I send from the same as my desktop. The iPad (as near as I can tell from the Mail guided tour) doesn’t offer this, but it would be a big step forward to thinking of it as a primary tool if it did.
  • Multiple Exchange-account support. Alternately, push support for Google apps like Mail and Calendar. Right now, the iPhone is limited to one Exchange account for email or calendars. If you have multiple GMail or Google calendar accounts, you only get push support for one (by way of the Exchange functionality).
  • A better document management method. Maybe it’s MobileMe, maybe it’s a Time Machine-like hands-off sync mechanism. Maybe iWork gets more robust. But somehow, someway, there’s something better than what John Gruber describes in his iPad review.

What I’m not expecting to see

  • Wallpaper on the iPhone. The app icons are too close together to really make out anything else.
  • Turn-by-turn navigation. I don’t have a great reason, I just don’t think it’s going to be there.
  • Video-conferencing support. I believe Apple’s thought this through and thinks the experience of holding a device in front of you for a video conference is going to suck.

← Previous