Upload
russell-ovans
View
1.828
Download
2
Embed Size (px)
DESCRIPTION
Not unlike the software systems they construct, programmers follow a life cycle, one that predicts their productivity.
Citation preview
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
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
University of Victoria: 2003-05
Teaching This: Software Life Cycle
While Working in Palo Alto: 2000-2005
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?
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
Programmer Life Cycle
1. Euphoric
2. Productive
3. Irreplaceable
4. Resentful
5. Bored
6. Unproductive
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
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
Euphoric + Productive= Honeymoon Phase
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...
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
Irreplaceable + Resentful= Volatility Phase
Two outcomes possible...
Outcome 1: Programmer Quits
Programmer quits due to additional workload coupled with stress of being irreplaceable yet resented
Outcome 2: Uneasy Peace
Stabilize into equilibrium of mutual need
Stage 5: Bored
Primary activities no longer about programming Knowledge transfer Supervising other team members Documentation Maintenance Meetings
Productivity < 500 LOC/month
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.
Productivity as a Function of Stage
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
What Was This Really About?
My own personal experience as senior software engineer at...
AbeBooks.Com (1998-2000)Rick and Me
Prophet.Net (2000-2005)Tim and Me
Backstage Technologies (2006-10)Me and Chris
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
Negative Stereotypes...?
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
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
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
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