the programmer life cycle

32
The Programmer Life-Cycle from the book Lord of the Files Essays on the Social Aspects of Software Engineering Russell Ovans a talk given to the Social Informatics Cluster University of Edinburgh 18-11-2011

Upload: russell-ovans

Post on 25-Dec-2014

1.828 views

Category:

Business


2 download

DESCRIPTION

Not unlike the software systems they construct, programmers follow a life cycle, one that predicts their productivity.

TRANSCRIPT

Page 1: The Programmer Life Cycle

The Programmer Life-Cycle

from the book

Lord of the Files

Essays on the Social Aspects of Software Engineering

Russell Ovans

a talk given to the Social Informatics Cluster University of Edinburgh

18-11-2011

Page 2: The Programmer Life Cycle

This is a story...

...about my experiences teaching software engineering at the University of Victoria

...while working as a senior software engineer in the Silicon Valley

...and how it led me to start my own successful company

...and write a book of essays on the social aspects of software engineering

Page 3: The Programmer Life Cycle

University of Victoria: 2003-05

Page 4: The Programmer Life Cycle

Teaching This: Software Life Cycle

Page 5: The Programmer Life Cycle

While Working in Palo Alto: 2000-2005

Page 6: The Programmer Life Cycle

Programmer Productivity

Textbook I was teaching from estimated that for the average programmer: 500 LOC/month

– 500/(40*4.33) = ~3 LOC/hour Why so absurdly low? Why doesn't that get you fired? What is the difference between the best and worst

programmers?

Page 7: The Programmer Life Cycle

Is Productivity Constant?

Is it constant for the same programmer over time?

Observation: my own productivity followed a predictable series of stages

Do programmers have a life cycle?

Everything we do as software engineers falls under one of the stages of the SDLC, but how well we do it depends on where we are in the Programmer Life Cycle

Page 8: The Programmer Life Cycle

Programmer Life Cycle

1. Euphoric

2. Productive

3. Irreplaceable

4. Resentful

5. Bored

6. Unproductive

Page 9: The Programmer Life Cycle

Stage 1: Euphoric

Stimulated by new company or significantly new project

Escape from previous position that was boring or underutilizing programmer's talent

– programmers frequently change employers

Short duration Acclimatized to new environment Learn new tools

Page 10: The Programmer Life Cycle

Stage 2: Productive

Programmer develops or takes ownership of mission-critical software system

Steadily rising value within the enterprise

Programmer is left aloneNo knowledge transfer, no meetings, no

management of others, no expectationsUsually lasts for six monthsThousands of LOC/month

Page 11: The Programmer Life Cycle

Euphoric + Productive= Honeymoon Phase

Page 12: The Programmer Life Cycle

Stage 3: Irreplaceable

Programmer prestige and value to enterprise is at its peak

– intellectual property vests with programmer

– golden handcuffs: compensation, benefits, stock Management becomes insecure due to loss of

control

– shift in power dynamic from manager to programmer, which leads to...

Page 13: The Programmer Life Cycle

Stage 4: Resentful

Management resents that a single individual is now responsible for success-failure of the venture

– Technical jealousy if manager used to do programmer's job

– Asserts ownership of programmer's time and space Programmer resents the stress and demand of being

at work 24/7

– Crucial management mistake: programmer is rewarded with additional responsibility

Page 14: The Programmer Life Cycle

Irreplaceable + Resentful= Volatility Phase

Two outcomes possible...

Page 15: The Programmer Life Cycle

Outcome 1: Programmer Quits

Programmer quits due to additional workload coupled with stress of being irreplaceable yet resented

Page 16: The Programmer Life Cycle

Outcome 2: Uneasy Peace

Stabilize into equilibrium of mutual need

Page 17: The Programmer Life Cycle

Stage 5: Bored

Primary activities no longer about programming Knowledge transfer Supervising other team members Documentation Maintenance Meetings

Productivity < 500 LOC/month

Page 18: The Programmer Life Cycle

Stage 6: Unproductive

Management sees the programmer as coasting Programmer only works hard enough not to get fired Programmer updates his/her resume/CV Result:

– New employer; or,

– New project/challenge.

Page 19: The Programmer Life Cycle

Productivity as a Function of Stage

Page 20: The Programmer Life Cycle

Student Feedback

Students loved this lecture

– enjoyed it when I talked about programming as a career

– my experience at web-based startups was in stark contrast to textbook

Published as a paper in ACM Software Engineering Notes in 2004

Page 21: The Programmer Life Cycle

What Was This Really About?

My own personal experience as senior software engineer at...

Page 22: The Programmer Life Cycle

AbeBooks.Com (1998-2000)Rick and Me

Page 23: The Programmer Life Cycle

Prophet.Net (2000-2005)Tim and Me

Page 24: The Programmer Life Cycle

Backstage Technologies (2006-10)Me and Chris

Page 25: The Programmer Life Cycle
Page 26: The Programmer Life Cycle

Why I Wrote This Book

Public perception of computer scientist as loner, loser, or geek is at odds with reality of software engineering as a social profession

– Reality is more like Office Space and less like Big Bang Theory

– Students always struggled with working in groups

Page 27: The Programmer Life Cycle
Page 28: The Programmer Life Cycle

Negative Stereotypes...?

Page 29: The Programmer Life Cycle

Software Engineering is a Social Activity

Software Engineering is: not just programming multi-person construction of multi-version software

(Parnas, 1975)

Social means: the interactions with others and the collective

coexistence internal interactions: team members external interactions: customers

Page 30: The Programmer Life Cycle

The Human Factors of Programmers

software development is done by teams of people working towards a common goal

programmers are not interchangeable eunuchs

project success is effected by the team's ability to communicate and cooperate, and to be compassionate and supportive

Page 31: The Programmer Life Cycle

We Are All Imperfect

“Adjusting to the requirement for perfection is, I think, the most difficult part of learning to program.”

Fred Brooks, The Mythical Man Month

“Adjusting to the imperfections of others is, I think, the most difficult part of learning to be a software engineer.”

Me, Lord of the Files

Page 32: The Programmer Life Cycle

Lord of the Files Thesis

Technical and mathematical maturity is not enough

Also need plain old maturity

Overcome your insecurities and be nice to your co-workers

Better software will result

Software Engineer = Good Programmer + Good Person

More info: http://facebook.com/LOTFiles