26 February 2007

On Infrastructure

The following quote is from a long article on Toyota in the New York Times:

Improving efficiency in the factory, though, doesn’t necessarily lead to greater profits. Savings on the assembly line can mean a nicer dashboard without making the customer pay more for it. “If you’re efficient in the things the customer doesn’t see, then you can put it into the things the customer does see,” Ron Harbour, a consultant whose company rates the efficiency of auto plants, told me. A result is a car more popular with customers. Success on the assembly line, in this way, begets success in the showroom.

For me, this best describes the business case for choosing Cocoa as your application framework for Mac applications. This is not to say that you can't write terrible Cocoa applications. You can, to be sure, but in general the APIs, the design patterns, even the style of the code subtly try to keep you from rebuilding things that have already been built. Many of the programming idioms try to get out of your way and "do the boring stuff" so that you can spend time adding value that the customer actually sees.

If you are always spending time working on the guts of your application, especially the parts that the user doesn't directly interact with, there's often little perceived value in the work you are doing. If you are all of the time "platform building", it's easy to loose sight for what the platform is being built to support. Don't get me wrong, I'm a big fan of infrastructure work, I've spent most of my professional career doing it. However, it's absolutely critical to see the connection from the work you do to the customer value. This is why a good user interface is so important. This is why a good application programming interface is so important.

On the other hand, if you are working with people that watch out for the schedule and bottom line and you propose an infrastructure improvement, immediately you will, or should be, accosted with pointed questions about cost, time and customer value. All of these are very good things to discuss, but when you do discuss them, you must not forget the long term impact of the work you do. If you're only going to be there for one version of the software, then maybe the near term results are all you care about. There are as many shortsighted programmers as clueless business men, but I think the real answer is that working on improving the guts, the engine, the non-visible, un-photoshopable parts of your application are the long term the "critical path features" that will allow for money and time to be spent on the high customer impact features of version n+1.

Toyota’s executives recognized early on that improving the process by which cars are designed and built is just as important as improving the vehicles themselves.

You've got to have both, but if you only ever focus on what the user sees (and this is easy to do!) eventually, your application will collapse under its own weight. What I'm trying to discribe might be the best business case for the model-view-controller design pattern. How does this apply to Cocoa? Sure, you can build an app using the model-view-controller design pattern without Cocoa, it's just that with Cocoa, you just fall into doing the right thing long term, even if you don't quite know why.

22 February 2007

Welcome to 2013

Every once in a while me and some of my buddies will get together for lunch to prognosticate and pontificate. The "rules of engagement" are that you argue the future of technology with the assured confidence of Steve Jobs, while still being nice. ;-) Today, you won't get the laughs, the jeers, the oohs and aahs or even the subtle interplay of the multiple ideas and feelings as we sit around the table and guess about the future, but you will get part of my view of things and you'll just have to imagine the rest. So with that preamble, let me start with what the world looks like in 2013:

To begin with everyone has at least one, but most have two, 30" displays at work that support multi-touch and have embedded hi-res cameras. Screens haven't grown much taller, but they will have grown wider. People carry around their iPhone on which resides all their digital assets. They walk up to a workstation and "plug in" to run all their customized programs and data coming off their phone. Laptops still dominate, because, well, they have a keyboard and mouse that work, but they are the peripherals of the phone, the iPod, the communication device, not the other way around.

The user experience isn't just about being pretty and functional anymore, it's about making the work you do fun, in a very game-like almost surreal kind of way. Of course it's efficient, because it's fun to be successful at what you do! But it's not just about being efficient anymore, it's about being beautifully efficient and deeply effective.

In this world of 2013, all desktop applications, as we know them, continuously bounce back and forth between two states: fully online, and partially offline. While all the user's data is stored on their local device (read their iPhone), they know that when in range of any wireless signal, their data is being securely and automatically backed-up and kept in sync up with all their other peer devices. Normally this is the cloud for down-level, but always accessible access, their home and work computers, their entertainment center and car and of course their iPhones. Yes, most people will have one "work horse" iPhone and another smaller, lighter, "more invisible" if you will, model.

Documents are far from dead in this environment, but they are more dynamic, they are less the end, but the vehicle for the process of learning and discussion. The standard way to transmit rich but static read/only documents will continue to be PDF. Word processing will move to be more about design and layout than about text macros, spell checking and print out. PowerPoint presentations become less about bullet points and more about data visualization. Excel workbooks finally take on embedded SQL back-end for deep data-sets. This simultaneously thrills regular users who always knew Excel was a database, while frustrating DB admins worldwide. Excel "views" on to any data set auto syncs back up to and around with other people and servers. PowerPoint presentations include Bonjour enabled real time text chats on the presentation's "side screen" if enabled for the presentation. The typical method for connecting to a HD presentation display is simply connecting your phone to the projector and driving the phone with the button on your phone's headset over a secure wireless connection. Your headset will also record your presentation for later automatic transcriptions or playback.

