Designing and Shipping a Platform – Joshua Goodman

By wangwill
  • Common Language Runtime, Group Program manager
  • Why & How?
    • Platforms give your users far more features and flexibility
    • Platforms create ecosystems
      • Windows
      • iPhone
        • Windows 7 mobile will be better platform but there will be way less apps than iPhone
  • Strategy – Build your app on your platform
    • Forces you to be extensible enough – great architecture
    • High test burden
    • Are pieces of your app completely replaceable?
      • More extensible
      • Extensions can interfere
      • Upgrades more likely to break things
  • Browsers: Three Strategies
    • Firefox
      • Build platform, then build application on top
    • IE
      • Well defined addin model for toolbars
    • Safari
  • Why high compatibility is so hard
    • .Net 1.1 is compatible with 1.0
    • Install 1.1 and Outlook will crash, not their code but customers do not care
  • Layer cake approach
    • .Net 2.0, 3.0, 3.5 on top of each other
  • Side by side approach
    • Old stuff uses old thing, new stuff uses new thing
    • .Net 4.0 is different from 2.0, 3.0, & 3.5.  It is on the side
    • Use shim layer
    • Window 7, runs XP in virtual machine
    • Apple uses emulator of old OS
    • Flash Player 9
      • Two virtual machines, AVM1 & AVM2
    • Still hard
      • They still have to compatible or developers will not use new platform
      • Side by side libraries, how about all the libraries you bought for the older version?
  • App-Compat Flags
    • App tells what version it wants
    • Need to write code for old and new platforms
    • What about libraries?
  • In process side-by-side for .Net 4.0
    • You can run both 4.0 and 2.0 in the process
  • Frozen Designs
    • Once you build it, you are stuck
      • Hard to remove APIs
      • Hard to change behavior
      • Get it right first time or live with your mistakes
    • For an app, much easier
      • You can look for a the hooks in an app, not so with a platform
  • Best Practices:
    • Mocks: Mock a deployment and test all
    • Compatibility
      • Team must get to same page on compatibility bar
        • Document and communicate
      • Compat council makes decision
  • Use your Apps
    • Keep 300 applications running
    • Test against them – find breaking changes
    • Analyze the IL to see how often functions are called
    • Use source code of apps that build on top when available
  • Design Process
    • Understand root of partner problem
      • Try to solve it without changes
      • Partners jump to a solution but not the best solution
    • Politely request data
  • Hard Problem: Obsoleting
    • Removing it breaks partners
    • Mark as “obsolete”
    • Discourage use
    • Hope some day people will stop using it
  • Platform Growth
    • It will keep growing
    • Moving towards more layered approach
    • Hard to shrink
  • Conclusion
    • Get it right the first time
    • Architect for compatibility
  • My thoughts: We don’t build platforms, but we can learn form them as we add modules with the Archie Team.

Leave a Reply