It has been more than six months since I left Microsoft to join Skytap, as honeymoon fever fades, I may compare the two ponds from the engineer perspective in a less subjective way:
Microsoft Office follows the traditional waterfall approach:
- The shipping date is decided by the executives to align with Windows release, also correlate to the enterprise IT upgrade plan. Any slippery will cause the turmoil like the delay of Windows Vista.
- The executives also determine several heavily-invested areas as “pillows” for the next release. See Metro for Windows 8.
- The project manager(PM)s will aggressively crafting the specifications for features. Scenario-Focused Engineering(SFE) is adopted to improve the user experience. Engineering team may also involve in for brainstorming and feedbacks.
- The developers then swag, aka estimate wildly, the cost. Dev Manager then summarize the cost report, review the planning, calibrate with other team if integration is required, then start to chop, chop, chop features.
- There is a chance that the survived features get postponed or even canceled at the end of the milestones in case integration failure or regressions.
- Long time stabilization: extensive testing, bug fixes, design change requests.
- Ship it!
I think this workflow makes perfect sense for Microsoft Office, a market dominator with rooted user expectation, just as the Milo Criterion states:
Products must mature no faster than the rate at which users can adapt.
Skytap takes a less formal approach as we are service-oriented:
- Bug fixes and minor improvements are shipped in monthly base.
- The long-last features are usually driven from the marketing side, then consolidated to requirements by developers.
- As testing team compose less than 10% of engineering work force, test-driven-development(TDD) is highly encouraged. Mockups and fixtures are comprehensively used to for cross-component testing.
- Besides testability; deployability, maintainability and serviceability are also planned ahead.
- Dogfooding in the internal staging environment.
- Deploy it!
Programming languages and Tools
In Microsoft Office, client applications are developed mainly in C/C++, a in-house foundation library takes place of STL and boost for historical reason. Server side uses C# and .NET out of surprise.
In Skytap, the backend service is developed in Python, the web frontend is in Ruby. Some services are developed in C/C++ for the sake of performance. We also have some legacy code in Java.
In Microsoft Office Graphics, most developer use Visual Studio for everything, I know some developers (including myself) prefer Vim. There are also some diehard windbg users as well.
In Skytap, most developers prefer Emacs, two guys use Vi/Vim, several use Eclipse, at least one guy uses TextMate.
In Microsoft, each developer is equipped with at least two dev box in case the overnight build fails; one mail machine for running Outlook. Two 22” monitors are hooked up with KVM for console switch. You may occasionally check out the virtual machine from build lab for Hotfix.
In Skytap, each developer is equipped with MacBook Pro 15” and HP ZR30w 30” monitor. The dev stack is running in the HP ProLiant server or in the cloud.
In Microsoft, you have unlimited access for Microsoft products for your day-to-day work, and MSDN subscription for technology preview.
In Skytap, you have unlimited limited resources to run virtual machines in the cloud.
The two ponds are so drastically different, which pond do you prefer?