shahine.com/omar/

homepage | Send mail to the author(s) contact

yet another Microsoft blogger

# Thursday, June 21, 2007

It's June, and no AMT Tax Relief

If you aren't factoring the AMT into your taxes, and you:

  • have a mortgage
  • live in a state with income tax
  • have high property taxes

then get ready to pay the Government a few thousand dollars on April 15th 2008. As of now, there is no AMT tax relief in site for tax year 2007.

To come up with a realistic picture of my tax liability here is what I do. I factor my AGI (Adjusted Gross Income) by not including state income and property taxes into my AGI. In other words, the only deductions that I factor are:

  • Mortgage Interest
  • Charitable Donations
  • Personal Exemptions for myself, my wife, my child

And that's it. By doing this it offers me a simple way to calculate my paycheck withholding without using an AMT calculator.

BTW, I have paid the AMT tax for the past 3 years. However, in those years congress passed temporary relief that moved the floor of the AMT to adjust for inflation since the AMT rules originally went into effect. This year the AMT floor is the same as it was in 1969.

Hopefully something will be done about the AMT this year, but I would not bet on it as this revenue is factored into our budget, and offering relief will only serve to broaden the gap between our spending and our tax revenue.

Posted Thursday, June 21, 2007    Permalink    Comments [2]  View blog reactions

 

# Sunday, June 17, 2007

First Father's Day

Kinda cool to now experience a holiday thanks to this one:

image

Little Sarah is now 7 months old, and doing really well. She is quite a joy! 

Posted Sunday, June 17, 2007    Permalink    Comments [2]  View blog reactions

 

# Wednesday, June 13, 2007

Designing for Services Dependencies

Most folks that have never worked on services probably think that services are powered by a bunch of boxes sitting in a data center. While that might be true, it's often not apparent just how dependencies might be treated when designing for services.

This post should be titled "Assume your dependency will fail, so design for that reality". A lot of services talk about the mythical 5 nines (99.999% uptime), I don't think that's possible with large Internet scale services. Many services try and achieve 3 nines (99.9% uptime). Here is a handy table which tells you how much down time you can expect with different reliability percentages.

Reliability Downtime / year
99.999% 5 min
99.99% 53 min
99.9% 9 hours
99.8% 18 hours

So, if you want your service to have 3 nine's then you can afford 9 hours of downtime per year. That means that the service is on its ass and no one can use it.

Noticed that I qualified that statement. What does downtime actually mean?

Well, first step is to take a look at your application. Can you classify your dependencies? Dependencies for Hotmail might look like this:

  1. Login
  2. Address Book
  3. Mail Store
  4. external script / static content dependencies
  5. ...

This is of course a simplistic list. There could be dozens of dependencies. Let's look at a few.

Login

If Passport is down, we are on our ass. Why? Well no one can get credentials, so you can't get your mail. If Passport is down, so are we. Dependency mitigation? Pray.

Address Book

In Windows Live, the Address Book is a shared service that Hotmail, Messenger and Spaces all use. This is a critical part of our infrastructure, like Passport, so it poses an interesting challenge.

If the Address Book goes down what happens? Well you can still login, get your inbox, read your mail, reply to your mail and so on. However, you can't compose mail to people in your address book, you can't edit or view any contacts, and maybe a few other things don't work.

