Skip to content
Product cover

How Microsoft Makes Large Teams Work Like Small Teams

What can Microsoft teach us about nurturing creativity in people and teams and integrating their work, while maintaining schedules and coordinating frequent changes? Cusumano explores the Microsoft approach to product development, called synch-and-stabilize, which is based on two strategies:

1. Focus creativity by evolving features and "fixing" resources.

2. Do everything in parallel with frequent synchronizations.

This approach allows people on large product development teams to work individually and people on smaller teams to work on different features. Those features are then integrated into the product at various milestones rather than at the end of the project. Teams begin by creating a vision statement that defines the goals of the new product and its features. Next, the program managers and developers write specs outlining product features, schedules, and staffing. Project managers divide the product and project into parts and set milestones for the project schedule. All feature teams go through a complete cycle of development. Throughout, feature teams synchronize their work by building the product and finding and fixing errors daily or weekly. They are generally free to set their own schedules within certain predetermined time frames.

The second strategy brings some discipline to the process without dictating every developer's schedule. People are free to work in parallel yet function as one large team. Hence, Microsoft enforces a few rigid rules that enforce coordination and communication such as adherence to the "daily build" and immediate repair of bugs.

The key elements of the Microsoft approach are:

-- Limit the size and scope of projects by setting clear boundaries on what each project will accomplish and organizing around product units that define how many people work on the project and how much time they spend.

-- Break products down into features and functions and organize them into components that more than one product can use.

-- Divide projects so they mirror the structure of products, prioritize features and divide them into clusters, and set target dates for each feature.

-- Establish small multifunctional groups and give each team and individual autonomy and responsibility.

-- Set a few rigid rules -- daily builds, immediate repair of bugs, and deadlines for stabilizations -- to ensure that teams coordinate their work.

-- To ensure good communication, blur divisions so people share responsibilities, have only one site for major development efforts, use a common development language, and maintain a loosely organized structure.

-- Allow for flexibility so specs and details can evolve along with the project and build buffer time into the schedule to accommodate unforeseen changes and exploration of alternative practices and tools.

In the end, Microsoft's principles apply not just to software development but to any fast-paced industry in which there are frequent product builds.

Purchase Options

Educator and Student Discounts Available. Learn more »

  BENCHMARKS  
Loading Time: Base Classes  0.0006
My Controller Construct  0.0003
Build Nav  0.0005
Controller Execution Time ( Products / Route )  0.1013
Total Execution Time  0.1019
  GET DATA  
No GET data exists
  MEMORY USAGE  
1.5661 MB
  POST DATA  
No POST data exists
  URI STRING  
store/how-microsoft-makes-large-teams-work-like-small-teams
  CLASS/METHOD  
products/route
  DATABASE:  MITSLOAN_DEV   QUERIES: 68  (Hide)
0.0005  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0002  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0002  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0002  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0002  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0002  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0002  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0002  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0001  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0002  

SELECT *
FROM (`carts`)
WHERE `cart_id` =  '74510022d7cf6393cb3d1c31cc88ac16'
ORDER BY `created_atDESC 
0.0002  

SELECT SQL_CALC_FOUND_ROWS cat_id
FROM 
(`product_categories`)
WHERE `status_id` =  'A'
AND `url_friendly` =  'how-microsoft-makes-large-teams-work-like-small-teams'
AND `parent_id` =  
0.0086  

SELECT c.parent_idc.format_id
                    FROM products 
AS pproducts AS c
                    WHERE p
.prod_id c.parent_id AND
                        
c.avail_id IN ('A','B','D') AND
                        
c.type_id 'V' AND
                        (
                            
c.sku 'how-microsoft-makes-large-teams-work-like-small-teams' OR
                            if(
c.format_id 'Certificate'''p.url_friendly) = 'how-microsoft-makes-large-teams-work-like-small-teams'
                        
)
                    
LIMIT 1 
0.0002  

SELECT `parent_id`
FROM (`products`)
WHERE `prod_id` =  2307 
0.0002  

SELECT *
FROM (`products`)
WHERE `products`.`prod_id` =  '2307' 
0.0002  

SELECT *
FROM (`authors`)
JOIN `products__authorsON `authors`.`author_id` = `products__authors`.`author_id`
WHERE `products__authors`.`prod_id` =  '2307'
ORDER BY `sortAS
0.0001  

SELECT `cat_id`
FROM (`product_categories__products`)
WHERE `prod_id` =  '2307' 
0.0001  

SELECT *
FROM (`product_flags__products`)
WHERE `prod_id` =  '2307' 
0.0002  

SELECT `sku`
FROM (`products__xsell`)
WHERE `prod_id` =  '2307'
ORDER BY IF(position 010) AS, `position
0.0717  

