Spring Cleaning

Now that we’ve released Office 2008 SP1, I’ve been able to focus more of my own attention on the next version of Mac Office. We’ve begun the earliest phase of work, internally called ‘EEQ’, which I think stands for “Engineering Excellence and Quality”. The EEQ phase is when we get to tackle important engineering issues that don’t directly lead to a customer scenario, but to help us improve the product at an architectural level. In my case, I’m currently focusing on removing calls to system APIs that Apple has deprecated over the last few years, such as QuickDraw.

During Office 2008, we converted most of our drawing code over to use Core Graphics instead of the historical imaging APIs known as QuickDraw. CG is much richer than QD, has full alpha-channel support and hardware acceleration, and uses floating-point coordinates for full flexibility, so it is to our obvious advantage to use it. Even though we did most of that conversion during 2008, I’m amazed at the amount of QuickDraw cruft I keep finding.

I went through a bunch of our toolbar code today with a peer of mine, and we found dozens of references to GetPort/SetPort, even though the code right next to it was fully CGContext-based. Sigh. Some of them have been trivial to remove, but I’ve also found a lot of mouse-tracking code that uses QuickDraw APIs for comparing points to rectangles. Even the so-called modern OS tracking APIs take CGrafPtrs (I’m looking at you, TrackMouseLocationWithOptions()…) A little more inspection of headers this evening revealed a new replacement API in Leopard called HIViewTrackMouseLocation, but at the moment the Office source code still runs on Tiger, which means I can’t use it easily. Ugh.

Anyway, Apple has deprecated lots of stuff over the lifespan of Mac OS X, and we’ve got a lot of cleanup to do. Reading the Leopard Carbon Release Notes for the HIToolbox gives a sense of the direction to take for the Carbon code that needs to survive. It does feel nice to rip out old crufty code (as my peer said today, “Kill it! Kill it!”) and modernize some of our subsystems. It will feel even better as we transition some of those subsystems to Cocoa. None of this cleanup directly helps our users, but as we modernize our code we make it more maintainable and sustainable for the future, and that gives us a better platform on which to build things that do help you.

Fix for endless Setup Assistant problems

Shortly after the MacBU released Office 2008 SP1 yesterday, we started to receive reports that the update caused the Office Setup Assistant to launch every time, instead of their desired Office application. We started looking into it right away, and found that in nearly every case, the problem happens when users are running Office 2008 with an expired product license key.

When Office 2008 was released in January, all of the keys used in our private beta program expired, but it wasn’t until the SP1 update that we added code to enforce the expiration. While we communicated to all of the users in our beta program that their license keys were going to expire when the product became publicly available, one of the beta versions did escape onto the Internet in November and we didn’t know who was using it. During our work yesterday we found that some of our users installed their retail copy of Office 2008 over that beta version and ended up running the final release of Office with the beta key.

Our testing and user assistance team scrambled today and have put a new help topic about the problem up on Mactopia, along with another link to how to remove the old product key information and re-enter your valid key. This is about the fastest we’ve put up new help content — about 26 hours from first report of the problem to active help content!

Also, the English and Japanese versions of the SP1 update are now live in the Microsoft AutoUpdate tool, so rather than finding them on Mactopia for manual download, you can simply go to the Help menu in your favorite Office 2008 app and select “Check for Updates”. The autoupdaters for the European languages should be available soon.

Lastly, we actually put up a very minor revision to the SP1 installer today. The new package has a fix so that the update can actually be deployed via Apple Remote Desktop or via the command-line. If you want to deploy SP1 via ARD and downloaded the update yesterday, please redownload it. If your install is already done and working, there’s no need to redownload and reinstall the update — the fix was in the installer only, not in any of the actual application bits.

The Daring Fireball Effect

For my first major post in a very long time, I wrote about VB’s return in the next major version of Mac Office. The press release about it went live at 12:01am PST, and I put my post up a few minutes later. Check out the page hits that Mint tracked for me today:

Page hits on my blog today

From 5pm to midnight, I was getting my usual 5 or so hits per hour. (The ‘spikes’ between 9 and 10pm were from me viewing my own site to check some CSS tweaks.) After the post went live and daylight came to Europe, site hits perked up into the upper 20s per hour, and when the story was picked up by the various US-based online publications, jumped into the 200s per hour.

