the 360 developer

67
The 360° Developer

Upload: enteritos

Post on 08-Feb-2017

77 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: The 360 Developer

The 360° Developer

Page 2: The 360 Developer

Disclaimer

• Not a technical talk per se’ (motivational)

• Reflection of my experiences (chew the meat)

• “A talk is not great by and of itself, but by the ideas and actions it accrues.” - Handfuls of purpose for you to glean

Page 3: The 360 Developer

Outline

• The Beginning of a Journey (the problem)

• What is The 360° Developer?

• Knowledge Skills: SOLID Primer, Case Study Highlights of Design Patterns, Classes as Stories

• Personal Skills: Conflict-resolution, Mentoring

• Functional Skills: Cross-domain problem-solving

Page 4: The 360 Developer

The Problem

• Tale #1 - Changed jobs from C# to Ruby

• A Big Move

A. Personality-conflict with Mentor

B. No context for Agile - ‘spike and stabilize masters’

C. Static to Dynamic

D. New Team of Experts

Page 5: The 360 Developer

Root Cause Analysis

• Narrow down problem space

1. How could I up-skill myself effectively and efficiently to make maximum impact for the business TODAY?

2. Imposter Syndrome - Was I in fact a senior developer?

• 2 years of strategizing and thought, INCEPTION

Page 6: The 360 Developer

Code as Poetry

• “…it is a form of literary work of expression, of feeling, of ideas with certain intensity with the use of distinctive style and rhythm”

• Harnesses all of the author

• Evoke emotions

• Historically bad poems - mastery

• Two Drivers for Mastery 1. Why Create 2. Insanely Hard

Page 7: The 360 Developer

My Pursuit of Mastery

• Longest time been in pursuit of mastery in software development

• Didn’t clarify what that meant

• What did the pathway look like?

• What were the guideposts?

• Scrambling around in dark - ‘TIME + OPPORTUNITY + EXPERIENCE’ will lead me to mastery

Page 8: The 360 Developer

Misnomer

• A Senior Dev in interview processes

• Experienced and Skilled in business domain

• Years of experience

• Business domain became measure of seniority

• Placed in another context - lack of vision and transferrable skills missing

Page 9: The 360 Developer

A better strategy to Mastery

• Being purposeful around outcomes

• Having intent

• Clear vision

• Attainable and measurable goals

• Deliberate Practice

• If mastery is your pursuit, do you have a strategy?

Page 10: The 360 Developer

My Journey

• Mental Model of THE 360° DEVELOPER

• Not a stereotype socially awkward nerd and pizza lover

• Consist of a plethora of complimentary skills

• Primary skill software development

• Broad array of secondary skills

Page 11: The 360 Developer

360° Developer in a Nutshell

• Less about machines, more about people

• Less about technology stack, more about problem-solving

• Less about ego, more about solving business challenges

• Less about theory, more about practicing theory

Page 12: The 360 Developer

3 Core Skill Pillars1. Knowledge-Based - knowledge needed in performing a task (noun) - Ruby, Data Structures, Cucumber

2. Personal Traits - personality characteristics that contribute to performing a task. Based on experience (adjective) - Humble, Professional, Patient

3. Functional/Transferrable Skills - actions taken to perform a task. Based on aptitude (verbs) - Listening, Leading, Problem-Solving

Page 13: The 360 Developer

Misguided

• I focused solely on Core Skill of Knowledge

• I lacked effectiveness

• Analogy: Value of testing. Lost opportunity cost.

• Contrast: Fight or Flight.

Page 14: The 360 Developer

Developing Software is Hard

• Knowledge Economy

• Accounting - Mesopotamia (1000’s of years old)

• First Programmers - 1800 with Jacquaard Loom

• Immature knowledge domain

• Rate of change in theory and practices

• 1950’s - 43 new languages every 10 years

Page 15: The 360 Developer

Package growth35 gems

20 nuget

529 npm

Page 16: The 360 Developer

Overwhelming Body of Software Theory

Data StructuresDesign PatternsImplementation PatternsArchitectural PatternsVarious Programming Languages

Programming Paradigms: OO / FunctionalLanguage IDE, Tools, Libraries and Frameworks

Testing - TDD, BDD and supporting softwareOS FundamentalsNetworking / System Administration

Page 17: The 360 Developer

#1 First 20 Hours

• Plan, Think and Assess what you actually want and why

• Get expert guidance to better guide you and accelerate your learning

• Learn only the skills you need to accomplish what you actually need