SELECT `products`.`parent_id`
FROM (`transaction_lines`)
JOIN `productsON `products`.`sku` = `transaction_lines`.`sku`
JOIN `product_categories__productsON `products`.`parent_id` = `product_categories__products`.`prod_id`
WHERE `products`.`avail_id` =  'A'
AND TO_DAYS(transaction_lines.updated_at) < (TO_DAYS(NOW()) - 90)
AND `
product_categories__products`.`cat_idIN ('249') 
GROUP BY `products`.`parent_id`
ORDER BY COUNT(*) DESC
LIMIT 6 
0.0003  

SELECT `parent_id`
FROM (`products`)
WHERE `prod_id` =  '361' 
0.0002  

SELECT *
FROM (`products`)
WHERE `products`.`prod_id` =  '361' 
0.0002  

SELECT *
FROM (`authors`)
JOIN `products__authorsON `authors`.`author_id` = `products__authors`.`author_id`
WHERE `products__authors`.`prod_id` =  '361'
ORDER BY `sortAS
0.0002  

SELECT `parent_id`
FROM (`products`)
WHERE `prod_id` =  '3961' 
0.0002  

SELECT *
FROM (`products`)
WHERE `products`.`prod_id` =  '3961' 
0.0003  

SELECT *
FROM (`authors`)
JOIN `products__authorsON `authors`.`author_id` = `products__authors`.`author_id`
WHERE `products__authors`.`prod_id` =  '3961'
ORDER BY `sortAS
0.0001  

SELECT `parent_id`
FROM (`products`)
WHERE `prod_id` =  '35' 
0.0002  

SELECT *
FROM (`products`)
WHERE `products`.`prod_id` =  '35' 
0.0002  

SELECT *
FROM (`authors`)
JOIN `products__authorsON `authors`.`author_id` = `products__authors`.`author_id`
WHERE `products__authors`.`prod_id` =  '35'
ORDER BY `sortAS
0.0001  

SELECT `parent_id`
FROM (`products`)
WHERE `prod_id` =  '179' 
0.0001  

SELECT *
FROM (`products`)
WHERE `products`.`prod_id` =  '179' 
0.0003  

SELECT *
FROM (`authors`)
JOIN `products__authorsON `authors`.`author_id` = `products__authors`.`author_id`
WHERE `products__authors`.`prod_id` =  '179'
ORDER BY `sortAS
0.0001  

SELECT `parent_id`
FROM (`products`)
WHERE `prod_id` =  '489' 
0.0002  

SELECT *
FROM (`products`)
WHERE `products`.`prod_id` =  '489' 
0.0002  

SELECT *
FROM (`authors`)
JOIN `products__authorsON `authors`.`author_id` = `products__authors`.`author_id`
WHERE `products__authors`.`prod_id` =  '489'
ORDER BY `sortAS
0.0004  

SELECT `parent_id`
FROM (`products`)
WHERE `prod_id` =  '2465' 
0.0002  

SELECT *
FROM (`products`)
WHERE `products`.`prod_id` =  '2465' 
0.0002  

SELECT *
FROM (`authors`)
JOIN `products__authorsON `authors`.`author_id` = `products__authors`.`author_id`
WHERE `products__authors`.`prod_id` =  '2465'
ORDER BY `sortAS
0.0003  

SELECT SQL_CALC_FOUND_ROWS media_idposition
FROM 
(`media`)
WHERE `foreign_key_table` =  'products'
AND `foreign_key_column` =  'prod_id'
AND `foreign_key_value` =  '2307'
AND `kind` =  'image_600x600'
ORDER BY IF(position 010) AS, `position
0.0001  

SELECT *
FROM (`media`)
WHERE `media`.`media_id` =  '1041' 
0.0001  

SELECT *
FROM (`mime_types`)
WHERE `mime_types`.`extension` =  'jpg' 
0.0001  

SELECT *
FROM (`media_metadata`)
WHERE `media_id` =  '1041' 
0.0003  

SELECT SQL_CALC_FOUND_ROWS media_idposition
FROM 
(`media`)
WHERE `foreign_key_table` =  'products'
AND `foreign_key_column` =  'prod_id'
AND `foreign_key_value` =  '2307'
AND `kind` =  'gallery_image'
ORDER BY IF(position 010) AS, `position
0.0003  

SELECT *
FROM (`products`)
WHERE `avail_idIN ('A''B''C''H') 
AND `
parent_id` =  '2307'
AND `type_id` =  'V'
ORDER BY IF(position 010) AS, `position`, `title
0.0001  

SELECT `c`.`format_id`, `c`.`price`, `c`.`sale_price`
FROM (`productsAS c)
WHERE `c`.`prod_id` =  '2308'
LIMIT 1 
0.0002  

SELECT SQL_CALC_FOUND_ROWS media_idposition
FROM 
(`media`)
WHERE `foreign_key_table` =  'products'
AND `foreign_key_column` =  'prod_id'
AND `foreign_key_value` =  '2308'
AND `kind` =  'thumbnail'
ORDER BY IF(position 010) AS, `position
0.0002  

SELECT `product_categories__products`.`cat_id`
FROM (`product_categories__products`)
JOIN `product_categoriesON `product_categories__products`.`cat_id` = `product_categories`.`cat_id`
WHERE `product_categories__products`.`prod_id` =  '2307'
AND `product_categories`.`parent_id` =  1
AND `product_categories__products`.`cat_idNOT IN (1261)  
0.0004  

SELECT `cat_idAS id, `parent_idAS parent, `status_id`, `name`, `description`, `url_friendly`, `page_title`, `meta_keywords`, `meta_description`, `position`, `updated_at`
FROM (`product_categories`)
WHERE `cat_id` != 1
ORDER BY 
`parent_id`, IF(position 010) AS, `position`, `name
0.0003  

SELECT *
FROM (`product_categories`)
WHERE `status_id` =  'A'
AND `parent_id` =  1
AND `cat_idNOT IN (1261) 
ORDER BY `name
0.0002  

SELECT *
FROM (`site_settings`)
WHERE `option_key` =  'announcement' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)