Well, how does your code handle this?

  1. Do you fall on your ass?
  2. Do you throw exceptions?
  3. Do you swallow the errors and give the user some basic experience?
  4. Do you send thousands of requests to the service that is down, creating a bottleneck on the network, consuming TCP/IP, making the problem worse (if you have thousands of servers all trying to talk to a service that is offline, that's bad for them when they try and get back online).
  5. Do you queue requests?
  6. Does your operations team have the ability to block any connections to the service that is down?
  7. Do you even have visibility into this or do you require customers to call or email you to tell you that the address book is broken?
  8. Is this a synchronous request? If so is it a blocking call and how long before you timeout?

I could probably come up with more questions, but you get the idea.

In our world, we do not have "planned downtime" or "planned maintenance". Our service is designed to run 24 x 7 w/o any hardware being taken out of service for upgrades or whatnot. That means we have to handle every kind of failure we can... this includes networking gear dying (do you have hot spares?), hard drives failing, machines melting, power going out, fragmented heap space (memory allocation issues), other services impacting us, edge caching failing and so on.

The Food Chain

It's useful to know where you are in the food chain. In Windows Live, after Passport, Hotmail is a big dog. Meaning, other smaller services often come along and say things like "just call us on login" but they have no idea what they are asking for. In most cases, this is a guaranteed way to tip their server over on day one. Not many services are built to our scale, and it still amazes me how naive some people are about this. Adding some code to our login path is simply unacceptable if it degrades performance.

For some services you need to develop a hot cache of the data. Something like Address Book for example. In Hotmail we need the address book to do auto-complete, to see if a message is safe or unsafe (based on who is in your address book) and so on. It would be very expensive to build out an Address Book service that could handle all the real time requests of our service. So, we cache data to optimize the experience we can deliver to the user.

Architecture

This whole issue begs the question of what's your architecture? Why not just put everything on one box and have lots of those boxes. Can't do that at scale... why?

Different boxes should serve different purposes. This is to segment single points of failure but each application has different hardware needs. For example, boxes that store credentials should be in a secure cage. This is to prevent tampering.

Stateless Frontend machines should be separate from Statefull backend machines. Why? Frontend machines that are statefull can be taken out of service, can be overbuilt for capacity, can be cheaper machines with different memory and so on. Backend storage machines, which do represent a single point of failure, need to be running 24 x 7 and the system should ensure that there is some form of redundancy to prevent the user from not getting their data.

Multiple service consumption may require that boxes have ACLs open to different machines in different places using specific ports, protocols or access patterns. This requires some amount of segregation.

There is a fine line though between creating a million specialized services, and just the right number to keep your team and operations team sane.

Planning for new dependencies

I've talked a lot about big dependencies, but what happens when a new one comes along. Here is a typical scenario.

Brand New Feature X in Hotmail has a dependency on Team B to deliver. Team B says they will deliver on 6/1/2007. Ok, well our next release is shipping on 6/2/2007 (or some date in the future close to Team B's release date). What do you do about it?

Build Feature X assuming:

  1. Team B's stuff is there and working when they say it will.
  2. Team B can't say with 100% certainty they will hit their dates, place a mechanism so that you ship your code, but disable the feature some how.

I hope you picked #2. You see, there are two problems with #1. Team B can slip, which will then force you to slip. You want to be predictable and in control of your destiny right? Well assume Team B won't deliver on time. No offense to Team B, it's just business after all :-).

The other problem is that Team B could very well ship on time, but then their service will fall on its ass the following day because something they didn't anticipate happened.

When mitigating this situation you need to answer 1) how critical is this dependency to our application functionality and 2) where in the food chain are they? If the feature is something small, and the are low in the food chain, place a config that you can us to enable/disable the feature. If the feature is core to your experience then regardless of where they are in the food chain you need to mitigate this correctly.

You now solved the problem of how you can ship your feature without caring about Team B's ability to deliver. What happens after Team B delivers and Team B's service goes down or gets very very slow because they aren't built to scale? You don't want to give away time from your 9 hours right? Well, you handle that failure scenario as I mentioned above, protect the user from the other service, give your OPs team or monitoring tools visibility into the service as the failure starts to happen (so that preventative measures can be taken, like closing the doors on communication to that service) or monitor the situation to see if you can deal with the latency or # of failures while escalating to the other team.

You need to have real time monitoring in place to ensure that if something goes wrong appropriate action can be taken to prevent your service from doing something bad, or to prevent your server from falling over.

Remember, 9 hours in a year is not a lot of time.

Posted Thursday, June 14, 2007    Permalink    Comments [1]  View blog reactions

 

Most annoying Vista Feature: Replace Confirmations

In months of using Vista, I am generally very happy with the upgrade. There are dozens of features I have come to rely on, and a few that have just saved my ass a few times. However, there are things I do all the time, that are far worse on Vista.

Z-Order bug when copying files via FTP.

I copy files to my FTP server quite frequently. I like doing it from the shell cause it's fast and easy. However, whenever I try and replace a file that already exists I am greeted with this:

image

When what I want to see is this:

image

