Sunday, May 20, 2018

Team of Teams

A Team of Teams is, "An organization within which the relationships between constituent teams resembled those between individuals on a single team: teams that had traditionally resided in separate silos would now have to become fused to one another via trust and purpose” (p132). To win the war on terrorism General McChrystal was quick to realize their traditional management style and team dynamics (see Figure 1) needed to adapt to keep pace with the more agile and adaptive Al Qaeda enemy in Iraq. This article is part 1 in my series of Team of Teams. Part 1 highlights General McChrystal's transformation to a Team of Teams and its benefits. Part 2 (coming soon) focuses on strategies we can adopt to transform IT organizations into Software Development Team of Teams.

Team of Teams structure
Figure 1. From Command to Team of Teams

Why Team of Teams?

General McChrystal's teams (SEALs, Army Special Forces, Rangers) were able to execute operations 17 times faster. With their old command structure they managed 18 raids per month; with a Team of Teams they preformed 300 raids a month. These efficiency gains were the direct result of their improved information sharing, trust, and empowerment resulting in more effective decision making.

The Ingredients

A Team of Teams strategy is built upon three key ingredients: shared consciousness, trust, and empowerment (see Figure 3). Let’s review each and highlight the implementation strategies General McChrystal’s adopted to transform an organization of thousands across 70 remote locations.

Team of Teams ingredients
Figure 3. Team of Teams ingredients

Shared Consciousness

This ingredient is a generalized awareness about what other teams are doing and sharing information. The book reviewed two tragic examples that were direct results of failed shared consciousness - the Apollo project and GMs faulty ignition switch. Both examples highlight the importance of shared consciousness on critical projects.

How much time should we allocate to information sharing across teams? The best answer I found was this quote pertaining to the Apollo project, "Specialists continued to do specialized work, but they needed an understanding of the project as a whole, even if establishing that understanding took time away from other duties and was, in some ways, “inefficient”. NASA leadership understood that, when creating an interactive product, confining specialists to a silo was stupid: high-level success depended on low-level inefficiencies. Even the engineers most ardently opposed to systems management found that many technical problems could be solved only by sharing information" (p149).

Here are a few strategies General McCrystal applied to improve their shared consciousness:

  • They moved teams to open workspaces (p159).
  • General McCrystal never used his private office, instead he sat in their open workspace and took all calls on speakerphone for everyone to hear (p163).
  • They had a daily O&I (operations and intelligence) briefing that was the core of their transformation. This meeting pumped information about the entire scope of operations to all members of the Task Force and partner agencies. It also offered everyone the chance to contribute. The O&I was a hour and a half video conference across seventy remote locations with thousands of people (p171, p227-228).
  • They didn't want all teams to become generalists. Rather, they wanted to fuse generalized awareness with specialized expertise (p153).

Trust

Trusted relationships across teams is a positive enabler for information sharing and promotes team empowerment. Trust is the most important ingredient of the three. Without trust shared consciousness and empowerment will not exist.

Here are a few strategies General McCrystal applied to improve their trust:

  • To build trust between the different teams (SEALS, Army Rangers, Army Special Forces) they took one member from each team and embedded them on the others for 6 months. Each group was incentivized to send their best resource because they were representing their organization. There was great resistance to this but as a result the teams built stronger connections (p176).
  • More than directing, leaders must exhibit personal transparency. Team members must be allowed to monitor the leader. This is the new ideal (p232). The General's transparency was demonstrated during their O&I briefings, open workspace participation, and broadcasting calls on speakerphone.

Empowerment

Empowerment is when leadership gives the team approval in decision making. When Task Force units (SEALS, Army Special Forces, Rangers) would wake up General McChrystal for air strike approval he’d always ask if they wanted him to approve the strike. Life or death decisions confirmed the role as an important leader but the General often questioned his value in the process because he’d rarely have groundbreaking insight. His approval was a rubber stamp that slowed the process.

Here are a few strategies General McCrystal applied to enable empowerment:

  • With shared information teams could “do the right thing” rather than “do things right”. People at every level of the organization had the information and connectivity to determine what the right thing was, in real time. But, held back by their internal processes, they lacked the ability to act on that determination (p203).
  • The General was always ultimately responsible and more often than not those below him reached the same conclusion. This way their team would be empowered to do what was needed (p209).
  • Eventually a rule of thumb emerged: "If something supports our effort, as long as it is not immoral or illegal," you could do it (p214).
  • An individual or team who makes a decision becomes more invested in its outcome (p215).

Sustainable Garden

With our three key ingredients in hand, the most important step is growing and maintaining the sustainable garden (see Figure 4). This becomes the primary responsibility for leaders. General McChrystal spent most of his efforts growing and maintaining his Team of Teams. Without constant watering, fertilizing, and weeding the garden becomes unsustainable and breaks down.

Sustainable garden
Figure 4. Leaders tend the sustainable garden

With three key ingredients, cultural change, transparent leadership and continuous gardening the General's Task Force transformed itself into an organic entity that dramatically improved their speed and precision. In part 2, we'll focuses on strategies we can adopt to transform IT organizations into Software Development Team of Teams.