Diluted Principles

Page 18: The 360 Developer

Combined with Pareto Principle

• 20% of the invested input is responsible for 80% of the results obtained

• Epiphany 1: Any knowledge domain could be learnt quickly and effectively (not mastered)

• Epiphany 2: Knowing only 20% is sufficient to deliver 80% of the result

• Design Pattern revival @ Work

• Pressure of ‘not-knowing’

Page 19: The 360 Developer

#2 Improving on Quality: SOLID

• Business faces problems today

• Doesn’t need the master you will be one day

• How can one make an impact today?

• Build software today sufficiently well to change your mind tomorrow

Page 20: The 360 Developer

Single Responsibility Principle

• Definition: Code that has one and only one reason to change

Page 21: The 360 Developer

Requirement: single blade knife

Page 22: The 360 Developer

Open/Closed Principle

• Definition: Software entities should be open for extension, but closed for modification

• Open For Extension - defined extension points where future functionality can hook into existing code and provide new behavior

• Closed for Modification - No pending or resulting modification to the classes themselves

• Analogy: Hardware store, saw blades

Page 23: The 360 Developer

Saw Blades

Page 24: The 360 Developer

Liskov Substitution Principle

• Definition: Replace any instance of a parent class with an instance of one of it’s children without creating any unexpected or incorrect behaviours

• Barbara Liskov - “If S is a subtype of T, then object of type T may be replaced with objects of type S, without breaking the program”

• Analogy: Lenovo Laptop Charger (interface matches but the voltage didn’t)

Page 25: The 360 Developer

Interface Segregation Principle

• Definition: Client should not be forced to depend upon interfaces they do not use

• Code should not be forced to depend methods it doesn’t use

• Analogy: CMS has User Class and needs Moderator

Page 26: The 360 Developer

Dependency Inversion Principle

• DIP is not DI (Los Techies)

• High Level Classes should not depend upon low-level classes. Both should depend upon abstractions

• Abstractions should not depend upon details. Details should depend upon abstractions.

• Software components should depend upon abstraction instead of implementations

• Analogy: Low-level (disk, network IO). High-level (Business)

Page 27: The 360 Developer

Reasons for SOLID

• Primary focus on making code adaptable (future-proofing)

• Singular body of knowledge (structured learning)

• High-return body of knowledge with measurable feedback

• Helps develop you ‘bad code sniffer’

Get a handle on improving today

Page 28: The 360 Developer

Design Patterns• Apply a strategy to improving on it

• Looking for some feedback - went to case studies

• Case Study Highlights !!!

Page 29: The 360 Developer

2003 A Quantitative Study of the Application of Design Patterns in Java

• Aim: Claims of DP - common design vocab and improve communication amidst developers. Lacking quantitative research as claims supported by experienced practitioners

• 1000 open source projects under source control

Page 30: The 360 Developer

DP Usage

1

23

4

5

Page 31: The 360 Developer

Combining 3 Cases Studies and Dr. Dobbs

• Small segway

1. Adapter

2.Command

3.Singleton

4.Factory

Page 32: The 360 Developer

Back to 2003 Study Revealed:

1. Design patterns more likely to be used in bigger development teams (7+)

2. There were differences between developers who used patterns and developers who do not. Most notable was total number of code modified or added were higher by those who did use patterns.

3. The data showed very little usage of design patterns in later usage or lifecycle of code. Rarely applied in refactors

Page 33: The 360 Developer

The Effect of GoF Designs Patterns on Stability: A Case Study• Aim: Understand stability of classes that participate in

instances of GoF Design Patterns.

• How stability was impacted by:

1. Pattern Type

2. Role Pattern Plays

3. Number of pattern occurrences in which class participates

4. The Application Domain

Page 34: The 360 Developer

Number of design patterns in which a class participates increases, the less

stable the class becomes.

Page 35: The 360 Developer

Pattern Participation• 51800 classes did not use patterns

• 10400 classes used a single pattern

• 2700 classes were used in more than one pattern

Page 36: The 360 Developer

Top 3 Users of Patterns By Application Domains

• Audio and Video (31%)

• Business and Enterprise (28.8%)

• Communications (28.6%)

Page 37: The 360 Developer

Most Stable Classes Used Which Patterns:

• Singleton

• Facade

• Observer

• Composite

• Decorator

• Adapter and Proxy are more unstable relationally

Page 38: The 360 Developer

1999 Bell Labs: A Controlled Experiment in Maintenance