But this dialog is hiding behind the useless dialog saying it's calculating the time required to do something.

It doesn't stop there. Annoying issue #2.

Copying files locally or to a network share is annoying.

First thing is that I am greeted with this:

image

It seems that calculating time happens forever, while file copying just hangs out.

Then when you are replacing duplicate files you get this:

image

Holy Cow, hoe much information do I need to read here? And why are so many colors pictures and icons use? Compare this to XP where you have a dialog I don't even remember what it says, followed by some buttons I just know to click. The only improvement I can think of here is that you can check "Do this for next n conflicts" as opposed to just putting up a modal dialog each time.

I'd be happy if issue #1 is fixed in SP1, but issue #2, while annoying, I can live with.

Posted Thursday, June 14, 2007    Permalink    Comments [11]  View blog reactions

 

Welcome Outlook...

to the blogesphere

Posted Thursday, June 14, 2007    Permalink    Comments [0]  View blog reactions

 

# Tuesday, June 12, 2007

Art

One of the neat, subtle things about Microsoft is the Art Collection. On our SVC Campus they just completed a major rotation of artwork. Kinda sad as I grew to like some of the artwork, but now we have a bunch of new things to see and appreciate.

Not many companies have amazing art collections. While you do see a lot of posters on the walls of Microsoft, you also see a broad, diverse set of pictures, sculptures, paintings and so on. It's one of the nice things about Microsoft.

There is an article in CNN about the Microsoft Art Collection. In Silicon Valley the art is very well integrated into our cool building design. I love this quote in the article:

When asked why Microsoft collects art, Klein answered, "Because they can. And they should. They are involved in culture. Technology is culture. And the art informs the culture."

One of my favorite portraits that used to be on our campus is this picture by Wayne Thiebaud.

Theibaud

