Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
MINIMIZING
DECISION FATIGUE
TO IMPROVE TEAM PRODUCTIVITY
TRY! SWIFT
MARCH, 2017
DEREK LEE
@DEREKLEEROCK
β˜€ πŸŒ›
?
Class Struct
πŸ€”
Tabs SpacesCocoapods CarthageStoryboards CodeA BUIKit ReactNative
?
A B
πŸ€”
?
??
?
? ?
??? ?
?
? ?
?
?
?
? ??
??
??
?
?
?
??
???
?
?
?
?
??
??
?
?
?
??
???
?
??? ?? πŸ˜“
A B
πŸ˜“
A B
πŸ˜“
A B
πŸ˜“
A B
πŸ˜“
A B
πŸ˜“
A B
πŸ˜“
A B
πŸ˜“
A DAY IN THE LIFE @ PIVOTAL LABS
BREAKFAST!
πŸ•£8:45am
MORNING OFFICE STANDUP
πŸ•˜9:06am
πŸ•˜9:15am
PROJECT STANDUP
PROJECT
ORGANIZATION
Open Quickly
⌘+⇧+O
Filter in Navigator
⌘+βŒ₯+J
Reveal in Navigator
⌘+⇧+J
Find in Files
⌘+⇧+F
HOW CAN WE FIND FILES IN XCODE?
β€œHunt and Peck”
HOW DO WE REALLY FIND FILES IN XCODE?
β€œHelpers” FolderNo organization
WHAT WE’D LIKE TO AVOID
MVC?
APPLICATION ・ COMPONENTS ・ UI
APPLICATION
COMPONENTS
UI
PAIR PROGRAMMING
πŸ•™10:00am
PAIR PROGRAMMING - SETUP
β–Έ Ping-Pong
PAIR PROGRAMMING - STYLES
+
β–Έ Driver + Navigator
PAIR PROGRAMMING - IN ACTION
β–Έ We pair 99% of the time
β–Έ All disciplines pair: Engineering, Design, PMs
β–Έ Change pairs dai...
LUNCHTIME TECH TALK
πŸ•§12:30pm
BACK TO PAIRING
πŸ•œ1:30pm
IMPROMPTU TEAM DISCUSSION
πŸ•2:30pm
SWIFT FILE
ORGANIZATION
VIEW CONTROLLER: SHOW DOCUMENT ITEMS: ^ + 6
class CountingRepeaterViewController: UIViewController {
fileprivate let repea...
With β€œ// MARK:”Without Annotations With β€œ// MARK: β€”β€œ
MARK ANNOTATION COMPARISON
VIEW CONTROLLER ORGANIZATION
class CountingRepeaterViewController: UIViewController {
// MARK: - Properties
fileprivate le...
VIEW CONTROLLER ORGANIZATION
class CountingRepeaterViewController: UIViewController {
// MARK: - Properties
fileprivate le...
CREATE TEMPLATE FROM XCODE SNIPPETS
PROTOCOL CONFORMANCE
struct DefaultCustomer: Customer {
let name: String
private(set) var rentals: [Rental]
init(name: Str...
PROTOCOL CONFORMANCE
struct DefaultCustomer: Customer {
// MARK: - Properties
let name: String
private(set) var rentals: [...
PROTOCOL CONFORMANCE
struct DefaultCustomer {
// MARK: - Properties
let name: String
private(set) var rentals: [Rental]
//...
PROTOCOL CONFORMANCE
struct DefaultCustomer {
// MARK: - Properties
let name: String
private(set) var rentals: [Rental]
//...
PING-PONG BREAK
πŸ•ž3:30pm
CROSS-FUNCTIONAL PAIRING
πŸ•“4:00pm
Engineering x Design
STYLING
UI OBJECTS
extension UIFont {
class func abcMediumFont(size: CGFloat) -> UIFont {
return UIFont(name: "AvenirNext-Medium", size: size...
extension UIColor {
class var abcDarkSkyBlue: UIColor {
return UIColor(
red: 52.0 / 255.0,
green: 152.0 / 255.0,
blue: 219...
enum UIButtonStyle {
case primary, negative
func applyTo(button: UIButton) {
switch (self) {
case .primary:
button.titleLa...
APPLYING STYLES
extension UIButton {
func apply(style: UIButtonStyle) {
style.applyTo(button: self)
}
}
class MyViewContro...
RETROSPECTIVE (RETRO)
πŸ•”5:00pm
RETROS - INGREDIENTS
πŸ™‚πŸ™‚
πŸ™‚
πŸ™‚
πŸ™‚
πŸ™‚
Core Team Members Food & Snacks
πŸ“πŸ§€
πŸ™πŸͺ
Drinks
β˜•πŸ΅
🍷🍺
RETROS @ PIVOTAL LABS
πŸ˜ƒ
Discuss
😭
Keep
πŸ˜•
Improve
RETROS @ PIVOTAL LABS
β–Έ Reflect β†’ Continuous improvement
β–Έ Building Trust
β–Έ Honest communication
β–Έ Identify & solve problem...
Kent Beck, Extreme Programming Explained
THE COURAGE TO SPEAK TRUTHS,
PLEASANT OR UNPLEASANT,
FOSTERS COMMUNICATION AND TR...
SUMMARY
β–Έ Project Standup
β–Έ Pair Programming
β–Έ Lunchtime Tech Talk
β–Έ Impromptu Team Discussions
β–Έ Cross-Functional Pairing...
A B
πŸ˜“
A B
πŸ˜“
A B
πŸ˜“
A B
πŸ˜“
A B
πŸ˜“
A B
πŸ˜“
πŸ˜“πŸ˜“ πŸ˜“
πŸ˜“πŸ˜“ πŸ˜“
πŸ˜“πŸ˜“ πŸ˜“
πŸ˜“πŸ˜“ πŸ˜“
πŸ˜πŸ˜ƒ πŸ˜›
πŸ™ƒπŸ˜Ž πŸ˜…
Thank you!
try! Swift March 2017
@DEREKLEEROCK
Thank you!
try! Swift March 2017
Minimizing Decision Fatigue to Improve Team Productivity
Minimizing Decision Fatigue to Improve Team Productivity
Upcoming SlideShare
Loading in …5
×

of

Minimizing Decision Fatigue to Improve Team Productivity Slide 1 Minimizing Decision Fatigue to Improve Team Productivity Slide 2 Minimizing Decision Fatigue to Improve Team Productivity Slide 3 Minimizing Decision Fatigue to Improve Team Productivity Slide 4 Minimizing Decision Fatigue to Improve Team Productivity Slide 5 Minimizing Decision Fatigue to Improve Team Productivity Slide 6 Minimizing Decision Fatigue to Improve Team Productivity Slide 7 Minimizing Decision Fatigue to Improve Team Productivity Slide 8 Minimizing Decision Fatigue to Improve Team Productivity Slide 9 Minimizing Decision Fatigue to Improve Team Productivity Slide 10 Minimizing Decision Fatigue to Improve Team Productivity Slide 11 Minimizing Decision Fatigue to Improve Team Productivity Slide 12 Minimizing Decision Fatigue to Improve Team Productivity Slide 13 Minimizing Decision Fatigue to Improve Team Productivity Slide 14 Minimizing Decision Fatigue to Improve Team Productivity Slide 15 Minimizing Decision Fatigue to Improve Team Productivity Slide 16 Minimizing Decision Fatigue to Improve Team Productivity Slide 17 Minimizing Decision Fatigue to Improve Team Productivity Slide 18 Minimizing Decision Fatigue to Improve Team Productivity Slide 19 Minimizing Decision Fatigue to Improve Team Productivity Slide 20 Minimizing Decision Fatigue to Improve Team Productivity Slide 21 Minimizing Decision Fatigue to Improve Team Productivity Slide 22 Minimizing Decision Fatigue to Improve Team Productivity Slide 23 Minimizing Decision Fatigue to Improve Team Productivity Slide 24 Minimizing Decision Fatigue to Improve Team Productivity Slide 25 Minimizing Decision Fatigue to Improve Team Productivity Slide 26 Minimizing Decision Fatigue to Improve Team Productivity Slide 27 Minimizing Decision Fatigue to Improve Team Productivity Slide 28 Minimizing Decision Fatigue to Improve Team Productivity Slide 29 Minimizing Decision Fatigue to Improve Team Productivity Slide 30 Minimizing Decision Fatigue to Improve Team Productivity Slide 31 Minimizing Decision Fatigue to Improve Team Productivity Slide 32 Minimizing Decision Fatigue to Improve Team Productivity Slide 33 Minimizing Decision Fatigue to Improve Team Productivity Slide 34 Minimizing Decision Fatigue to Improve Team Productivity Slide 35 Minimizing Decision Fatigue to Improve Team Productivity Slide 36 Minimizing Decision Fatigue to Improve Team Productivity Slide 37 Minimizing Decision Fatigue to Improve Team Productivity Slide 38 Minimizing Decision Fatigue to Improve Team Productivity Slide 39 Minimizing Decision Fatigue to Improve Team Productivity Slide 40 Minimizing Decision Fatigue to Improve Team Productivity Slide 41 Minimizing Decision Fatigue to Improve Team Productivity Slide 42 Minimizing Decision Fatigue to Improve Team Productivity Slide 43 Minimizing Decision Fatigue to Improve Team Productivity Slide 44 Minimizing Decision Fatigue to Improve Team Productivity Slide 45 Minimizing Decision Fatigue to Improve Team Productivity Slide 46 Minimizing Decision Fatigue to Improve Team Productivity Slide 47 Minimizing Decision Fatigue to Improve Team Productivity Slide 48 Minimizing Decision Fatigue to Improve Team Productivity Slide 49 Minimizing Decision Fatigue to Improve Team Productivity Slide 50 Minimizing Decision Fatigue to Improve Team Productivity Slide 51 Minimizing Decision Fatigue to Improve Team Productivity Slide 52 Minimizing Decision Fatigue to Improve Team Productivity Slide 53 Minimizing Decision Fatigue to Improve Team Productivity Slide 54 Minimizing Decision Fatigue to Improve Team Productivity Slide 55 Minimizing Decision Fatigue to Improve Team Productivity Slide 56
Upcoming SlideShare
Decoupling, Decluttering and Demystifying Your Swift Tests
Next
Download to read offline and view in fullscreen.

4 Likes

Share

Download to read offline

Minimizing Decision Fatigue to Improve Team Productivity

Download to read offline

Presented on Friday, March 3, 2017 at the try! Swift Conference in Tokyo - in this talk I discuss how decision fatigue impacts our work days and how we can minimize this through increasing our team's communication. Through the context of a typical day at Pivotal Labs, I give examples of how our teams communicate as well as some technical solutions that we agreed to as a team for development in Swift.

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Minimizing Decision Fatigue to Improve Team Productivity

  1. 1. MINIMIZING DECISION FATIGUE TO IMPROVE TEAM PRODUCTIVITY TRY! SWIFT MARCH, 2017 DEREK LEE @DEREKLEEROCK
  2. 2. β˜€ πŸŒ› ? Class Struct πŸ€” Tabs SpacesCocoapods CarthageStoryboards CodeA BUIKit ReactNative
  3. 3. ? A B πŸ€” ? ?? ? ? ? ??? ? ? ? ? ? ? ? ? ?? ?? ?? ? ? ? ?? ??? ? ? ? ? ?? ?? ? ? ? ?? ??? ? ??? ?? πŸ˜“
  4. 4. A B πŸ˜“
  5. 5. A B πŸ˜“ A B πŸ˜“ A B πŸ˜“ A B πŸ˜“ A B πŸ˜“ A B πŸ˜“
  6. 6. A DAY IN THE LIFE @ PIVOTAL LABS
  7. 7. BREAKFAST! πŸ•£8:45am
  8. 8. MORNING OFFICE STANDUP πŸ•˜9:06am
  9. 9. πŸ•˜9:15am PROJECT STANDUP
  10. 10. PROJECT ORGANIZATION
  11. 11. Open Quickly ⌘+⇧+O Filter in Navigator ⌘+βŒ₯+J Reveal in Navigator ⌘+⇧+J Find in Files ⌘+⇧+F HOW CAN WE FIND FILES IN XCODE?
  12. 12. β€œHunt and Peck” HOW DO WE REALLY FIND FILES IN XCODE?
  13. 13. β€œHelpers” FolderNo organization WHAT WE’D LIKE TO AVOID
  14. 14. MVC?
  15. 15. APPLICATION ・ COMPONENTS ・ UI
  16. 16. APPLICATION
  17. 17. COMPONENTS
  18. 18. UI
  19. 19. PAIR PROGRAMMING πŸ•™10:00am
  20. 20. PAIR PROGRAMMING - SETUP
  21. 21. β–Έ Ping-Pong PAIR PROGRAMMING - STYLES + β–Έ Driver + Navigator
  22. 22. PAIR PROGRAMMING - IN ACTION β–Έ We pair 99% of the time β–Έ All disciplines pair: Engineering, Design, PMs β–Έ Change pairs daily β–Έ Regularly switch tracks of work
  23. 23. LUNCHTIME TECH TALK πŸ•§12:30pm
  24. 24. BACK TO PAIRING πŸ•œ1:30pm
  25. 25. IMPROMPTU TEAM DISCUSSION πŸ•2:30pm
  26. 26. SWIFT FILE ORGANIZATION
  27. 27. VIEW CONTROLLER: SHOW DOCUMENT ITEMS: ^ + 6 class CountingRepeaterViewController: UIViewController { fileprivate let repeater: Repeater fileprivate let maximumCountValue: Int fileprivate var counterValue: Int let countingLabel: UILabel init(repeater: Repeater, maximumCountValue: Int) { ... } required init?(coder aDecoder: NSCoder) { ... } override func viewDidLoad() { ... } override func viewWillDisappear(_ animated: Bool) { ... } func addSubviews() { ... } func addConstraints() { ... } ... }
  28. 28. With β€œ// MARK:”Without Annotations With β€œ// MARK: β€”β€œ MARK ANNOTATION COMPARISON
  29. 29. VIEW CONTROLLER ORGANIZATION class CountingRepeaterViewController: UIViewController { // MARK: - Properties fileprivate let repeater: Repeater fileprivate let maximumCountValue: Int fileprivate var counterValue: Int // MARK: - View Elements let headerLabel: UILabel let countingLabel: UILabel // MARK: - Initialization init(repeater: Repeater, maximumCountValue: Int) { ... } required init?(coder aDecoder: NSCoder) { ... } // MARK: - Lifecycle Methods override func viewDidLoad() { ... } override func viewWillDisappear(_ animated: Bool) } // MARK: - Private Methods fileprivate extension CountingRepeaterViewController { func addSubviews() { ... } func addConstraints() { ... }
  30. 30. VIEW CONTROLLER ORGANIZATION class CountingRepeaterViewController: UIViewController { // MARK: - Properties fileprivate let repeater: Repeater fileprivate let maximumCountValue: Int fileprivate var counterValue: Int // MARK: - View Elements let headerLabel: UILabel let countingLabel: UILabel // MARK: - Initialization init(repeater: Repeater, maximumCountValue: Int) { ... } required init?(coder aDecoder: NSCoder) { ... } // MARK: - Lifecycle Methods override func viewDidLoad() { ... } override func viewWillDisappear(_ animated: Bool) { ... } } // MARK: - Private Methods fileprivate extension CountingRepeaterViewController { func addSubviews() { ... } func addConstraints() { ... } // MARK: - Lifecycle Methods override func viewDidLoad() { ... } override func viewWillDisappear(_ animated: Bool) { ... } class CountingRepeaterViewController: UIViewController { // MARK: - Properties fileprivate let repeater: Repeater fileprivate let maximumCountValue: Int fileprivate var counterValue: Int // MARK: - View Elements let headerLabel: UILabel let countingLabel: UILabel // MARK: - Initialization init(repeater: Repeater, maximumCountValue: Int) { ... } required init?(coder aDecoder: NSCoder) { ... } // MARK: - Lifecycle Methods override func viewDidLoad() { ... } override func viewWillDisappear(_ animated: Bool) } // MARK: - Private Methods fileprivate extension CountingRepeaterViewController { func addSubviews() { ... } func addConstraints() { ... }
  31. 31. CREATE TEMPLATE FROM XCODE SNIPPETS
  32. 32. PROTOCOL CONFORMANCE struct DefaultCustomer: Customer { let name: String private(set) var rentals: [Rental] init(name: String) { ... } mutating func addRental(rental: Rental) { ... } func createTextStatement() -> String { ... } func createHtmlStatement() -> String { ... } func getTotalCharge() -> Double { ... } func getTotalFrequentRenterPoints() -> Int { ... } }
  33. 33. PROTOCOL CONFORMANCE struct DefaultCustomer: Customer { // MARK: - Properties let name: String private(set) var rentals: [Rental] // MARK: - Initialization init(name: String) { ... } mutating func addRental(rental: Rental) { ... } func createTextStatement() -> String { ... } func createHtmlStatement() -> String { ... } func getTotalCharge() -> Double { ... } func getTotalFrequentRenterPoints() -> Int { ... } }
  34. 34. PROTOCOL CONFORMANCE struct DefaultCustomer { // MARK: - Properties let name: String private(set) var rentals: [Rental] // MARK: - Initialization init(name: String) { ... } } // MARK: - Customer extension DefaultCustomer: Customer { mutating func addRental(rental: Rental) { ... } func createTextStatement() -> String { ... } func createHtmlStatement() -> String { ... } func getTotalCharge() -> Double { ... } func getTotalFrequentRenterPoints() -> Int { ... } }
  35. 35. PROTOCOL CONFORMANCE struct DefaultCustomer { // MARK: - Properties let name: String private(set) var rentals: [Rental] // MARK: - Initialization init(name: String) { ... } } // MARK: - Customer extension DefaultCustomer: Customer { mutating func addRental(rental: Rental) { ... } func createTextStatement() -> String { ... } func createHtmlStatement() -> String { ... } } // MARK: - Private Methods fileprivate extension DefaultCustomer { func getTotalCharge() -> Double { ... } func getTotalFrequentRenterPoints() -> Int { ... } }
  36. 36. PING-PONG BREAK πŸ•ž3:30pm
  37. 37. CROSS-FUNCTIONAL PAIRING πŸ•“4:00pm Engineering x Design
  38. 38. STYLING UI OBJECTS
  39. 39. extension UIFont { class func abcMediumFont(size: CGFloat) -> UIFont { return UIFont(name: "AvenirNext-Medium", size: size)! } class func abcBoldFont(size: CGFloat) -> UIFont { return UIFont(name: "AvenirNext-Bold", size: size)! } } DEFINING FONTS
  40. 40. extension UIColor { class var abcDarkSkyBlue: UIColor { return UIColor( red: 52.0 / 255.0, green: 152.0 / 255.0, blue: 219.0 / 255.0, alpha: 1.0 ) } class var abcBlueish: UIColor { return UIColor( red: 41.0 / 255.0, green: 128.0 / 255.0, blue: 185.0 / 255.0, alpha: 1.0 ) } } DEFINING COLORS
  41. 41. enum UIButtonStyle { case primary, negative func applyTo(button: UIButton) { switch (self) { case .primary: button.titleLabel?.font = UIFont.abcMediumFont( size: 15 ) button.setTitleColor(UIColor.white, for: .normal) button.backgroundColor = UIColor.abcDarkSkyBlue button.layer.borderColor = UIColor.abcBlueish.cgColor button.layer.borderWidth = 1.0 break case .negative: // ... break } } } DEFINING STYLES
  42. 42. APPLYING STYLES extension UIButton { func apply(style: UIButtonStyle) { style.applyTo(button: self) } } class MyViewController: UIViewController { let confirmButton: UIButton let cancelButton: UIButton ... fileprivate func applyStyles() { confirmButton.apply(style: .primary) cancelButton.apply(style: .negative) } }
  43. 43. RETROSPECTIVE (RETRO) πŸ•”5:00pm
  44. 44. RETROS - INGREDIENTS πŸ™‚πŸ™‚ πŸ™‚ πŸ™‚ πŸ™‚ πŸ™‚ Core Team Members Food & Snacks πŸ“πŸ§€ πŸ™πŸͺ Drinks β˜•πŸ΅ 🍷🍺
  45. 45. RETROS @ PIVOTAL LABS πŸ˜ƒ Discuss 😭 Keep πŸ˜• Improve
  46. 46. RETROS @ PIVOTAL LABS β–Έ Reflect β†’ Continuous improvement β–Έ Building Trust β–Έ Honest communication β–Έ Identify & solve problems early β–Έ Team brainstorming
  47. 47. Kent Beck, Extreme Programming Explained THE COURAGE TO SPEAK TRUTHS, PLEASANT OR UNPLEASANT, FOSTERS COMMUNICATION AND TRUST.
  48. 48. SUMMARY β–Έ Project Standup β–Έ Pair Programming β–Έ Lunchtime Tech Talk β–Έ Impromptu Team Discussions β–Έ Cross-Functional Pairing β–Έ Retrospectives β–Έ Project Organization β–Έ Swift File Organization β–Έ Styling UI Objects
  49. 49. A B πŸ˜“ A B πŸ˜“ A B πŸ˜“ A B πŸ˜“ A B πŸ˜“ A B πŸ˜“
  50. 50. πŸ˜“πŸ˜“ πŸ˜“ πŸ˜“πŸ˜“ πŸ˜“
  51. 51. πŸ˜“πŸ˜“ πŸ˜“ πŸ˜“πŸ˜“ πŸ˜“
  52. 52. πŸ˜πŸ˜ƒ πŸ˜› πŸ™ƒπŸ˜Ž πŸ˜…
  53. 53. Thank you! try! Swift March 2017
  54. 54. @DEREKLEEROCK Thank you! try! Swift March 2017
  • ErinWilder

    Oct. 30, 2020
  • FrancisGabon

    Jul. 2, 2017
  • mkane89

    Mar. 24, 2017
  • YosukeFujii

    Mar. 8, 2017

Presented on Friday, March 3, 2017 at the try! Swift Conference in Tokyo - in this talk I discuss how decision fatigue impacts our work days and how we can minimize this through increasing our team's communication. Through the context of a typical day at Pivotal Labs, I give examples of how our teams communicate as well as some technical solutions that we agreed to as a team for development in Swift.

Views

Total views

1,766

On Slideshare

0

From embeds

0

Number of embeds

500

Actions

Downloads

14

Shares

0

Comments

0

Likes

4

Γ—