Then, somewhere shortly after 1pm Pacific time, John Gruber of Daring Fireball linked to my post, and everything jumped into the 700s. That’s actually not nearly as high as the hits I got from DF for my post in August 2006, but I switched to Mint only recently and don’t have those numbers anymore, so I can’t show them to you. I should probably install a caching plugin so John can’t knock my hosting site over

Mac Office 2008 SP1

It’s finally here! The MacBU has just released Service Pack 1 for Mac Office 2008. You can download the update directly from the Mactopia website (it’s large — about 180 MB), or launch your favorite Office app and select Help/Check for Updates. There are well over 1000 fixes and improvements in this release, including the return of custom error bars and axis tick manipulation in Excel charts. The full release notes are available online as well, so go check them out to see if we fixed your personal pet peeve.

I’m particularly excited to see this update go live, because it’s been the project consuming most of my time for the last several months. Shortly after we shipped released Office 2008 to manufacturing in December 2007, my manager asked me if I’d be willing to act as the development lead for the SP1 project. I agreed, and have spent many hours working on the project since we kicked it off in early January. Since our fine UA department has already written up the list of highlighted changes, I thought I’d spend a little time today describing how we approached SP1 and how we did the work.

First off, while I was the development lead for SP1, I most certainly cannot take any majority of the credit. SP1 was a MacBU-wide effort, with significant contributions from every single developer, tester, program manager, content writer, lab engineer, builder, and all the other disciplines I’m forgetting at the moment. I am incredibly thankful for all the hard work that everyone around me did.

So, why SP1, and why now? Well, it’s no great secret that we released Office 2008 later than our original plans intended. Even after that delay, there was a decent list of issues in the product that were postponed during the original release cycle that we knew we wanted to fix, so we knew that we had to plan for an update sometime in 2008. Mac Office 2004 was first released in May 2004, and its first service pack came out in October 2004, about 5 months later, and that’s pretty much the same schedule we came up with for Office 2008. In addition to fixing the issues we know about internally, we like to have a few months of real user data in hand (crash reports, newsgroup/forum postings, etc) that help us to identify problems that we didn’t know about. I’ve been spending a bunch of time in Ars Technica‘s Macintoshian Achaia forum over the last year or so, and have received a number of good bug reports from particpants there. (In fact, we have a ‘SWAT’ team of folks in the MacBU who participate in a whole variety of forums across the net.)

Anyway, the entire MacBU began development and testing work on 2008 SP1 in January. Initially, teams pretty much just took their list of issues postponed from the regular release and started fixing those bugs. Our test team once again dove into the product and found more issues that needed fixing, and we started to collect MERP logs (Microsoft Error Reporting Program — aka the dialog you see when an Office app crashes) from the wild. Devs took all those bug reports and began working on classifying them by severity and importance, and then started fixing them.

Like any release, however, there needs to be a modicum of control applied to the whole process. If everybody just keeps on checking in fixes, the product can actually end up being less stable than before. The Office codebase is large, and code changes in one part can have unintended consequences somewhere else, so we don’t let code churn run on forever. Many teams at Microsoft (and, I’d imagine, at other large software companies) have instituted ‘triage’ for bugs.

When we triage bugs, it basically means that we take a look at all the aspects of a bug before deciding whether to accept a fix it:

  1. How bad is the bug? (Is it a crash? corrupted file? data loss? simple redraw glitch?)
  2. How hard is it to encounter the bug? (every time on boot? Only when saving? On Feb 29? Only when dragging a shape across a page boundary when the page is in PubLayoutView and the shape has a semitransparent shadow and the document has never been saved?)
  3. Can the user work around the bug? (use the mouse instead of the keyboard?)
  4. How complicated is the fix? (simple typo (= instead of ==) or re-architecture of entire function?)
  5. Where is the fix? (in the middle of Excel’s recalc engine? Or for populating a single popup menu in one dialog?)
  6. How close are we to shipping? (Months, weeks, days?)

