Archive for July 2013
Lessons from org structures
This post is about a discipline (or sometimes called function-based) org structure. Like many management “principles”, org structures represent a pendulum that swings back and forth between ends of a spectrum. In this case the ends are usually characterized as a discipline structure or a product / product line / business structure. In practice things are more nuanced than these end-of-the-spectrum descriptors.
Some have talked about a discipline org structure as a more modern type of organization than the product line structure. Given how it mimics historic military structures, as far as management goes, it is probably much older than the “product line” organization often attributed to Alfred Sloan. No matter how new or old, discipline organizations are just one way of compromising on a team structure when you have to pick a way to go—there’s no perfect answer otherwise there would be only one org structure. Context matters.
In our book, One Strategy: organization, planning, and decision making we (co-author Marco Iansiti and I) talk a great deal about the org structure used for the Windows team. The approach was somewhere in the middle of the swinging pendulum between discipline-based and product-based, which was consistent with my own history of the spectrum of choices. Given the book’s emphasis on this type of structure, it is great to see so much support and enthusiasm for the approaches outlined in recent discussions about organizations.
Org structures might sound like a big company thing, but in spending time with new companies it is clear that the lessons of organization apply to the earliest stages. This post offers some lessons learned from a big organization. Smaller or new organizations sow the seeds of org structure early on and so these lessons will apply equally to any organization with a complex product architecture, multiple-products, or collaboration required across disciplines. A great example comes up in the challenges in cross-platform development facing many startups. Do you organize by platform-specific efforts or do you try to keep the apps together and each team targets multiple platforms? Early on with one app the choices are easy. As more apps or different schedules arise, the challenges grow to mimic those in very large organizations.
The reality about org structures is that they rarely cause things to happen—for example, and org structure cannot cause (or prevent) agility. The work processes or a focus on accountability can impact agility far more. Org structures cannot cause (or prevent) products from working together as that is a function of a plethora of variables throughout a set of engineers. Org structures are necessary and can be used to enhance or potentially drown out such attributes, but my experience has been that the causal arrow starts with the details of the work, not the structure of the org which tends to be of a correlation than a causation.
Seams always exist
Some have said that the beauty of a discipline organization is that it removes seams. Ben Thompson offered some good diagrams of before and after comparing a product organization and a discipline organization. These are entirely correct within the context of information presented. In practice, however, organizations of any size are more complex than just two dimensions of product or job function. Each of these attributes is a place you want to find a single approach while making tradeoffs given that you can’t do everything in all possible ways when you’re trying to release one product:
- Product. It might seem easy to identify a product, but in practice what a product is might be a hardcore technology statement or it might simply be an offering created by the business for business reasons. In My Years with General Motors, Sloan goes into great detail about the creation of product lines and the rationale, which is quite different than the difference between say Search and Android at Google. GMs product lines were based on a single platform with incremental or even cosmetic differences between essentially identical vehicles (e.g. Trans Am, Firebird, Camaro). You can define a product as “something people pay for” to yield one approach or you can define a product as “something we build” to yield another approach.
- Geography. Teams often have people in multiple locations. This can just be downtown/suburbs, or across the globe. Sometimes you organize all the people in a geography in one team and other times you place the multiple geographies within the existing structure. Many studies have shown that the impact on collaboration of even floors of a building can be significant and so the org structure you pick can accentuate the challenges or potentially increase the management burden.
- Sub-disciplines. At one level you can view a discipline org as engineering, marketing, sales, support or perhaps design, manufacturing, operations or maybe R&D, manufacturing, finance, and so on — these are all high-level views of different disciplines. Different industries have different high-level job functions. But within each of those there are functions as well. Marketing is a great example with specialties in inbound marketing, outbound marketing, communications, advertising, research, and more. If you have multiple products then you need to decide how to staff the next level of function—is that by product or sub-discipline. The tradeoffs involved can significantly impact the goals one might have in efficiency or agility. So even getting to a shared view of what disciplines are being organized is the first step, and a crucial one since it might result in several layers of management starting at the top.
- Partners or customers. Delivering a product to a specific set of customers or working with a specific set of partners can often come to define many other attributes of the overall effort. A product that is tuned to the enterprise might take one approach (to many variables) compared to a product tuned to consumers. This can impact advertising, features, engineering processes, and more. Some structures find these variables so important that they come to form a top-level org structure. There is subtlety and nuance in choosing along these lines since often your best customers or partners have an expectation of senior level people dedicated to their needs. This can even extend to important customer segments such as education, government, language markets, accessibility, and more.
- Code / architecture. It is quite common to organize a software project’s resources by what amounts to the code architecture. Engineers understand that and often skills and tools map easily to such a management structure. One of the most common startup organizations you see is to organize by client app and service back end. This places the “seam” inside the company to a great degree but also can make for tricky tradeoffs in what gets done and when. The larger these respective teams become, the more challenging that seam becomes. Cross-platform, in other words multiple clients of the service team, will confound these challenges to some degree and also create opportunities for seams between the different platform implementations of the apps (organize by multiple app teams each targeting a platform, or by functional areas of code targeting multiple platforms for example). Even the pace of code changes might be different between these two organizations. Engineering connecting to other disciplines along the code/architecture lines might mean that structure permeates through to support, sales, marketing as well.
- Schedule. By far the most complex variable within an organization is the schedule. My view is that a schedule defines a team. The project schedule defines everything about how people work, collaborate, and ultimately decide things. Two people on the same schedule share a world view. Two people at different parts of a product cycle (start/finish, coding/launching, new project/update) will rarely have the ability to really decide, collaborate, or walk in each other’s shoes. The more experienced you are the more you understand these different mindsets, but it still doesn’t solve the inherent challenges of being at different stages in a project. This goes beyond engineering and really is about all the disciplines that need to work together. Marketing focused on a holiday season or sustaining a product while engineering is planning a new product is a great example of this even within a product that calls for a careful balance of accountability and operations.
These are just a few examples of seams that can arise. Anyone who believes you can use org structures to remove seams just needs to keep making a list of all the ways a product is built, sold, supported, and more—there are seams everywhere. Ultimately, each of these variable represents a dimension upon which you might choose to build an organization, but you can’t organize around all of them equally and simultaneously, even in the smallest organizations.
Picking an organization is really being clear up front about the various tradeoffs involved. It might mean letting go of some “motions” or it might mean the result is to put in place process and procedures that can help to avoid mitigate downstream challenges created by a seam.
What’s the upside?
What’s the upside for a discipline organization? There are three things we talked about quite a bit in the book that led to a conclusion that a (largely) discipline organization is optimal for scaling technology product development:
- Engineering and product development are the high order bit for technology companies. In tech, tech is what matters most. Tech rules in a world where the product you built can become not just obsolete but wholly undesirable just a few years after you built it or a product can be disrupted by a competitor seemingly out of the blue. You want to have the people building things focused on that and the organization needs to lead with technology. Even in a mature company with global sales, complex pricing and segmentation, demanding installed base, and even with all the pressure to consider all those attributes “up front” you want to have product be top of mind all the time.
- Fewer managers and deeper expertise can only be achieved by discipline. In practice you want the best developers, designers, or product managers you can find. It turns out that those people like to be surrounded by others like them. You don’t often find a lot of world class developers who want to work for marketing (or vice versa) and in particular you definitely can’t hire a lot of folks out of college who can work for (or be successfully managed by) someone who has not walked in their shoes (or preferably is still walking in their shoes). Everyone knows and respects the other perspectives and skills to deliver an entire product (so this is not about a hierarchy of roles), but when it comes to day-in-day-out surroundings, focusing on discipline expertise yields the best discipline efforts. Our measure in the book is literally, how far up the org chart do you go before you get to someone who never did your job (literally), regardless of the job discipline. Mathematically in any other structure, you will significantly increase the number of managers you have when you push down the responsibility for managing multiple disciplines—and by any study or any measure the more managers you have the worse off you are to some level of optimization. This comes from needing people to bring together multiple disciplines at more places in a structure. More general management also means just more management in general.
- In practice, in a large global organization you cannot really organize by “business”. In the General Motors examples you can really see this challenge. While there were businesses or product lines that really evolved out of a shared “platform”, the reality is that the product line leaders did not get to create new platforms or even have control of many of the resources one might assume were part of a business. There was always a lot of tension over the platform choices given the number of businesses that depended on the platform capabilities. Even manufacturing was not completely isolated across product lines (for example there is only one UAW to negotiate with). There was obviously a spectrum of just how far the business/product line went. But once you have a global organization, overlaying geography means you usually have the geography dominate the org—it means the people in France work for a person in France, no matter what the discipline organization looks like. Not only does this reduce the notion of a “product” but it by definition implies there will be managers making decisions across disciplines and products outside the role of the product leader. So the upside of a discipline organization is it removes the illusion of “owning a business” which is a fairly liberating construct as we talked about in the posts in the book when it comes to making product choices. Even companies that have large teams of manufacturing, sales, marketing, human resources, or more will generally centralize these disciplines and with that comes a reduced view of “the business”.
Some lessons learned
Even with the positives of a discipline organization there are also limitations and “gotchas” that exist. No system is perfect or universal which is why a combination of methods is something we talked about in the book and put into practice. The following are some lessons learned and considerations to take into account with a discipline styled tech organization:
Ship dates matter. The most critical element of collaborating across products/teams/groups/people is the schedule and the integrity of the schedule. Two entities working together are (essentially infinitely) more effective if they share the same schedule, same schedule vocabulary, and same schedule rigor. Imagine one group that “depends” on another group. The first group is planning their new work—the sky’s the limit, the schedule is XYZ, and all is great. The second group is trying to finish, bug counts are high, known work items exceed allocated time, and resources are tight. The first group shows up and says “we have some ideas and if we could just work on this together we could have an amazing set of scenarios for customers”. If you’ve ever been the second group you know how this feels—this is just another thing you can’t get done, you’re degrees of freedom are zero. You have a choice of saying “of course” knowing you can’t get the work done or of saying “no way” and looking like a jerk. You can try to help design something now, but that always takes the critical path resources. Nothing in this dialog ends well for anyone. Meanwhile the first group is seeing their dreams shattered for lack of collaboration—even though they were just at the idea stage. Whether you ship every month, year, or decade if you’re looking to work in deep integration that crosses your code bases, then doing so at the same time, with the same schedule is a great tool. This is a lot trickier than it sounds because different products have different ways to schedule (service deployment, hardware ranging, partner bring up, and more all have different schedule “tails”). Products can have different deadlines as well as dictated by their channel strategies (shipping for holiday means one thing for hardware, another thing for software delivered to hardware partners, and another thing for enterprise products).
Discipline expertise is everything. In any team size, but particularly in very small and very large organizations there can be a tendency for “jack of all trades” efforts. This is where people think or act as experts in a variety of disciplines—engineering crossing over into marketing, marketing crossing over into product management, sales crossing over into support, (or one level down where outbound marketing crosses into advertising, etc.). The reality is that if you’re going to execute along discipline lines then you really want to respect the skills and abilities of those lines. It turns out this is often the most difficult thing to pull off in a discipline organization. Something as “simple” as pricing or advertising, clearly marketing responsibilities, are almost trivial for everyone to have an opinion on, especially the more senior they get (we all buy stuff). A lot of time can be spent by the discipline experts working to get buy-in from parts of the team that probably have enough to worry about. The essence of this, which is a big part of our book, is not supporting the culture of escalation—that is making sure management does not allow decisions to percolate up the org structure just because of the desire to get buy-in across the different disciplines or because the choices involve other parts of the organization. Things should be decided closest to the work and decisions should be made within the context of accountability by disciplines in this structure, and those people are responsible for a global view of the issues and challenges.
Org depth and span are critical. The biggest balancing act in orgs of more than about 100 people is to figure out how many managers to have. At one extreme you have one engineering manager with like 80 reports. At the other extreme you can end up with I-formations where managers have one direct report. Neither is particularly healthy. When you scale up a discipline organization you are also battling the depth of the org tree for the discipline. While it is very cool to count up 3 or 4 levels and see an engineer, counting up 7 or 8 can get daunting because at that depth it means, ironically, engineering details might be discussed very high up in the org and you might worry those impact you. So in a sense, adding a seam of general management is somewhat comforting in that it gives you a clear place where your work “ends”. The other side of this balancing act is how many reports a manager has. You want this to be a number such that as high up the org as you can get managers “do work”. In our book, we talked a bunch about the notion of a “pure manager” which was a phrase that drove me bonkers—in the tech part of a tech company you want as few people as possible who do nothing but manage (work or people). Numerically, our view is that even with managing upwards of 50 people a dev manager should be contributing actual shipping code to a product routinely. The more people in a function you have the more you have to figure out where the “no work” seam is, and then take that into account when it comes to deciding things at that level.
Collaboration starts at staff meetings at all levels. At first we all tend to reject meetings of any sort as Dilbert-eseque exercises, when meetings are really an integral part of collaboration (see http://www.slate.com/articles/news_and_politics/readme/2002/04/an_ode_to_managers.html). In orgs of any size there are two kinds of regularly scheduled “rhythm” meetings. Looking at engineering as an example, first there is the meeting of all the devs working on an area that goes through the schedule and the details of the implementation. I would describe this as a dev lead and 5-7 individual contributors working on a feature area. Second, is a meeting of the sub-disciplines of engineering focused on dev, test, product management, design, operations where the focus is on the complete picture of where the project stands. Some might do this differently—for example just 1:1s plus the sub-disciplines. One level up this meeting looks like everyone working in development on a large area, and the sub-discipline leaders for all those areas. At some point the cross-discipline meeting turns into large functional areas of engineering, marketing, etc. The most critical thing about the meetings that cross (sub-) disciplines is that everyone needs to be working on the same thing and have the same understanding of what is going on. In other words, it turns out that staff meetings will naturally be effective tools for collaboration if folks are all working on the same product, schedule, architecture, partnerships and more. Once someone in the meeting has a different part of the seam or someone is managing a portfolio of products, they will necessarily be working at a level of abstraction that is challenging to make commitments, know the details of issues, or otherwise actually decide things. This is always a scaling challenge. Historically, it is what has led me to appreciate a mixed model of org structure so it tends to reduce the number of “product portfolios”. Said another way, a single manager who sees seams in his/her management domain (i.e. code bases, geographies, products) will naturally (necessarily?) tend to organize their teams along those lines and essentially “break” the discipline model.
One final thought on lessons learned, and that has to do with the reality of how and where work gets done in an organization of any size. It is really critical to view an organization from the bottom up—that is how things are really done. In a tech product, features you can see as a human in a product are usually done by a very small number of people. Those people work together day and night and all the time. From their perspective they would love to have the same manager, sit next to each other, and otherwise not have to work with other people. From their perspective, anything less is less than optimal. Yet at any scale, this just isn’t practical as tradeoffs need to be made (even in something as simple as how far you have to walk to you coworkers). Being able to articulate a clear understanding of how the work gets done, what expectations there are for cross-group work, and why things will be neither gummed up nor designed by a committee “up in the clouds” are all important questions and lessons learned.
In reference to how work gets done, one challenge I’ve experienced has been the proponents of agile methods who almost by definition did not appreciate a discipline-oriented organization. The root of those methods is to have all those working on something together in org structure, physical proximity, and management—yet the physics of org structures don’t make it possible to solve exclusively for that. Imagine proposing an org structure that to some argued against being agile.
That’s why context matters so much and there is not a prescriptive answer to the best or ideal org structure.
–Steven
Dealing with “shiny objects”: tips for using both sides of your brain
In technology product development there is always something new on the horizon—something better, faster, lighter, slicker, or just shinier. These shiny objects—technologies that are not quite products but feel like they could be the future—are the stuff that hot news stories are made of, that people will stop and ask about when they see one, or that cause a halo around a company. Balancing existing products and minding the business while developing wildly new products is always the biggest challenge facing established organizations. It is also a big challenge for each of us when we consider all we have to get done in the near term.
Recently there have been a lot of stories about companies doing “crazy” things while at the same time there are stories about the challenges in the “core” business. Google is famous for having very forward looking projects–internet balloons, driverless cars, connected glasses–while at the same time there is a huge transition going on in mobile computing that might impact the web search business that is so phenomenally successful.
When things are going well for a company, shiny objects are hailed as forward-looking innovations from an industry leader. Impatience dominates as people want to see these products in market sooner. When things are not going well for the company, perception radically shifts to one questioning focus on the “core business”. Impatience dominates as people want to see the company stay more in tuned to the challenges in the near term.
In practice, any organization of size engaged in any business with traction needs to be out there firing on all cylinders with the current business while also innovating radically different ideas. Finding a balance in resource allocation, company organization, and both internal and external communications is always going to be a challenge.
Research on the topic led to the work The Ambidextrous Organization, by Charles A. O’Reilly III and Michael L. Tushman. In this work, the authors researched how companies can innovate while maintaining their existing work. As you can imagine, there’s no simple formula or rule and context matters a great deal. The original paper from 2004 has some great case studies worth a read. One of the key learnings is that organizations can be ambidextrous, even if individuals are not always able to deliver on the current business while executing on a new venture at the same time.
In fact doing both at once is almost impossible—both are full time jobs, both require immense focus and dedication, and in reality there are different skills. From my perspective the real “trick” to being ambidextrous is to realize that an organization as whole (the company) needs efforts across a full spectrum of product development innovations. There’s a need for research labs doing pioneering work in deep technical challenges using their depth knowledge and a science-based approach. There’s a need for product development organizations to push the boundaries on existing technology bases in developing innovative new features. And there’s a need for product development organizations to themselves pioneer new products, line extensions or new lines, using their skills in bringing technology to market.
If you consider that a company is a portfolio of efforts and that different skills are required to make different advances, the notion that companies can lose focus or get distracted by shiny objects does not really make a lot of sense. It is certainly the case that one person can be drawn to be too focused on new things and not leave time for their responsibilities. The more senior a person, all the way up to a technology CEO, the more they wear many hats, context shift, and are generally required to focus on many things as a basic job description.
If you’re an engineer working on your company’s bread and butter there’s probably a time when you’ve been frustrated with the company’s shiny objects. When things are going well, the folks working on those look like they are creating the future. When things are not going well, you might think the company is squandering resources. Realizing that much of those observations are just perception, you can feel fortunate that your company leadership is working hard to be ambidextrous. You can do the same for your own growth and learning. Rather than get frustrated, get learning.
Here are a few things you can do yourself to exercise the creative side of your brain if you’re feeling a bit jealous of those shiny projects while you focus on getting the next money maker out the door:
Use competitive products. Nothing can make you think differently about your own work than to live and breathe your main competitor’s product. While not everyone can do this (if you work on jet engines that is a challenge), but do the very best you can to see your competitor’s products from the perspective of their customers. Products can have different conceptual models or approaches and thinking outside of your own box is the first step in being ambidextrous—because sometimes a breakthrough in your product is simply a recognition that your competitor has a better way to approach things.
Attend conferences outside your core expertise. Go to a conference that is in your domain but stay away from the sessions about your company and products. Much like using competitive products you can learn a great deal by attending a deep technical conference and freeing yourself from your own technologies and products. Don’t just stick to your own domain. You can expand your mind by shifting to another technical silo. If you’re a backend developer then go to a games conference and learn the techniques of storyboarding and animation for a change. If you’re industry has a tradeshow then see if you can explore that, but again shy away from your core expertise and expand your perspective. Of course whenever you attend a conference, you owe it to your team and your company to share the learning in some structured way—blog posts internally, team meetings, email, etc.
Explore on your own. Engineers are famous for their garages, basements, and spare rooms. These are where some of the most amazing innovations in technology were created. Use that space to be systematic in how you explore and learn. Build something. Work your way through an online course or book on a topic you don’t know about. Be multi-disciplinary about how you think about things by pulling in ideas from other fields as you explore. What is so amazing about today’s technology space is just how much can be done creatively in software by a single person.
Write and share. If you have the start of creative ideas, then write them down and share them. The essence of academic research boils down to sharing ideas and so borrow a page from them. Writing will help you to make connections with people who share your passion but will also help you to expand your own perspective on topics. Writing is hard and does not come naturally for everyone, but if you’re trying to think outside the box it is a great tool.
Keep a list. One tool I’ve found helpful is to keep a list of all the “interesting things” outside of my day to day to responsibilities. New products and technologies pop up all the time. A list gives you a tool you see potential trends and patterns from your perspective. Go back to the list routinely and remind yourself to follow up on a “sighting” and check back to see how it is evolving. Maybe you should use one of the above to devote more time to it?
Where do you find the time? First and foremost, all large companies allow for time for professional development. It is a matter of working with your manager to best use that time. After that, how you grow in your career and skillsets is a function of the time you’re willing to put in. The investment in time is one that pays back.
Back in the 1980’s the buzz in the exercise world was cross-training. Companies, like shoes, always have specialists working deeply across the spectrum of current products to crazy new ideas. No company can be totally focused on one place—that’s just not healthy. As an individual you should consider how to cross-train your brain when it comes to your own skills. It doesn’t mean you’ll be expert at everything, but you can think beyond that of a specialist.
Healthy companies have a balance of existing products, new products, and wild/breakthrough ideas yet to be products. It might be that some think a company isn’t focused if it is working on projects that seem far afield, but that often just depends on the context at the time. As an engineer you should consider your own growth and training in a similar way. Even though there is always more work to do than time, you owe it to your shareholders (you!) to exercise your brain by exploring new technologies and approaches, even while deadlines loom.
-Steven Sinofsky
Feel free to connect on LinkedIn or follow @stevesi on twitter.
“One Strategy” — organization structure and transition (book/blog post reprint)
A recent post by Ben Thompson touched on some of the issues in going from a product focused organization to a discipline focused organization. And while I don’t agree with the broad (and binary) view of orgs, there are several interesting things in general in the post which are worth discussing. Many of these issues are not about a big (or specific) company at all and I’ve seen the same things in startups with 5 people or 100 people. Organizations of all sizes have “seams” or “boundaries” — while one is product, others include disciplines (engineering, marketing, sales), code architecture or subsystems, geographies, target customers, external partners, revenue sources, budgets, ship dates, product cycle lengths, and more all represent places that multiple groups of people might arrive at different optimizations, choices, or decisions while representing ways in which groups of people can be organized.
This topic was on discussed at length in the book, One Strategy: Organization, Planning, and Decision Making (hurry “only 17 copies left”), authored by myself and Marco Iansiti we tackled some of the challenges faced in transitioning the Windows team to a new way of working and organization structure during the 2006-2007 timeframe. The “reprinted” post below is representative of the approach to organization and the transition the team undertook. I think it contributes to the overall dialog of the complexities and challenges one faces in organizing product development teams.
The book features a collection of blog posts from a blog I authored internally along with a broader view provided by Marco. The book focuses a great deal on our journey as a team to (according to the jacket copy):
Aligning a complex organization around one strategy requires all members of a team to participate—learning, sharing, communicating, and contributing to the team’s success. One Strategy provides a unique combination of real-world experience managing a large-scale organization with academic research in strategy and innovation to describe what it takes to align an organization around one strategy, manage its execution, and reach for “strategic integrity.”
Keep in mind that context plays a critical part in looking at how all these variables come together. Organizing a team is doing your best with imperfect information to optimize a seemingly infinite set of variables. Product development and business are both social sciences. In fact in reading this post, you can see the context change as we introduce the book and posts noting just some of the challenges such as moving to bring a regular release cycle to Windows and cut the release time by half, to scale software as a service, or to bring Internet Explorer to current web standards. Context matters as we say.
This post below is from page 25 of our book and talks about the transition the organization was making from a team composed of a large number of “product units” to a “functional” or “discipline” focused organization.
In this jargon, a “product unit” is a team consisting of the engineering disciplines and often related marketing (or at least dedicated marketing) with a general manager. A function or discipline means job functions such as development, testing, program (product) management, and more.
3/20/2007 12 months and about 120,000 words later…
Friday marks the first 12 months of our new Windows and Windows Live organization (and also the 100th post to this blog) so it seems like a good idea to take a step back and look at the progress we have made together and think about the work left to be done.
Before getting started, I wanted to thank everyone on the team and all of those that have been supportive of the team and the work we have been doing for the past year. Together we have embarked on a great deal of change and put in place many new operational methods, and none of that would have been possible without the open-minds and cooperative efforts of those involved. Thank you!
I also want to use this as a chance to reinforce the “open inbox” that I (and all the leaders in WWL) maintain. Some of the best input and best conversations I’ve had have been with people who just send mail or stop me in the halls. It is one thing to see averages and deltas from the mean on an employee survey, but the real improvements in our team come from written comments or conversations. This substance is what really has helped to make a big difference in how our team is evolving.
We have had a year that at times has seemed rather focused on process and operations, which is in a sense by definition, but also at times a bit less than ideal. Last spring we were still months from finishing Vista and our first wave of Live services would start to slip months beyond their originally planned dates. Yet we came through that and through the midst of significant changes in organization and structure we released Vista, a plethora of Live services, a major release of Live Search, and Internet Explorer 7. To a person everyone contributed to delivering an amazing amount of software. At the same time there was a consistently expressed desire to do things better, and so that has been the motivation for the focus on the “how” we get things done. As I said in our announcement in March we will aspire to have the best engineering organization in the company—one that is focused, with modesty, on discipline expertise, agility, creativity and above all is a learning organization. Across every dimension we have been working hard to instill a sense of clear accountability with the resources and framework to be successful. I also committed to help us achieve these goals with transparency of process and this blog has been part of this work. And of course we want to move forward with a renewed emphasis on planning our work, and working those plans.
With all of these changes it is important to point out that it takes time to see the results. Some would have hoped for faster results, and others would have hoped for less change. We are a work in progress for sure. Nothing says that more than the fact that we are just getting started with big releases of software—a new wave of Live services, a new release of Internet Explorer, a new release of Search, and of course a new release of Windows (and SP1). In the hallways, folks ask me every day “how’s it going?” and I generally think it is more than rhetorical—I think people really want to know how things are progressing. Things are progressing well. I am very optimistic. Things are upbeat. I do indeed have the benefit of a broader perspective and some “altitude” which helps. I know that some of the challenges many individuals face on a daily basis—the challenges that seem to get in the way of getting work done—are still there and did not disappear overnight. I know that some new challenges have appeared. But I don’t have to look far to hear feedback about things moving forward and heading in the right direction.
It is worth looking at three of the main areas of feedback that correspond to three of the biggest changes we have made as an organization and provide a “state of the organization” view of organization efficiency, planning, and decision making. It is hard to separate these changes because they are interrelated. We can make changes in our organization structure because we are more focused on executing on a plan. We can create a plan that reflects the whole team because we put in place more empowered decision makers. But I also recognize that for each of these areas we have much work to do, few concrete results, and for some the jury is still out. That’s why I think it is good to take a step back and make sure to communicate and acknowledge that the management team does understand where we are today and also to share the sense of optimism that we each have.
If you want the short version of this post…we have created an organization that is flatter, has fewer managers, and is much more focused on core engineering values. With this organization in place we have embarked on a product planning process that is about bringing the best ideas to our products in a timely and thoughtful manner. And because of our structure and because we are operating with a plan we are in a much better position to make and stick to decisions. Yet this is a work in progress and I recognize that for many the changes have not been enough or fast enough, or that the changes have not yet erased the challenges in daily work. It takes time for these changes to pay off and time for them to move through the whole organization. With the evidence of early results, such as the Live and Search plans and the progress we have made as a team on Windows and IE I believe we all have reasons to be optimistic and that we will see results of our efforts as we enter execution mode on our work. Our software will be used by over a billion people by the time we finish this next wave of products—that is an awesome responsibility and an amazing opportunity for us all in our careers.
Organization Efficiency and Engineering Focus
In many posts to this blog and in many of our team meetings we have talked a great deal about the organization’s statistics such as how many people at what level, how many direct reports managers have, how big teams should be, and how many managers and management layers there should be. This is an area where it is easy to be concrete and so was the first one we acted on as an organization. Across Windows and Windows Live (and COSD, Core OS Division) we have worked hard to put in place a team that values the engineering disciplines and streamlines our engineering organization and I think we have made progress.
Last year on average an individual contributor had 7 managers between him/her and me. On average we have reduced this to 3 or 4. I think that is probably the most dramatic change. It is also one that has come in handy as we recruit from colleges this year. It is amazing how sensitive college candidates are to this detail and how often I was asked on campuses and in email exchanges with candidates—being compared to Google (an organization that has 4000 engineers these days) favorably definitely helps. We are also asking more of our managers, but not as much as some folks might have thought—we do have more reports for most managers now, but on average this is only 1 or 2 more reports (because previously many managers had only 2 reports). I want to give a lot of credit to all of our managers—they have been leading a big change even in the face of some uncertainty. And many people on the team have new managers, which is a two-way street of newness, and everyone has done a great job working through those transitions. I’ve had some conversations with folks where they ask if we are moving to a model where if you are a manager then you are a “pure” manager and only manage people—nothing could be further from the truth and what we have tried to emphasize is the desire to have managers contributing at a much deeper technical level than in the past, and this is possible because of a combination of more managers working within an engineering discipline and a much more focused planning process that frees managers from the burden of “keeping things under control” to focus more on execution of the plan.
The biggest part of our organization’s change has been the focus away from silos of product units to a focus on disciplines working together. It goes without saying that this was controversial and also a change that for many amounted to resetting career goals. We have in place about 30 engineering triads of development, testing, and program management representing our 1000 or so developers. Some are still adjusting—wondering who will ultimately decide (they will) or what happens when dev/test/pm don’t agree (they will work it out, based on consensus), and so on. Until we go through the whole ship cycle, or at least the full planning cycle, it will be the case that some are still waiting for a VP to swoop in and take away the empowerment of the triad (it won’t happen :-)). It is super clear that most people understand the increased level of responsibility that they feel. I’ve had incredible discussions with GPMs who own planning themes or big bets and they are definitely seeing the reality that the buck stops with them—without their plans we simply won’t have features in that area. I’ve had conversations with SDETs (software design engineers in test) who talk about what it is like to be part of the planning process for the very first time. And in talking to developers who for the first time are taking a step back and looking at the code assets during MQ (milestone for quality) and thinking about what we should do. All of this is part of taking a discipline-specific view of the work that needs to happen. We are focused on mastering the crafts of dev, test, and pm rather than everyone gravitating to more generalist roles.
I’ve also talked to some members of the team who think we replaced one type of inefficiency with another—that is we replaced silos of product units with cross-team meetings. On the one hand there is some truth to this, but that comes from the fact that there is no org structure where we develop our products unencumbered by the relationships to other products. On the other hand, we are adjusting to operating in a way that optimizes for executing within a planned framework. We are still building trust across the teams and still learning how to work together. We were used to a manager clearing the way, usually by isolating the team or forging arm’s length relationships with other teams, rather than a focus on collaboration and consensus. Some folks have said it feels like we went from 1 boss to 3. My view is that we are now much more accurately reflecting the specializations and skills necessary to create world class software, but I recognize that this puts a high burden on managers staying in sync with their discipline peers and communicating. This is no different than the expectation in a tiny team of one dev (manager), one pm (manager), one test (manager) – except we are trying to scale this to a larger group. It might seem harder now, especially because we only see the work and not the end-result. I’ve personally experienced this transition before so perhaps that is why I have confidence that once we go through the product cycle it will be much clearer and we will all be surprised at how much more natural collaboration happens.
We are still adjusting to having to incorporate many different perspectives and inputs from our engineering team at each step in the product cycle. We are seeing test involved early on for the first time. We are seeing program management working to get out front while also accountable to development for detailed specifications. It is clear that every discipline is reaching new levels of discipline involvement and if you think about it in terms of the CSPs (Career Stage Profiles) we are seeing more people touch more of those areas than we have had previously. I think this is a good sign for the growth of individuals on our team and our longer term health as an organization.
We start the second year of our organization with a streamlined organization that is much more focused on engineering and collaboration. I know it will take time for every member of the team to experience the positives of these changes and it is easy to focus on the change and see the less than positive elements. It might even be the case that over time some will find this new level of accountability and empowerment to be too challenging. Of all the changes to the team this is the one that will have the biggest long-term benefits for the careers of engineers. If I could pick one thing that we still need to improve it is the communication throughout the team and across the disciplines. We are still not sending around (locally) enough meeting notes and not sharing information more freely. And part of that is asking people to be more receptive to “raw data” and less demanding of “tell me what is important” because with empowerment comes the need to process more data and manage the flow of information. For our process to work smoothly we do need more communication.
Planning
About six weeks after I moved into this new role I remember reading that when asked about the next release of Windows Steve Ballmer said “that will never happen again…it’ll never happen again.” If I wasn’t awake and alert, I definitely was after reading that.
Of course I know that my commitments (as published) were very much focused on planning. The option open to me was to simply put in place the best process we could and hope we could all follow it, without trying to make it seem like it was a “playbook”. That was a big challenge for me. I know many folks thought that I pulled the planning process out of my back pocket, and certainly I had my fair share of stories about Office, but the truth is that the process we embarked on tried to take into account the unique situations of each of our teams. The Live teams wanted to remain as agile as they had been. The Windows team needed to finish Vista. The Search team had monthly improvements and a well-known set of features to work on. Yet it was clear that the team at large was hoping for more of a definitive sense of “what will we accomplish” and “what does success look like”.
A big turning point and in a sense our first real team event was when Marco Iansiti from Harvard came and taught us about the benefits of planning from the perspective of two case studies. While we did not walk away from this day with the magic answers or the specific plans, we did develop a shared sense of the importance of planning and the value that thoughtful planning can bring to product development. Even though that was back in October, people still comment about “not in the direction of goodness” and “we need to be building more keels” in reference to the Challenger case and the Team NZ case. I learned a good lesson about team building in how having those shared experiences, even if not entirely applicable to day-to-day work, is very valuable.
These discussions led to the “WWL Planning Process” slide that we have used dozens of times in offsites and meetings. In a sense this slide made the planning process seem more rote and mechanical than it is in real life. Early on many worried (in email to me) that the process would not yield any creativity and that it squeezes the creativity out of product development. Many worried about the trust we were putting in the teams to develop the plan and had expectations of executives swooping in. And of course the biggest worry people expressed was that it all was going to take too long. We’re behind and need to get ahead so how can we afford the downtime to plan was a common refrain.
The first team to move from planning to plan was the Live Experience team. We made a deliberate choice to focus on getting the plan in place as the highest team priority (perhaps in contrast to the Windows team where we have been focusing more on developing the operational aspects of the larger team and COSD, Core OS Division). In a few short weeks it became clear that we did indeed unleash a lot of creativity. Our first lesson as a team was that the hardest part of the “WWL Planning Process” is figuring out what ideas to decide to do. It was really great to see the prototypes and the detailed feature lists. This creativity culminated in the Vision rollout (jointly presented by the WLP (Windows Live Platform) and WLX (Windows Live Experience) teams) that showed clear commitments to specific scenarios. We have tons of work to do and like any product cycle we will go through milestone checkpoints, recalibration, and so on. But we did learn together than putting the process in place did not constrain our creativity.
The core of the planning process is the idea that good ideas can come from anywhere and that the role of those leading the planning themes is to make sure they go out there and ferret out those ideas, and those with ideas need to seek out those working on the plans. The idea of “middles-out” planning is definitely new. JulieLar and ChrisJo and I have talked many times about how those on the team and others all think we have “the plan” in our Drafts folder waiting to be sent out, and sometimes there are those on the team that are waiting for us to hit send regardless of what others think up. We are deep in the process on the Windows product now and it is definitely the case that people are feeling the sense of accountability for the plans. One GPM who used to be a PUM told me that they feel way more responsible for the plan of their team then they ever have before. They know that the plan will fit within the vision and that they alone are responsible for that, and previously they felt that the “worklist” would just sort of get created and before they knew it their primary job was to avoid having too much work put on them making it impossible to get done the few things they thought should get done. This is just one case, but it is a general theme. Of course I still have to earn the trust of the team and so do all of my direct reports. I was once asked if I plan on [personally] redesigning the [Windows 7] Start button 80% through the project and I took an oath not to do that in front of the WEX (Windows Experience) team, but I still have to follow through on that. Our team is learning how to consider all points of view and bring those together into a plan. It might look a bit chaotic right now and we will iterate and get better. More than most changes, the “what goes into the plan” is likely to be the one that is the most opaque while it is transpiring. If you have any questions and are not sure about what is going on, please ask rather than assume nothing or something worse is going on.
We are also seeing the benefits of “downtime” despite the misnomer. The time is not idle at all—all the teams have done (or are in the progress of doing) some excellent MQ work. Each of the leaders of development has worked hard at documenting development practices that will be used for quality, security, performance, etc. Our test discipline has done some great work on automation and frameworks. On the Windows team we continue to dive into postmortem feedback around test tools and bug tracking and using the MQ time to be concrete about our goals and exit criteria. Yet it is fair to say that some are still frustrated by our lack of “coding” right now—some believe that “we know what features we want to do so we are wasting time not coding”. Of course it could very well be that we might end up doing precisely some of those features, but we also know that developing these features with up front thinking in terms of specifications and test plans will at the very least make delivering those features more reliable, if not make those features better. I know I have to ask for patience for some.
The most challenging area for me in terms of planning has been the expectations of the end result, the plan. By talking so much about the plan, I believe I have inadvertently raised the stakes of the plan (the vision document) too high. I think many are expecting the plan to be the most amazing document with detailed killer features that describe how we deliver a knock-out blow to the competition. The plan will not have that (sorry). I expect the plan to be detailed and to be clear in the value to customers. But the real details of what are home runs or merely solid hits are up to the team. If you could really mastermind a product plan to know you would have a hit then there would be many more successful companies (or maybe many fewer, just the ones with hit products). Perhaps this is the most counter-intuitive part of the plan. The plan is about removing risk (the schedule, the ability to get the work done, the resources, etc.) but it cannot remove the uncertainty (did we pick good features to do, will people like the features we pick, will we have expressed the features well, etc.) In the past few weeks I have definitely heard from people that they expect the plan/vision to be more “exciting” or more “killer”. I’ve never seen a plan that looks like a winner before you start that also looked achievable. The Office 2007 UI was just one pillar of the product and if you would have asked me in 2004 if the UI would be as paradigm shifting as it has been perceived I definitely would not have said that (until beta1, that is). We will all learn together the value of the plan and also how to recognize good plans and feel pumped to begin development even if we know that what we have accomplished is outlining the goals, if not the actual results.
The other area of planning yet to be tested, and the source of concern, has been flexibility. The reality is that when working with a plan our team will be more agile than if there was no plan in place, as counter-intuitive as that sounds. We will have a clear sense of our priorities and the costs of making changes and new decisions. We will be able to adapt to changes in the marketplace or in our progress because we will know what remains to be done. Some are still skeptical of this and so together we will learn and adapt going forward.
There is work to be done. We have to write the vision for Windows and Internet Explorer. We have to develop prototypes and make sure our release meets the business goals we have. In Windows we have had two planning checkpoints and we are zeroing in on the product vision and we can feel excitement building. Perhaps the biggest challenge ahead of us is in doing a detailed development schedule that we require and one that has very high scheduling integrity. This is going to be critical to our success and will ask the most of our disciplines—pm needs to have specifications (that can never be detailed enough), dev needs to have schedules (that can never be granular enough), and test will need to be forgiving that pm and dev are both not 100% certain. I am sure this will stretch the team and our triads in new ways, but we are all in this together.
Decision Making
No topic caused more angst in the Vista product postmortem than decision making. Often this is a code word for “random executive” or “deadlocked managers”. It also described the feeling that almost everyone has when you feel like you know the right answer but can’t get something done. Improving decision making cannot be done by putting in a decision making process (in fact many groups put those processes in place only to see those processes get overridden). Improving decision making takes organizational trust. It takes a common framework. It takes clear roles and responsibilities.
I would say we have the start of all of these in place. But this is also an area where it is easy to find many examples where things are not friction-free. We make big products. We have many competing needs. We will always have challenges in having an environment where one person has 100% control over everything they might do. I know that either frustrates or surprises people. I have been asked by many what it is like to be a “business leader” and I remind people that even at my job I have no say in tons of things that matter a lot to whether our work is successful (when thought of from the 4 P’s of marketing: product, price, promotion, placement I only have say in 25% of the business, at best). But we have built our team, both in terms of feature teams and in terms of engineering structure so that we can have a balance if we all operate from a shared plan. Decision making has the key ingredients of a plan and an engineering structure that reinforces roles and responsibilities. I know the jury is still out.
The first order of business for our team was putting in place the engineering-focused organization so it is super clear that decisions about engineering get made by engineers, and that those decisions can stick because they are grounded in the technical realities of our products. When it comes to the schedule, the test plans, and the architecture I know for sure that we will not be second-guessing these down the road.
The second priority is to establish a common framework for making decisions or a common set of priorities. The product vision that outlines business goals, tenets, and clear scenarios makes it a built-in prioritization tool for the product. The key here is that we agree on the priorities and on what it takes to get done. We agree at the outset that these goals, while aggressive, are achievable and that everyone has a deep understanding to begin the project and the resources necessary to complete the project in a timely manner.
Taken together we have moved from a model of “butts on the line” or the “hero” model of working. We won’t look to a single person to go above and beyond to accomplish our work. In terms of decision making this is very important because those modes of working have a way of tearing down any orderly decision making processes and replacing them with “out of my way this needs to get done” work styles that upend even the most robust plans.
And finally we are going to be clear about work that crosses the whole product we make. We are seeing this as we create the vision where we are going to prioritize the 2 or 3 “big bets” (as we have done with Live Wave 2) and making sure we share these bets and staff them accordingly. We have moved from a model where groups believe they decide their own set of features only to see that burdened by endless inbound reprioritization.
Without a doubt the biggest part of decision making that we are looking to change, and one that still is somewhat “foreign” to people is escalation. It is still the case that we have too many things where people think they need VP approval. If you want to spend $1M then that is probably VP approval, but if you want to decide on the features for your area you have the authority to do so. We also still have many decisions where people do not agree with the decision and escalate to reverse a decision—I hope folks understand that escalating a decision is not a way to reverse things. The hope is, again, that those making decisions have done the work necessary to understand points of view and take into account the full context of a decision. If you learn something new or have new data, then change your mind rather than force members of the team to drive an escalation process. The way to avoid escalation is in communicating and making sure you are taking into account all the stakeholders—freedom to make decisions is not freedom to ignore the landscape.
With our engineering focused organization we are also expecting more from our group managers with respect to decision making. They are on the hook to drive the processes of engineering and do so without pushing the process down the organization. We have minimized the “staff” functions for running our team. We can do so because we are working to make the process of following the plan less challenging by being more consistent and less confrontational. We are still early in this regard, but watching the visions come together gives me reason to believe these changes will come naturally from the work we have done to date.
This next year will be a year of execution. We are about to roll out the plan for the next wave of Search investments. We are approaching M1 completion for Live Wave 2. We will soon have a vision for Internet Explorer. And we are entering MQ for the next release of Windows. The best organizational learning happens while doing actual work and we are doing that now. So we have clearly left the realm of theoretical and meta-discussions and are turning the crank. It is exciting.
A big part of execution mode, so to speak, is that it is now up to the team to succeed. Management, process, and memos can only take us so far. Taking the development foundation we have built together and delivering products is up to every member of the team giving 100%.
This has been a challenging year for just about everyone on the team. It has also been a rewarding year. We are a team ready to execute. We are a team ready for the challenges of execution. And above all, ready to take those on together as a team.
–Steven
Juggling multiple platforms and the bumpy road ahead
Targeting multiple operating systems has been an industry goal or non-goal depending on your perspective since some of the earliest days of computing. For both app developers and platform builders, the evolution of their work follow typical patterns—patterns where their goals might be aligned or manageable in the short term but become increasingly divergent over time.
While history does not always repeat itself, the ingredients for a repeat of cross-platform woes currently exist in the domain of mobile apps (mobile means apps developed for modern sealed-case platforms such as iOS, Android, Windows RT, Windows Phone, Blackberry, etc.) The network effects of platforms and the “winner take all” state that many believe is reached (or perhaps desirable) influences the behavior and outcome of cross-platform app development as well as platform development.
Today app developers generally write apps targeting several of the mobile platforms. If you look at number of “sockets” over the past couple of years there was an early dominance of iOS followed by a large growth of Android. Several other platforms currently compete for the next round of attention. Based on apps in respective app stores these are two leaders for the new platforms. App developers today seeking the most number of client sockets target at least iOS and Android, often simultaneously. It is too early to pick a winner.
Some would say that the role of the cloud services or the browser make app development less about the “client” socket. The data, however, suggests that customers prefer the interaction approach and integration capability of apps and certainly platform builders touting the size of app stores further evidences that perspective. Even the smallest amount of “dependency” (for customers or technical reasons) on the client’s unique capabilities can provide benefits or dramatically improve the quality of the overall experience.
In discussions with entrepreneurs I have had, it is clear the approach to cross-platform is shifting from “obviously we will do multiple platforms” to thinking about which platform comes first, second, or third and how many to do. Chris Dixon recently had some thoughts about this in the context of modern app development in general (tablets and/or phones). I would agree that tablets drive a different type of app over time simply because the scenarios can be quite different even with identically capable devices under the hood. The cross-platform question only gets more difficult if apps take on unique capabilities or user experiences for different sized screens, which is almost certainly the case.
History
The history of cross-platform development is fairly well-known by app developers.
The goal of an app developer is to acquire as many customers as possible or to have the highest quality engagement with a specific set of customers. In an environment where customers are all using one platform (by platform we mean set of APIs, tools, languages that are used to build an app) the choice for a developer is simple, which is to target the platform APIs in a fully exploitive manner.
The goal of being the “best” app for the platform is a goal shared by both app and platform developers. The reason for this is that nearly any app will have app competitors and one approach to differentiation will be to be the app that is best on the platform—at the very least this will garner the attention of the platform builder and result in amplification of the marketing and outreach of a given app (for example, given n different banking apps, the one that is used in demonstrations or platform evangelism will be the one that touts the platform advantages).
Once developers are faced with two or more platforms to target, the discussion typically starts with attempting to measure the size of the customer base for each platform (hence the debate today about whether market share or revenue define a more successful platform). New apps (at startups or established companies) will start with a dialog that depending on time or resources jumps through incredible hoops to attempt to model the platform dynamics. Questions such as which customers use which platforms, velocity of platform adoption, installed base, likelihood of reaching different customers on platforms, geography of usage, and pretty much every variable imaginable. The goal is to attempt to define the market impact of either support multiple platforms or betting on one platform. Of course none of these can be known. Observer bias is inherent in the process only because this is all about forecasting a dynamic system based on the behavior of people. But basing a product plan on a rapidly evolving and hard to define “market share” metric is fraught with problems.
During this market sizing debate, the development team is also looking at how challenging cross platform support can be. While mostly objective, just as with the market sizing studies, bias can sneak in. For example, if the developers’ skills align with one platform or a platform makes certain architectural assumptions that are viewed favorably then different approaches to platform choices become easy or difficult.
Developers that are fluent in HTML might suggest that things be done in a browser or use a mobile browser solution. Even the business might like this approach because it leverages an existing effort or business model (serving ads for example). Some view the choices Facebook made for their mobile apps as being influenced by these variables.
As the dialog continues, developers will tend to start to see the inherent engineering costs in trying to do a great job across multiple platforms. They will start to think about how hard it is to keep code bases in sync or where features will be easier/harder or appear first or even just sim-shipping across platforms. Very quickly developers will generally start to feel pulled in an impossible direction by having to be across multiple platforms and that it is just not viable to have a long-term cross-platform strategy.
The business view will generally continue to drive a view that the more sockets there are the better. Some apps are inherently going to drive the desire or need for cross-platform support. Anything that is about communications for example will generally argue for “going where the people are” or “our users don’t know the OS of their connected endpoints” and thus push for supporting multiple platforms. Apps that are offered as free front ends for services (online banking, buying tickets, or signing up for yoga class) will also feel pressures to be where the customers are and to be device agnostic. As you keep going through scenarios the business folks will become convinced that the only viable approach is to be on all the popular platforms.
That puts everyone in a very tense situation—everyone is feeling stressed about achieving success. Something has to give though.
We’ve all been there.
Pattern
The industry has seen this cross-platform movie several times. It might not always be the same and each generation brings with it new challenges, new technologies, and potentially different approaches that could lead to different outcomes. Knowing the past is important.
Today’s cross-platform challenge can be viewed differently primarily because of a few factors when looking at the challenge from an app developer / ISV:
- App Services. Much of the functionality for today’s apps resides on software as a service infrastructure. The apps themselves might be viewed as fairly lightweight front ends to these services, at least for some class of apps or some approaches to app building. This is especially true today as most apps are still fairly “first generation”.
- Languages and tools. Today’s platforms are more self-contained in that the languages and tools are also part of the platform. In previous generations there were languages that could be used across different platforms (COBOL, C, C++) and standards for those languages even if there were platform-specific language extensions. While there are ample opportunities for shared libraries of “engine” code in many of today’s platforms, most modern platforms are designed around a heavy tilt in favor of one language, and those are different across platforms. Given the first point, it is fair to say that the bulk of the code (at least initially) on the device will be platform specific anyway.
- Integration. Much of what goes on in apps today is about integration with the platform. Integration has been increasing in each generation of platform shifts. For example, in the earliest days there was no cross-application sharing, then came the basics through files, then came clipboard sharing. Today sharing is implicit in nearly every app in some way.
Even allowing for this new context, there is a cycle at work in how multiple, competing platforms evolve.
This is a cycle so you need to start somewhere.
Initially there is a critical mass around one platform. As far as modern platforms go when iOS was introduced it was (and remains) unique in platform and device attributes so mobile apps had one place to go and all the new activity was on that platform. This is a typical first-mover scenario in a new market.
Over time new platforms emerge (with slightly different characteristics) creating a period of time where cross-platform work is the norm. This period is supported by the fact that platforms are relatively new and are each building out the base infrastructure which tends to look similar across the new platforms.
There are solid technical reasons why cross-platform development seems to work in the early days of platform proliferation. When new platforms begin to emerge they are often taking similar approaches to “reinventing” what it means to be a platform. For example, when GUI interfaces first came about the basics of controls, menus, and windows were close enough that knowledge of one platform readily translated to other platforms. It was technically not too difficult to create mapping layers that allowed the same code to be used to target different platforms.
During this phase of platform evolution the platforms are all relatively immature compared to each other. Each is focused on putting in place the plumbing that approaches platform design in this new shared view. In essence the emerging platforms tend to look more similar that different. The early days of web browsers–which many believed were themselves platforms–followed this pattern. There was a degree of HTML that was readily shared and consistent across platforms. At least this was the case for a while.
During this time there is often a lot of re-learning that takes place. The problems solved in the previous generation of platforms become new again. New solutions to old problems arise, sometimes frustrating developers. But this “new growth” also brings with it a chance to revisit old assumptions and innovate in new ways, even if the problem space is the same.
Even with this early commonality, things can be a real challenge. For example, there is a real desire for applications to look and feel “native”. Sometimes this is about placement of functionality such as where settings are located. It could be about the look or style of graphical elements or the way visual aspects of the platform are reflected in your app. It could also be about highly marketed features and how well your app integrates as evidence for supporting the platform.
Along the way things begin to change and the platforms diverge because of two factors. First, once the plumbing common to multiple early platforms is in place, platform builders begin to express their unique point of view of how platform services experiences should evolve. For example, Android is likely to focus on unique services and how the client interacts with and uses those services. To most, iOS has shown substantially more innovation in client-side innovation and first-party experiences. The resulting APIs exposed to developers start to diverge in capabilities and new API surface areas no longer seem so common between platforms.
Second, competition begins to drive how innovation progresses. While the first mover might have one point of view, the second (or third) mover might take the same idea of a service or API but evolve it slightly differently. It might integrate with backends differently or it might have a very different architecture. The role of voice input/reco, maps, or cloud storage are examples of APIs that are appearing on platforms but the expression of those APIs and capabilities they support are evolving in different ways that there are no obvious mappings between them.
Challenges
As the platforms diverge developers start to make choices about what APIs to support on each platform or even which platforms to target. With these choices come a few well known challenges.
- Tools and languages. Initially the tools and languages might be different but things seem manageable. In particular, developers look to put as much code in common languages (“platform agnostic code”) or implement code as a web service (independent of the client device). This is a great strategy but does not allow for the reality that a good deal of code (and differentiation) will serve as platform-specific user experience or integration functionality. Early on tools are relatively immature and maybe even rudimentary which makes it easier to build infrastructure around managing a cross-platform project. Over time the tools themselves will become more sophisticated and diverge in capabilities. New IDEs or tools will be required for the platforms in order to be competitive and developers will gravitate to one toolset, resulting in developers themselves less able to context switch between platforms. At the very least, managing two diverging code bases using different tools becomes highly challenging–even if right now some devs think they have a handle on the situation.
- User interaction and design (assets). Early in platform evolution the basics of human interaction tend to be common and the approaches to digital assets can be fairly straight forward. As device capabilities diverge (DPI, sensors, screen sizes) the ability for the user interaction to be common also diverges. What works on one platform doesn’t seem right on another. Tablet sized screens introduce a whole other level of divergence to this challenge. Alternate input mechanisms can really divide platform elements (voice, vision, sensors, touch metaphors).
- Platform integration. Integrating with a platform early on is usually fairly “trivial”. Perhaps there are a few places you put preferences or settings, or connect to some platform services such as internationalization or accessibility. As platforms evolve, where and how to integrate poses challenges for app developers. Notifications, settings, printing, storage, and more are all places where finding what is “common” between platforms will become increasingly difficult to impossible. The platform services for identity, payment, and even integration with third party services will become increasingly part of the platform API as well. When those APIs are used other benefits will accrue to developers and/or end-users of apps—and these APIs will be substantially different across platforms.
- More code in the service. The new platforms definitely emphasize code in services to provide a way to be insulated from platform changes. This is a perfect way to implement as much of your own domain as you can. Keep in mind that the platforms themselves are evolving and growing and so you can expect services provided by the platform to be part of the core app API as well. Storage is a great example of this challenge. You might choose to implement storage on your own to avoid a platform dependency. Such an approach puts you in the storage business though and probably not very competitively from a feature or cost perspective. Using a third party API can pose the same challenge as any cross-platform library. At the same time, the platforms evolve and likely will implement storage APIs and those APIs will be rich and integrate with other services as well.
- Cross-platform libraries. One of the most common approaches developers attempt (and often provided by third parties as well) is to develop or use a library that abstracts away platform differences or claims to map a unique “meta API” to multiple platforms. These cross—platform libraries are conceptually attractive but practically unworkable over time. Again, early on this can work. Over time the platform divergence is real. There’s nothing you can do to make services that don’t exist on one platform magically appear on another or APIs that are architecturally very different morph into similar architectures. Worse, as an app developer you end up relying on essentially a “shadow” OS provided by a team that has a fraction of the resources for updates, tooling, documentation, etc. even if this team is your own dev team. As a counter example, games commonly use engines across platforms, but they rely on a very narrow set of platform APIs and little integration. Nevertheless, there are those that believe this can be a path (as it is for games). It is important to keep in mind that the platforms are evolving rapidly and the customer desire for well-integrated apps (not just apps that run).
- Multiple teams. Absent the ability to share app client code (because of differing languages), keeping multiple teams in sync on the same app is extremely challenging. Equally challenging is having one team time slice – not only is that mentally inefficient, maintaining up to date skills and knowledge for multiple platforms is challenging. Even beyond the basics of keeping the feature set the same, there are problems to overcome. One example is just timing of releases. It might be hard enough to keep features in sync and sim ship, but imagine that the demand spike for a new release of your app when the platform changes (and maybe even requires a change to your app). You are then in a position to need a release for one platform. But if you are halfway done with new features for your app you have a very tricky disclosure and/or code management challenge. These challenges are compounded non-linearly as the number of platforms increases.
These are a few potential challenges. Not every app will run into these and some might not even be real challenges for a particularly app domain. By and large, these are the sorts of things that have dogged developers working cross-platform approaches across clients, servers, and more over many generations.
What’s next?
The obvious question will continue to be debated, which is if there is a single platform winner or not. Will developers be able to pick a platform and reach their own business and product goals by focusing on one platform as a way of avoiding the issues associated with supporting multiple platforms?
The only thing we know for sure is that the APIs, tools, and approaches of different platforms will continue to evolve and diverge. Working across platforms will only get more difficult, not easier.
The new platforms moved “up the stack” and make it more difficult for developers to isolate themselves from the platform changes. In the old days, developers could re-implement parts of the platform within the app and use that across platforms or even multiple apps. Developers could hook the system and customize the behavior as they saw fit. The more sealed nature of platforms (which delivers amazing benefits for end-users) makes it harder for developers to create their own experience and transport it across platforms. This isn’t new. In the DOS era, apps implemented their own printing subsystems and character-based user models all of which got replaced by GUI APIs all to the advantage of developers willing to embrace the richer platforms and to the advantage of customers that gained a new level of capabilities across apps.
The role of app stores and approval processes, the instant ability for the community to review apps, and the need to break through in the store will continue to drive the need to be great apps on the chosen platforms.
Some will undoubtedly call for standards or some homogonization of platforms. Posix in the OS world, Motif in the GUI world, or even HTML for browsers have all been attempts at this. It is a reasonable goal given we all want our software investments to be on as many devices as possible (and this desire is nothing new). But is it reasonable to expect vendors to pour billions into R&D to support an intentional strategy of commoditization or support for a committee design? Vendors believe we’re just getting started in delivering innovation and so slowing things down this way seems counter-intuitive at best.
Ultimately, the best apps are going to break through and I think the best apps are going to be the ones that work with the platform not in spite of it and the best apps won’t duplicate code in the platform but work with platform.
It means there some interesting choices ahead for many players in these ecosystems.
–Steven
# # # # #