minimizing decision fatigue to improve team productivity
TRANSCRIPT
![Page 1: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/1.jpg)
MINIMIZING DECISION FATIGUE
TO IMPROVE TEAM PRODUCTIVITY
TRY! SWIFT MARCH, 2017
DEREK LEE @DEREKLEEROCK
![Page 2: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/2.jpg)
☀ 🌛?
Class Struct
🤔
Tabs SpacesCocoapods CarthageStoryboards CodeA BUIKit ReactNative
![Page 3: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/3.jpg)
?
A B
🤔
???
?? ?
??? ??? ?
???
? ?????
? ???
?
?????? ?
??
???? ?
??
?
??????
???? ?
??? ?? 😓
![Page 4: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/4.jpg)
A B
😓
![Page 5: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/5.jpg)
A B
😓
A B
😓
A B
😓
A B
😓
A B
😓
A B
😓
![Page 6: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/6.jpg)
A DAY IN THE LIFE @ PIVOTAL LABS
![Page 7: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/7.jpg)
BREAKFAST!
🕣8:45am
![Page 8: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/8.jpg)
MORNING OFFICE STANDUP
🕘9:06am
![Page 9: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/9.jpg)
🕘9:15am
PROJECT STANDUP
![Page 10: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/10.jpg)
PROJECT ORGANIZATION
![Page 11: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/11.jpg)
Open Quickly ⌘+⇧+O
Filter in Navigator ⌘+⌥+J
Reveal in Navigator ⌘+⇧+J
Find in Files ⌘+⇧+F
HOW CAN WE FIND FILES IN XCODE?
![Page 12: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/12.jpg)
“Hunt and Peck”
HOW DO WE REALLY FIND FILES IN XCODE?
![Page 13: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/13.jpg)
“Helpers” FolderNo organization
WHAT WE’D LIKE TO AVOID
![Page 14: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/14.jpg)
MVC?
![Page 15: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/15.jpg)
APPLICATION ・ COMPONENTS ・ UI
![Page 16: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/16.jpg)
APPLICATION
![Page 17: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/17.jpg)
COMPONENTS
![Page 18: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/18.jpg)
UI
![Page 19: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/19.jpg)
PAIR PROGRAMMING
🕙10:00am
![Page 20: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/20.jpg)
PAIR PROGRAMMING - SETUP
![Page 21: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/21.jpg)
▸ Ping-Pong
PAIR PROGRAMMING - STYLES
+
▸ Driver + Navigator
![Page 22: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/22.jpg)
PAIR PROGRAMMING - IN ACTION▸ We pair 99% of the time
▸ All disciplines pair: Engineering, Design, PMs
▸ Change pairs daily
▸ Regularly switch tracks of work
![Page 23: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/23.jpg)
LUNCHTIME TECH TALK
🕧12:30pm
![Page 24: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/24.jpg)
BACK TO PAIRING
🕜1:30pm
![Page 25: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/25.jpg)
IMPROMPTU TEAM DISCUSSION
🕝2:30pm
![Page 26: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/26.jpg)
SWIFT FILE ORGANIZATION
![Page 27: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/27.jpg)
VIEW CONTROLLER: SHOW DOCUMENT ITEMS: ^ + 6class 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() { ... }
... }
![Page 28: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/28.jpg)
With “// MARK:”Without Annotations With “// MARK: —“MARK ANNOTATION COMPARISON
![Page 29: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/29.jpg)
VIEW CONTROLLER ORGANIZATIONclass 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() { ... }
![Page 30: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/30.jpg)
VIEW CONTROLLER ORGANIZATIONclass 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() { ... }
![Page 31: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/31.jpg)
CREATE TEMPLATE FROM XCODE SNIPPETS
![Page 32: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/32.jpg)
PROTOCOL CONFORMANCEstruct 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 { ... } }
![Page 33: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/33.jpg)
PROTOCOL CONFORMANCEstruct 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 { ... } }
![Page 34: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/34.jpg)
PROTOCOL CONFORMANCEstruct 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 { ... } }
![Page 35: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/35.jpg)
PROTOCOL CONFORMANCEstruct 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 { ... } }
![Page 36: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/36.jpg)
PING-PONG BREAK
🕞3:30pm
![Page 37: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/37.jpg)
CROSS-FUNCTIONAL PAIRING
🕓4:00pm
Engineering x Design
![Page 38: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/38.jpg)
STYLING UI OBJECTS
![Page 39: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/39.jpg)
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
![Page 40: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/40.jpg)
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
![Page 41: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/41.jpg)
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
![Page 42: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/42.jpg)
APPLYING STYLESextension 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) } }
![Page 43: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/43.jpg)
RETROSPECTIVE (RETRO)
🕔5:00pm
![Page 44: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/44.jpg)
RETROS - INGREDIENTS
🙂🙂
🙂
🙂
🙂
🙂
Core Team Members Food & Snacks
🍓🧀
🍙🍪
Drinks
☕🍵
🍷🍺
![Page 45: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/45.jpg)
RETROS @ PIVOTAL LABS
😃Discuss
😭Keep
😕Improve
![Page 46: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/46.jpg)
RETROS @ PIVOTAL LABS
▸ Reflect → Continuous improvement
▸ Building Trust
▸ Honest communication
▸ Identify & solve problems early
▸ Team brainstorming
![Page 47: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/47.jpg)
Kent Beck, Extreme Programming Explained
THE COURAGE TO SPEAK TRUTHS, PLEASANT OR UNPLEASANT,
FOSTERS COMMUNICATION AND TRUST.
![Page 48: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/48.jpg)
SUMMARY
▸ Project Standup
▸ Pair Programming
▸ Lunchtime Tech Talk
▸ Impromptu Team Discussions
▸ Cross-Functional Pairing
▸ Retrospectives
▸ Project Organization
▸ Swift File Organization
▸ Styling UI Objects
![Page 49: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/49.jpg)
![Page 50: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/50.jpg)
![Page 51: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/51.jpg)
A B
😓
A B
😓
A B
😓
A B
😓
A B
😓
A B
😓
![Page 52: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/52.jpg)
😓😓 😓
😓😓 😓
![Page 53: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/53.jpg)
😓😓 😓
😓😓 😓
![Page 54: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/54.jpg)
😁😃 😛
🙃😎 😅
![Page 55: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/55.jpg)
Thank you!
try! Swift March 2017
![Page 56: Minimizing Decision Fatigue to Improve Team Productivity](https://reader031.vdocuments.mx/reader031/viewer/2022021922/58cf35be1a28ab00168b63c9/html5/thumbnails/56.jpg)
@DEREKLEEROCK Thank you!
try! Swift March 2017