All of these factors come into play, and some combination of the magnitude of each of these leads to a decision of whether to fix a bug or not. It can get pretty complicated, and much of it comes down to a gut decision (although we try to collect hard data when we can, like ‘exactly how many MERP reports do we have of this one bug?’) In January, when we were 4+ months away from shipping SP1, pretty much any bug was allowed to be fixed. In April, when we were trying to lock down the code and minimize code churn in order to keep the product stable, we punted a known crashing bug because although the impact of the bug was large, the fix was a little complicated and the testing team didn’t think they could verify that the code change had no unintended side effects with the amount of time left before shipping.

So, what was my role in all this as development lead for SP1? I worked closely with one of our Program Managers and one of our Test Leads as the three-disciplined Sustained Engineering Lead Committee (I have no idea if we had some formal name, so that’s what I will call it here.) Scott, Pat, and I set the product schedule (kickoff, first day of triage, code-complete, zero bugs, release candidate target, etc) and acted as the final arbitrators in daily triage meetings, putting our roughly 33 (ok, now I feel old) combined years of software development experience to use. Mostly that meant that as teams brought their bugs to the triage meetings, we asked them about the above list of questions and tried to get a sense of how each bug fit in importance. We were responsible for using that information to ‘raise the bar’ each day/week — making it harder for bugs to qualify for fixing. That sounds somewhat anti-quality or antithetical to the purpose of a service pack, but actually it is a very important part of ensuring that we ship a high-quality, stable product for our users. It can be very hard to say no to a bug, particularly when people really are passionate about the specific problem or user scenario, but someone has to do it. The three of us all made a final call on each bug, and I think I tended to be the most hard-core about locking things down. Toward the end, a few people jokingly (at least, I hope they were joking) called me “Dr. No.”

As I said at the top, there are over 1000 fixes in SP1, including the re-addition of some features that were glaringly absent when compared to Office 2004. That doesn’t mean Office 2008 is now perfect — I know we haven’t fixed every bug in the product, and some folks are bound to note that we haven’t fixed some of the bugs they are most frustrated by. However, I hope you’ll agree that this update shows that I and the rest of the MacBU are committed to this product and to its future.

Update: I added a new post the other day about some installation problems people have been running into with SP1. If you are having difficulties with SP1 apps, please take a look and see if it helps you.

Saying hello (again) to Visual Basic

How does that old Chinese proverb go? “May you live in interesting times!” I have no idea how accurate it is, or whether it is a positive blessing or a curse, but I really do live (and work) in interesting times.

Almost two years ago, back at WWDC in August 2006, the MacBU announced that Office 2008 would not have support for Visual Basic. I blogged about it at the time, and that one post has proven to be my 15 minutes of Internet fame. It continues to be the most popular post on my site — 21 months later, it still accounts for almost half of all the hits I get each week. While most of our customers don’t require the cross-platform scripting enabled by VBA, a section of the Mac community spoke out very vocally against our decision, and I still hear echos of it to this day. At the time, I wrote about the challenges we faced in bringing it forward with the rest of Mac Office 2008 and why we ended up deciding to remove the feature, but while some people understood or at least accepted the details, some in the community did not. I’ve been told that we must have cut VB to intentionally drive users to use virtualization and Windows Office 2007 on Macs, or that we were ordered by upper Microsoft management to slowly kill the Mac, or any one of a zillion other “Microsoft is evil” conspiracy theories. None of these theories are true, but it’s rather hard to prove that, except by deeds.

This isn’t a done deed yet, but I’ve got a new commitment for you. Quoting from a press release that went out from the MacBU at 12:01am PST today:

VBA Returns to Future Versions of Office for Mac

The Mac BU also announced it is bringing VBA-language support back to the next version of Office for Mac. Sharing information with customers as early as possible continues to be a priority for the Mac BU to allow customers to plan for their software needs. Although the Mac BU increased support in Office 2008 with alternate scripting tools such as Automator and AppleScript — and also worked with MacTech Magazine to create a reference guide, available at http://www.mactech.com/vba-transition-guide — the team recognizes that VBA-language support is important to a select group of customers who rely on sharing macros across platforms. The Mac BU is always working to meet customers’ needs and already is hard at work on the next version of Office for Mac.