[via Adam Barr

Posted Wednesday, June 13, 2007    Permalink    Comments [1]  View blog reactions

 

Sansa Express

This is sort of a non-review I guess. I still get a subscription to PC Magazine and Maxum PC. Every so often there are useful tidbits in there. Well in the latest issue I read about the Sansa Express player from SanDisk. I was intrigued by it's cheap price ($60), 1GB of storage, built in USB Stick, OLED display and FM Tuner.

I have an iPod Shuffle, nano and 30GB Player. I wanted something as small as a shuffle but with a screen and FM Tuner. You see, I love the shuffle, but the problem with the shuffle is that if I load it up with a podcast or two, I can never get to it so I can play. Also, if I am randomly listening to music, I usually don't want the shuffle to select a podcast in the middle of my tunes.

Well, the Sansa Express is still in my car. I'm returning it today because in my infinite wisdom I realized something after I got home. All my music is in the AAC format right now. I also have all my music ripped as WMA Lossless on my Media Center, but I'm waay to lazy now to convert that all to a lower WMA bitrate. The iPod can play AAC and MP3 but not WMA. The Zune can play AAC, MP3, and WMA. The Sansa only WMA and MP3.

At this point I can't deal with having another copy of my music library floating around. It means that if I buy a new music CD I will have to rip it 3 times. Ugh.

Anyway, the Sansa Express seems like a great little player. Of course it could suffer from horrible usability like every other player out there (minus iPod and Zune). Anyway, back to Fry's it goes. I hope there is a tiny Zune player in the works, or a shuffle with a display.

Posted Tuesday, June 12, 2007    Permalink    Comments [3]  View blog reactions

 

# Monday, June 11, 2007

Hotmail + Outlook = Sweet

At long last... experience Hotmail inside of Outlook.

What used to be a subscription only offering is now available to anyone that wants it. While Outlook used to have the ability to talk to Hotmail via DAV it was flaky and 2 years ago we no longer offered it to new users of the service.

Well the new Outlook Connector has a few notable features that you didn't get with the old DAV support:

  1. uses DeltaSync, a Microsoft developed HTTP based protocol that sync's data based on change sequence numbers. This means that the server is stateful about the client. Whenever the client connects to Hotmail, the server tells the clients of any changes that happened since the last time the client connected. This is super efficient and allows us to offer the service to many users at substantially lower overhead than stateless protocols. This is the same protocol utilized by Windows Live Mail. It's similar in nature to exchange Cached Mode or AirSync, the mobile sync stack used by Windows Mobile Devices.
  2. Sync of Address Book. Your Messenger/Hotmail contacts get stored in Outlook.
  3. Sync of Calendar (currently premium only)
  4. Sync of allow/block lists for safety/spam

I've been using the Outlook Connector for about 3 years now and it's one of the first things I install on a new machine. It lets me stay on top of my mail while at work.

Hope you enjoy rich client access to Windows Live Hotmail.

Oh, if Outlook isn't your cup of tea, you might try the new Windows Live Mail client download from http://get.live.com/betas. If you have ever used Outlook Express or Windows Mail, this is a great upgrade with a killer feature: Photo Mail.

This officially rounds out our mail story. You can now have access to:

  1. http://mail.live.com - web based email
  2. http://mobile.live.com - mobile web based email
  3. Windows Live Mail - free desktop client based email
  4. Outlook - desktop email
  5. Window Live for Windows Mobile - mobile email on your Windows Mobile Device (WM6)

End to end, I think that's pretty impressive.

Posted Tuesday, June 12, 2007    Permalink    Comments [23]  View blog reactions

 

OMG, Safari for Windows?

Now this is something I was never expecting... Apple has released Safari on Windows. That is a seriously bold move.

Are cross platform applications back in? This brings the major list of Apple Windows apps to:

  • iTunes
  • QuickTime
  • Safari
  • AirPort

Should we expect more? Aperture, iPhoto and iMovie would be welcome additions (in that order).

I wonder what Apple is up to? Is this a ploy to increase web compatibility of sites rendered in Safari? Is this a ploy to make the web look good on iPhone? Who benefits from this the most?

update: just finished playing with Safari. This is 100% a Mac program. There are no Windows Controls or anything in the app. In fact it looks like it's running on top of an emulation stack if you ask me. Does Apple have a Mac OS X Emulator for Windows? It looks like it... down to the Font Rendering.

Posted Monday, June 11, 2007    Permalink    Comments [7]  View blog reactions

 

# Saturday, June 09, 2007

Windows Live Writer beta 2 and dasBlog

image It's no secret that Windows Live Writer is simply the best blog authoring tool out there. What I love is how innovative that team is. Rather than being held hostage to the many blog APIs out there, they have defined awesome ways to provide extensibility and self description of blogging capabilities. From their support of RSD to the latest set of APIs, they keep pushing the envelope by keeping the product fresh and relevant to bloggers. Witness the fact that WordPress and Typepad both have support for this, as well as open source blogs like Subtext and dasBlog.

The best example of this is their recent API support that allows blogging engines like dasBlog to be much better integrated. Scott wrote about this on his blog, and I just updated my blog to take advantage of this. For any existing dasBlog users this is just a drop in upgrade.

Having said that there is one very important bug fix to the blog APIs in dasBlog to support the synchronization of posts to Live Writer. This will be in the upcoming 1.9 release.

BTW, my fav feature of WLW beta 2.... red squiglies. If your app ain't got background spell checking, then it's pretty useless to me. Why? Jeff Atwood says is best:

"People absolutely adore background spell checking. It's one of those rare "you'll get it from me when you pry it out of my dead, cold hands" features that users will switch applications over. Automatic background red-squiggly-underline spell checking in HTML forms is one of the marquee features of Firefox 2.0. In fact, it's feature number two on the feature page, right under tabbed browsing."

Posted Saturday, June 09, 2007    Permalink    Comments [4]  View blog reactions

 

# Thursday, June 07, 2007

Nice blog themes

image After going back to work from parental leave, I've had to carefully pick and chose the things I do that are not 1) work or 2) helping around the house or 3) taking care of a baby. Each have their ups and downs, but all three add up to 100% of my time.

It's been a lot more difficult than I thought. Many of my "side projects" or "hobbies" are progressing very slowly or not at all. However, now that Sarah is close to 7 months, and I'm getting a better handle on work, my energy levels are getting better. I don't feel the need to go to sleep at 9pm every night.

One side effect of this is that I was finally able to update my dasBlog theme. A while back I found a link to this amazing open source design site called Open Designs. I highly recommend them. My blog is now using the Ruby theme by Denise Mitchinson.

They have a lot of amazing stuff there.

Posted Friday, June 08, 2007    Permalink    Comments [3]  View blog reactions

 

How long should it take?

A lot of time around here I get asked, how long should something take. In other words, what are the thresholds at which you should be thinking about application performance (web and client) and how to appropriately notify the user.

The good news is that Jakob Nielsen has a pretty good rule of thumb that he published a while ago. I have found it works in most cases.

  • 0.1 second is about the limit for having the user feel that the system is reacting instantaneously, meaning that no special feedback is necessary except to display the result.
  • 1.0 second is about the limit for the user's flow of thought to stay uninterrupted, even though the user will notice the delay. Normally, no special feedback is necessary during delays of more than 0.1 but less than 1.0 second, but the user does lose the feeling of operating directly on the data.
  • 10 seconds is about the limit for keeping the user's attention focused on the dialogue. For longer delays, users will want to perform other tasks while waiting for the computer to finish, so they should be given feedback indicating when the computer expects to be done. Feedback during the delay is especially important if the response time is likely to be highly variable, since users will then not know what to expect.

A good way to think about this is, how long does something take before you hit Alt-Tab and do something else? I find this contributes to quite a bit of lost productivity as I start to fire off parallel multi tasking threads in my brain and then forget to finish doing the thing I started.

Or... how long do you want for a search result on google before you hit retry because it's taken longer than 1 second and you assume something is wrong (like maybe you lost your Internet connection?

Posted Thursday, June 07, 2007    Permalink    Comments [1]  View blog reactions

 

# Wednesday, June 06, 2007

Comma... use it

The other day I was commenting at work about how difficult it is to read numbers without commas. I was looking at a bunch of stats that tell us things like how many users we have in hotmail in various countries, markets, and so on. These numbers are all in millions, tens of millions, hundreds of thousands and so on.

When you see a table like this:

Some Random Number
7895126
95878
271001544

and there are lots of numbers in a table can you get the info you need without counting from the right? I can't, or I'm too lazy to.

In Excel there is this nice handy button:

image

that will format any cell so you can get a table and make it look like this:

Some Random Number
7,895,126
95,878
271,001,544

Now I can quickly asses the relative values of each row without thinking.

In C# this is stupid easy.

Just use String.Format("{0:n}", value)

Please help save unnecessary brain cycles.

Posted Thursday, June 07, 2007    Permalink    Comments [1]  View blog reactions

 

# Tuesday, June 05, 2007

How would you feel if you saw someone get shot?

Chris Saaca just detailed an account of how he saw a man get shot in front of his apartment (which by the way is about 2 blocks from my old apartment in San Francisco, and a path I walked every day for 4 years). I can't believe this happened so close to my old residence.

I hope I never see anyone get shot, but I'm glad Chris was able to get the plate numbers of the shooter which eventually let the cops to catching him.

I love how 911 gave him a busy signal though. I hope I never have to call 911 either.

Posted Wednesday, June 06, 2007    Permalink    Comments [0]  View blog reactions

 

# Friday, June 01, 2007

Offline

Back when the internet was a luxury and broadband was something you had at work only many product sported an "Offline" mode. For browsers this was nothing more than turning off the attempt to talk to the network and using the cache. However, over time, offline has been denigrated to a fairly useless feature that doesn't work and the cache really is just a collection of images and stuff that doesn't work offline (because of Web 2.0 and AJAX). sidenote: I guess Google Gears fixes that.

There is only one application that I know of that truly handles offline well, and that's Outlook when running Exchange Cached mode. It's phenominal. You just unplug you computer and you have all your stuff there. Of course, Entourage has always had an Offline mode by default, where in Outlook it was a "feature" that became seamless in Outlook 2003.

Anyway, my FAV feature of my FAV RSS Aggregator is now Offline mode. I have generally found that I read RSS feeds on flights to and from Redmond. But feeds like Engadget that are very image heavy are useless on a plane w/o an internet connection.

Well Nick just finished up a killer Offline feature for FeedDemon 2.5. It works exactly how I'd expect... and this pretty much rounds out almost everything I ever wanted in an RSS Reader :-).

Posted Saturday, June 02, 2007    Permalink    Comments [3]  View blog reactions