Comparing Design Patterns To Simpler Solutions

• Aim: Seek empirical evidence where using design patterns are beneficial. Particularly use of design patterns where actual design problem is simpler

• Detail: Didn’t use pattern detection tools. Used people, group of 4. 4 programs of different purpose, design patterns and maintenance tasks. 29 subjects in total, all professional engineers.

Page 39: The 360 Developer

Results• It is usually, not always useful to use a design pattern if

there are simpler alternatives. Basically, if you have a simpler solution, use that.

• Patterns are sometimes superior to simpler solutions in non-obvious ways and should be used by default. If you don’t understand the trade-offs between the pattern and the simpler solution, default to a pattern

• Use software engineering common sense to find the exceptions where a simpler solution should be preferred, even if a design pattern could be applied easily

Page 40: The 360 Developer

#4 The Skill of Good Analogies

• Pitch - building the skill of ‘good analogies’

• Kent Beck - 3x (simple, powerful in application)

• Avdi Grimm - Confident Ruby (Input, Perform, Output, Failure)

• Extended, classes as stories

Page 41: The 360 Developer

Why Stories As Classes?• Stories have very specific target audience

• Concerted ‘effort’ to ensure readability for audience

• Stories have to make sense to be understood, clear to be enjoyed

• Good stories are coherent and pleasure to read

• Bad stories are easily detected and grate attention

• Principals of the analogies domain can guide our own

Page 42: The 360 Developer

Monolithic Story• Gripping stuff (only page 1)

• Written not to be read

• Filled with Legal Jargon

• Same effect with Monolith Class

• Don’t feel like reading

• Sift before hitting jackpot

• Don’t want to read or tell

Page 43: The 360 Developer

DRY Story:

Page 44: The 360 Developer

Adventure Challenge Books

• Decisions determine direction and fate of main character

• 2-3 short descriptions about your options

• Enthralled with what may happen next

Page 45: The 360 Developer

Example 1:

• If you want to fight the angry troll - Turn to page 137

• If you want to reason with the angry troll - Turn to page 140

Page 46: The 360 Developer

Example 2: • If you fight the angry troll with your bare hands. The

troll was green, he had big eyes and boy was he mad. In fact he was so ugly he made Gollum look like one of the Kardashians. So you pick your sword and you slay him. The end. If you want this, turn to page 137.

• If you try to reason with the troll. The troll in fact doesn’t like reasoning. So you sit around for about 5 hours talking about Plato and Aristotle until you realize he is a supporter of Adolf Hitler and in one swift blow kills you. If you want this, turn to page 140.

Information Hiding

Bleeding implementation detail

Page 47: The 360 Developer

Short StoriesGood Short Story: The end. Popcorn lived with their dad and mum. Once upon a time there was a little girl named Popcorn.Popcorn loved her sister Peanut and her dog Pepsi

Even Better Short Story: Once upon a time there was a little girl named Popcorn.Popcorn lived with their dad and mum.Popcorn loved her sister Peanut and her dog Pepsi.The end.

OrderBuild up

Page 48: The 360 Developer

Power to Communicate

• Communicate abstract things

• Lack knowledge or expertise

• Empowers stakeholders and decision makers

• Gives them rules, principals and concepts from others bodies of knowledge they understand

• Monoliths, DRY, Information Hiding, Class Organization

Page 49: The 360 Developer

Personal Traits:

• Personality characteristics that contribute to performing work (these are adjectives).

• Developed in childhood and through life experience.

Page 50: The 360 Developer

A Tale Of Two Leaders

• Leader A - genius, immense problem solving, revolutionize, 2 years, failure to relate to people

• Leader B - no education, lead, CEO, multi-million rand deal, millionaire, VB6, relate to people, set a vision others follow

• Trying to change the world with code, but there is an opportunity to change the business through how we relate to our colleagues

• People matter. Actively invested in people as we are in Tech?

Our working relationships matter

Page 51: The 360 Developer

The 360° Difference

• 360° Developer appreciates people

• Respects diversity in all forms, from gender, race to thought

• Disclaimer: Lacking EQ cannot change the world

• Those developers rare, it’s our relationships

Page 52: The 360 Developer

Achieving Success Through Social Capital Dr. Wayne Baker

“Success is social: It depends on our relationships with others. All the ingredients of success that we customarily think of as “individual”—natural talent, intelligence, education, effort, and luck—are intricately intertwined with networks.”

Page 53: The 360 Developer