Monday, March 19, 2018

App Reviews - From OK to Great in 12 days

App review prompt

What are the characteristics of a successful app? Is it revenue, number of downloads, app rating, active user count, or your crash-free rating? While each metric plays a role in overall success the important factor is we have the ability to improve the metrics that are most valuable to us. For example, a primary goal for our HealthPartners app this year was to improve our 3.8 app rating. Let's explore the strategy we applied at HealthPartners that improved our app rating to 4.6 in just 12 days. This strategy is actually easier done than said.

Identify the top 3 'Make Good Happen' moments in your app

The most important tip for a successful user review is a timely prompt after the user has finished a simple and valuable workflow. For example, in our HealthPartners app we identified these following workflows as our top 'Make Good Happen' moments:

  1. After a user refills a prescription
  2. After a user schedules a clinic appointment
  3. After a user submits an account reimbursement

After users complete these simple and valuable workflows they will be more likely to submit a positive app review. According to our iTunes Connect metrics 93% of our reviews have been 4 stars or higher.

Trigger app review prompt

Prompting an app review requires minimal code.

if #available(iOS 10.3, *) {
    SKStoreReviewController.requestReview()
}

Apple released their rating and review capabilities in iOS 10.3. Therefore, a version check is necessary if you support a prior iOS version. Otherwise the requestReview() trigger is quite simple. However, Apple will only trigger a prompt within your shipped app 3 times a year. Apple's requestReview() algorithm ultimately determines the frequency and timing of the actual prompt.

Limit app review prompt to core users (optional)

Since it's not clear when Apple may display the review prompt I wanted to avoid an app review prompt for first time users. A core user or returning user is more likely to provide positive feedback. Therefore, I limited the review prompt to core users.

App rating trends mashup

Appbot recently published an article comparing app rating trends titled, "Has iOS 11 really affected star ratings?". I performed a mashup and included HealthPartners within their rating diagram to gather a greater perspective of the improvement our app has experienced.

iOS 11 app rating trends

Are these tasks easier done than said? Simply add review prompts to your apps top 3 'Make Good Happen' moments and your ratings will improve dramatically too.

Saturday, May 20, 2017

Adaptive and Self-Sizing Subtitle Cell

fat free ice cream

Imagine eating all the ice cream you ever wanted and not gaining a pound. There's a classic Seinfeld episode about this dream and they eventually learned it was too good to be true. If you've ever used Apple's subtitle cell you may have experienced similar disappointment. The default subtitle cell is adaptive but it does not support self sizing and therefore it is not accessible. If accessibility is a requirement on your projects then the only option is to create a custom Subtitle cell that supports both adaptability and self-sizing.

Adaptive & Self-Sizing Custom Subtitle Cell

An ideal subtitle cell should be both adaptive and self-sizing (see Figure 1). As shown, this custom subtitle cell adapts to support many different configurations. Most importantly, it supports self-sizing - the cell automatically grows to fit the available content and it will grow based on font size adjustments. Now that our cell is also accessible we can certify it fat free!

Adaptive and self-sizing subtitle cell examples
Figure 1. Adaptive and self-sizing subtitle cell examples

Default Subtitle Cell

In comparison, the default subtitle cell when loaded with the exact same content as shown previously is not accessible (see Figure 2). Unfortunately, this option doesn't pass the fat free certification test.

Default subtitle cell examples
Figure 2. Non-accessible Default Subtitle Cell

Custom Subtitle Cell Layout

The auto layout configuration for the custom subtitle cell is very lean (see Figure 3). The Stack Views implicitly manage adaptability and the text labels are configured to support self-sizing.

Subtitle cell layout
Figure 3. Custom Subtitle Cell Layout

Custom Subtitle Cell Configuration

The custom subtitle cell will adapt based on its configured cell data (see Figure 4). This custom subtitle cell and entire demo is available on my GitHub repository.

Subtitle cell data
Figure 4. Subtitle cell data

Sunday, April 2, 2017

Swift Performance Tips for Busy iOS Developers - Presentation

Want to learn quick tips that will improve your apps performance and load time? In this presentation, we’ll explore the latest Swift techniques we can apply to create faster iOS apps. Topics discussed will include:

  • The three dimensions of performance:
    • Allocation (stack vs heap)
    • Reference counting (less vs more)
    • Method dispatch (static vs dynamic)
  • Is Swift faster than Objective-C?
  • Are structs faster than classes?
  • Is inheritance faster than protocol extensions?
  • Grand Central Dispatch patterns
  • Whole module optimization and more

Source Code and Demos

Many of my performance tests are available as Gists. Refer to the slides "Gist" Link in the lower left - Enjoy!


Slide Deck Sneak Peek

Dimensions of performance
Dimensions of performance
Enable Whole Module Optimization
Enable Whole Module Optimization

Avoid for-in
Avoid for-in
Grouping work requests
Grouping work requests

Looking for even more performance tips? The Swift team has an excellent post with even more Swift Performance Tips.