Email and News isn't so much about "getting to done" and reading all the email and news coming your way. It's much more about training your "inbox aggregator" to sense the signal in the noise. Which people and sources consistently produce high signal work will be the basic factor. Your work will be to both broadcast so that people will want to subscribe to your data-out-stream, but also aggregate the common themes coming in. Spark-like, the software will identify the new, the novel and out of the ordinary. Analysis of your reading, response times, collaboration habits, phone calls, even tracking your focus on the screens will help the system to make connections and inferences and your projects and priorities will there by emerge. The complex patterns over time will create a data set that you can both tag with good and bad behaviors which the system can use to help you do more "good things" and fewer "bad things." When the system senses you are "in the zone" phone calls, IMs, even background applications fade from view allowing your to focus and really think and really produce. This kind of pattern analysis will be done both locally as well as in the cloud. The system learning will happen in both places.

Help systems will be much more user developed, driven and updated with a few mavens driving the core content. Person to person personalized help will emerge: This is where you can call someone and get a personal response in your own language, from the same support person you have grown to like, within 24 hours. The help system extends beyond just using an application, becoming more like a workflow analyst and personal coach. Help systems well done become a modest profit center for those few companies who figure out how to serve personally, not just quickly. This premium help service becomes something people love to pay for, because of the way it helps them directly improve their day to day work. Think of it as life hacks, evolved and distributed.

Software updates and personalization of software on the fly will mimic and then surpass the current web based model. Users will be able to log feature requests directly in the applications they use. Developers will be able to respond in aggregate or individually. Web apps will support roll forward upgrades, while desktop applications will support seamless roll forward upgrades and roll back downgrades. The roll back ease will allow for people to bravely try out new features in newer versions without the risks of all our nothing upgrade decisions. When a bug or feature they requested is fixed or something similar added to a new version of the application of which they don't have, they will be notified. Think of it like out of band email feedback and support, or like FogBugz stuffed into each application you own.

Video conferencing will be available most places and no one will use it except for one to many lecture style communication. What they will use is screen sharing, document sharing and white board sharing while high quality audio, text and data sharing collaboration will be the norm. Conversations will naturally move from audio, to audio and text chat, to screen sharing, to document editing to white board sketching and back to basic text all with the effort of adding a new party to a conference call on the iPhone. Even with all this communication technology, person to person visits will remain he most effective form of collaboration. As such, most systems will tend to lead you from lower communication models to higher communication models, given your particular context.

User interfaces will provide greater affordances for the human user. Not just skins and layout changes, but reading text summaries into audio files to be processed and listened to while moving from place to place. Reminders to get up and stretch, take a break. Zooming in and especially zooming out spatially will help people not only to read better as they age, but to step back and gather greater context, then focus in on the most important information or task. Audio will be used slightly more to provide feedback, but displays that can "thump" or provide force feedback when touched will also allow for better interactions. Where today we use "if statements" then we will use Bayesian probability in making our decisions.

The most important aspect of software design will be the answer to this question: How can we optimize this experience such that the things humans are good at are made easy, fun and amplified, while the things humans are generally poor at are made automatic, simple, out of the way, multi-tasked, yet controllable, abstractly knowable and understandable.

In this world, technology will not be the enabler or even the competitive advantage. In 2013, technology will be the raw material upon which and out of, much of life's daily work and play will be built. In 2013, people will have gotten over technology, less will be the worship of technology as some magic cure all, more the understanding of technology like a bicycle for the mind, the heart, and even the soul. And so here's to a softer time. A time when the real world, not these virtual intellectual properties, but the actual world around us takes preeminence once more.

21 February 2007

The Screenshots

As promised and thanks to a brave soul, here are the Easter Egg screenshots. Without the animation, it's hard to get a feeling for scrolling credits etc., but here goes. First Office 98, then 2 Office 2001 screenshots.

08 February 2007

An Easter Egg

From Wikipedia:

A virtual Easter egg is a hidden message or feature in an object such as a movie, book, CD, DVD, computer program, or video game. The term draws a parallel with the custom of the Easter egg hunt observed in many western nations. In computer programming, the underlying motivation is probably to put an individual, almost artistic touch on an intellectual product which is by its nature standardized and functional.


Because of the increase in malware, many companies and government offices forbid the use of software containing Easter eggs for security reasons. With the rise of cybercrime and the prevalence of the Easter egg's cousin, the logic bomb, there is now concern that if the programmer could slip in undocumented code, then the software cannot be trusted. This is of particular concern in offices where personal or confidential information is stored, making it sensitive to theft and ransom. For this reason, many developers have stopped the practice of adding Easter eggs to their software. Microsoft, who has in the past created some of the largest and most elaborate Easter eggs such as the ones in Microsoft Office, no longer allows Easter eggs as part of their Trustworthy Computing initiative.

That pretty much sums it up. In a quieter time, there were Easter eggs. Alas, that time has left, never to return. However, digging through some old notes of mine, I found something fun, so today I'll to do my part to preserve some Mac history. The following are the instructions needed to trigger an Easter egg in Mac Office 98 that, as far as I know is Mac specific and no where recorded online. I'm not going to tell you what it does, but if someone has an old copy of Mac Office 98 around, does this and sends me a screenshot, I'll post it. :)