Type Safety in the Workplace• Ruby types STRINGS, SYMBOLS, HASHES and ARRAYS.

• Data Types as People

• ‘Hash’ discriminates against ‘Array’ for being able to do faster lookups

• ‘Strings’ discriminates against ‘Symbols’ for being so single-minded and immutable in his opinion

• Synergy of these types that lends Ruby to be the language that it is, so too the workplace

Page 54: The 360 Developer

Supporting Type Safety:

• Last year, Crucial Conversations

• High stakes, high emotion and opposing views

• Tale: Dad with two daughters

• Resource contention

• Loss of purpose

• Caring to win with Mutual Purpose

How to deal with conflict

Page 55: The 360 Developer

• We tell ourselves stories about others

• Stories that deepen conflict

• Principal helped me with these stories

Supporting Type Safety:Judge Actions Not Feelings

Page 56: The 360 Developer

Judge Actions Not Feelings“Only real act’s can be judged, while ‘good’ or ‘bad’ imaginary acts cannot be. Only conduct can be condemned or commended. Feelings cannot and should not be….. It takes great wisdom to realize that all feelings are legitimate: the positive, the negative and the ambivalent”.

• Value feelings and emotions and not react to it

• Embrace what their feeling as legitimate

• Extent of stories can be minimized by not judging feelings

Page 57: The 360 Developer

Thinking Environment• Nancy Kline “Time To Think” - 10 principals defining a

culture

• Diluted definition: Best Described As A Safe Meeting

• Equality of thought, Safety is actively protected

• Biggest impact - Don’t teach people what to think, enable people to think

• "The task of leaders is not to put greatness into humanity, but to elicit it, for the greatness is already there."

Page 58: The 360 Developer

Failed Mentorships

• Tale: Gave the answer, more or less the answer and progressed to dropping hints on how to get to the answer

• Some mentorships failed

• Thinking Environment promotes enabling others to grow and flourish their own intelligence

Page 59: The 360 Developer

Principals for Enabling Others To Think

• Ask Incisive Questions - find the limiting thought or assumption

• Not statements but questions that cause mentee to think. Free them from limiting thought

• Don’t rush to correct misinformation

• Release information slowly and thoughtfully

• Only give information when it will give people a decisive difference or direction in their thinking

Page 60: The 360 Developer

Functional/Transferrable Skills:

• Actions taken to perform a task (these are verbs).

• Based on ability and aptitude.

Page 61: The 360 Developer

Limiting our own ability

• As Developers, problem-solving is most valued

• Limit our abilities to one domain

• Tale: Strategic involvement in a multi-million rand profitable business

• Limited mental dedication to code-only problems

• Lost opportunity to apply my problem-solving and move business forward

Page 62: The 360 Developer

False Premise • Aim in life: Master Craftsman

• Dan North - GOTO 2016 “Software that fits into your head”

• Goal of software development: “Sustainably minimize lead time to business impact”

• Not there to be software craftsman, we are there to solve business challenges

• Primary and Secondary Motivation Matters

Page 63: The 360 Developer

Epiphany

• Less conflict with technical decisions

• Less friction when business dramatically changes something

• Higher purpose than self

• Aligned myself with that mattered

• KEY: Opened up myself to problems beyond my domain, in line with my strengths.

Page 64: The 360 Developer

Are you limiting your problem-solving domain?

• Challenge To You - To narrow a domain, Test the water, Immense Talents

• Our uniqueness brings unique-problem solving

• Not hired to be code monkeys

• Our main problem: Business challenges

Page 65: The 360 Developer

Bring your thinking to the Table!

“At bottom every man knows well enough that he is a unique being, only once on this earth; and by no extraordinary chance will such a marvelously picturesque piece of diversity in unity as he is, ever be put together a second time.”

― Friedrich Nietzsche

Page 66: The 360 Developer

Up-skill today

• How could I up-skill myself effectively and efficiently to make maximum impact for the business TODAY?

★Wholistic developer, 360° developer (3 pillars)

★A Well Defined Vision, with a clear strategy for execution on all three pillars

★Consistency in daily execution of that strategy

Page 67: The 360 Developer

Senior Developer?• New Measure is not a title, but in 3 questions

1. Have I successfully improved on my technical knowledge? (Knowledge)

2. How have I improved as a person and in my inter-personal relationships? (Personal Traits)

3. How have I leveraged my strengths to resolve business challenges? (Functional)

• My mental model - like code imperfect!