Yep, you read that right. VB is (well, will be) back, baby! When we came to the realization in 2006 that there was no way for us to keep VB in the product and still ship Office 2008 on any semblance of the schedule we wanted, we announced its removal, but kept looking at how to bring it back into the suite even before we shipped. Many of the technical challenges I wrote about then still remain, but for a while now I and several others have been working with a group of people who know a heck of a lot about the internals of VB, and once we determined that we could achieve the revival VB in the new schedule for the next version of Mac Office, we locked it into place on the feature list.

Personally, I think it’s really cool that we’re announcing this now. For all the wringing-of-hands and gnashing-of-teeth in the Mac community over the lack of VB, Mac Office 2008 has been selling really well (Craig Eisler, our General Manager and all around cool-boss-guy, said “The response has been amazing — since we launched in January, the velocity of sales for Office 2008 is nearly three times what we saw after the launch of Office 2004″ in that same press release) which seems to indicate that most of our users don’t find the lack of VB to be a major issue. I think our management is confident enough in our ongoing sales of Office 2008 to tell you about something very significant in the next version, even if that defers some sales to that next version. Based my own experiences talking with people in various Internet forums, I don’t think too much of that will happen, though. And if you were wondering, the delta between Office 2004 and 2008 was longer than we normally expect between versions, so my understanding is that this next version will be available somewhat sooner than 2012 (I can’t give any specifics at this time, however.)

So, if you have a dire need for Visual Basic, you can continue to run Mac Office 2004 (it will even run side-by-side with Office 2008) and we’re publicly committing to VB as good (maybe even better, if things go well) in the next version. My team is responsible for that reintegration, and I’ve been meeting frequently with a number of people as we’ve planned exactly what we’re doing and how we’re bringing VB back. This seems to me to be a strong example for the MacBU naysayers that we’re really listening to what all of our users want, and that we’re most definitely not slow-marching to some bagpiper’s funereal drone!

I’m excited to be able to blog about this now, after almost two years of keeping my lips zipped, and I can’t wait until we reveal everything else about the next version of Mac Office. In the meantime, let me ask you something. What parts of the Visual Basic experience are most important to you? The IDE? Macro UI, such as dialogs? Object model parity between Mac Office and Windows Office? (and if so, which features in the Windows object model do you most want brought to the Mac?) Or something else altogether? I can’t promise to achieve anything in particular, but I’d love to hear how we might be able to improve upon the 2004 VB experience for you.

(Made a few edits this morning, and added a link to the press release.)

Lying down on the job

Well, the nerve, it’s not so good. I had an MRI last week and saw Dr. Peter Nora for a neurosurgical consult on Monday. There’s no immediate damage or need for surgery, but the MRI showed a definitive herniation at L5-S1 (not my personal MRI, but a decent example of one like mine), just like I’ve had twice before. Dr. Nora strongly recommended I take several weeks to minimize prolonged periods of sitting and standing, to take pressure off the disk and give my body a chance to solve the nerve irritation on its own.

That’s a great idea, but what about work? I’m still quite mentally fit (aside from the foggy effects of taking Percocet to dull the pain) and didn’t relish the idea of spending 3 weeks staring at the ceiling. Luckily, Microsoft has a great HR and benefits team, and I have an understanding manager (who happens to be a long-time friend and is actually the very first person I met at Microsoft on my first day as an intern in 1995!). Together with my general doctor, we crafted a formal ‘accomodation’ plan that acknowledges my limitations and still allows me to work from home part-time (and account for the rest of my time with sick leave). This way I get to be productive, keep my mind off of my back, and yet not stress my system with long commutes or hours sitting at my desk. I’ve got a laptop at home and can use Apple Remote Desktop to drive my Mac Pro at work, and thus can do pretty much anything from my bed that I could do at work.

The one tricky thing is that as a development lead, I have several people who report to me, and I need to be able to meet with them on a regular basis. Handily enough, between the new A/V capabilities of Microsoft Messenger 7 and the nice corded mic on my cell phone, I can attend meetings and talk to all my direct reports face to face. I did a number of one-on-one meetings that way today, and it seemed to work rather well.

So, I’m spending my days lying on my nice comfy bed with a couple of pillows and a freaking hot MacBook Pro. Not exactly where I’d like to be, but given the circumstances, I’ll take that over a stay in the hospital or a blah view of my ceiling. And, *knock on wood*, with any luck I’ll avoid a third surgery and be physically back in the office soon.