The steps are pretty involved:

  1. Set System date to > Feb. 15
  2. Boot any Office application
  3. Make sure the Assistant is up
  4. Grab the Standard toolbar by the drag handle and do the following without letting go:
    • grab to the center so it is floating
    • grab it back to the top dock area
    • grab to the center so it is floating
    • grab it to the left dock area
    • grab to the center so it is floating
    • grab it to the bottom dock area
    • grab to the center so it is floating
    • grab it to the right dock area
    • grab to the center so it is floating
    • grab it to the top dock area and drop it
  5. Click the Assistant
  6. Type “Think Different”? Think Grammar!
  7. (including all punctuation and spaces, exactly as you see it above)
  8. Click Search


07 February 2007

Post-It Pixel Art

As a birthday present to MacBU Joe LeBlanc, Jessica Lambert and Matt Elggren (aka Mel) arrived at our building at 6 AM yesterday morning and setup this surprise for us! I think it's super cool. More details at our Mac Mojo blog. Enjoy!

06 February 2007

10 Years of MacBU

Today we are celebrating the 10th anniversary of the creation of the Macintosh Business Unit here at Microsoft. I was there when the Business Unit was created, so I thought I'd share some of my memories about that time, way back when.

When I was first hired as a contractor to help test, I was actually hired by an old QuickTime/Newton engineer that had left Apple to work at Microsoft in the Word team. Microsoft was just "getting" the Internet and one of the several efforts underway was to create an add-in for Word that would allow you to create, read and browse the internet, in Word no less! I know that sounds laughable today, but back then web pages were much simpler and it kind of made sense that Word would be a good place to create web pages. Well, the add-in was named "Internet Assistant of Word" and I was in-charge of testing the HTML input/output of with this plugin installed on the Mac. I had loads of Mac experience, but little experience with HTML apart from building my own pages in Adobe's PageMill (!), so I dove in, learned a bunch and tried to ferret out all the bugs.

While I was working on the Mac version of Internet Assistant for Word, my manager kept meeting with others around Microsoft evangelizing the need for a specially purposed Mac Unit that would just focus on the Mac software. He was by no means the only person pushing for this change, but when it did happen, he got to be a part of the new team as Test Manager and I joined the newly formed MacBU with him.

Back then, our automation system consisted of (don't laugh) XLM scripts that would drive Excel through test scenarios! Excel was really the only team that had lots of automation and they had a whopping 20 or so machines set aside to run these tests. Naturally I landed in the Excel team, but my task was to develop automated performance tests for Excel.

The day the MacBU was formed, we met in a large conference room near the old Microsoft Library. This building has since been replaced by bigger buildings, but I remember standing in the large auditorium in the back, standing room only, as folks explained the change and why it would be a "good thing."

Much has happened since that meeting and I dare say, that creating the MacBU at that time was a very aggressive decision. Back then we had a majority of Windows developers, writing code like crazy to build a Windows product, and then finally ship it, only then to work on the Mac product. This produced sub-optimal results.

After the MacBU was created, we moved to a place where our developers and testers were not required to do the Mac thing, but got to choose which product to work on. (Yeah, when the MacBU was created, lots of folks were forced to be on the Mac side and didn't want to, but over time that quickly filtered out.) The option to work on your platform of choice set us up to hire more Mac talent, and that was a very, VERY good thing. Soon after we would fork the code base, move to different ship cycles, eventually move to CodeWarrior, then Mac OS X 10.0, on which we were the first big company to get on the new platform! Yeah, our quality wasn't the greatest, but at least we didn't get called "laggards" by Jobs in his keynote! :-P My goodness, we were the default OS web browser and email client! We started the pin-striping with IE! Okay, so maybe we don't mention the pin-striping, I'm just saying...

Now, we've got a growing business, a super talented and focused Mac team that "gets it" when it comes to the Mac experience. From a industry level, when MacBU was created, everyone was saying, "Write once, deploy everywhere." and in a way, there's some of that still with the "web as a platform" being pushed today. The creation of the MacBU flew in the face of all that and said, if you want to be excellent on the platform, you've got to treat it seprately, not as an afterthought. All throughout the industry, I believe the MacBU has given other large companies permission to consider the question, "Should we have a dedicated Mac team just to focus on the Mac stuff?" I think that has had a more postitive effect on the overal state of Mac software from large companies than all the new Cocoa APIs, as much as I love them.

All these years later, it's hard to argue with the majority of users that see Mac Office as a must have set of tools for their work. The challenges of the Office 2008 product cycle continues to amaze and frankly, I don't think Apple could throw any more required changes at us! We are setting the stage for some fast action innovation and delivery that I think is going to make folks sing, not just for Office 2008, but beyond. The conspiracy theorist and MS haters will continue their diatribes, but the rational-rest of Mac users will continue to kick butt using our software. I love it, because in the end that's what it's all about.