being a professional software developer
DESCRIPTION
Talk from Agile Saturday 3 event in Estonia. It is about being professional in general as well as following agile best practices, such as build automation and continuous integration.TRANSCRIPT
2
Anton KeksAnton KeksCo-founder of Co-founder of CodeborneCodeborne
Lecturer at Lecturer at Tallinn Technical UniversityTallinn Technical University
Member of the board of Member of the board of Agile EstoniaAgile Estonia●
Author of Author of Angry IP ScannerAngry IP Scanner
Strong believer inStrong believer inAgileAgile and and Open-sourceOpen-source
IterativeIterativeNOT Big-BangNOT Big-Bang
AdaptableAdaptableNOT PredictableNOT Predictable
TeamworkTeamworkNOT Lone RangerNOT Lone Ranger
TestingTestingNOT PrayingNOT Praying
SimplicitySimplicityMaximizing the amount of work not doneMaximizing the amount of work not done
Software professional?
Professionalism in medicine● Surgeon 1 does the same operation over and over in
his Beverly Hills clinic and makes a lot of money● Surgeon 2 is competent in all the standard
operations but in addition has developed an innovative procedure and, because of the time devoted to innovation, makes less money than Surgeon 1
● Surgeon 3 has developed an innovative procedure and practices it regularly, but also makes time for occasional travel to France, China, Japan, and Argentina to teach other doctors how to practice the innovation
Credit http://tinyplanet.ca/projects/professionalism.html
Professionalism in software
● Picks a worthwhile problem to attack● Has dedication to the end-user experience● Impressive competence, Expert, Master● High quality work, Very productive● High standards, Attitude, Best practices● Learns, Innovates● Teaches (by example, code-review, face-to-face)
Craftsmanship
Software Software CraftsmanshipCraftsmanship
Software Software Craftsmanship...Craftsmanship...
...the ...the CodeborneCodeborne way way
http://manifesto .softw
a recraft smansh ip.org
Thinking
Guessing
Patching
Coding
WTF
UNPROFESSIONAL
How to be a true professional?
Build & Integration ProblemsBuild & Integration Problems
● ““It works on my PC”It works on my PC”● Other developer has broken everythingOther developer has broken everything● Release Management necessityRelease Management necessity● Software build is a separate taskSoftware build is a separate task
– Delayed integrationDelayed integration● Installation to production failsInstallation to production fails
– During the night, of courseDuring the night, of course
The solution?
Automate everything!Your build must be a single step process
Once you automate, you can do a lot!
Heavyweight
Lightweight
Complex
Simple
22
Frequent integrationFrequent integration
● Common integration branch (mainline)Common integration branch (mainline)● Commit often!Commit often!
– At least At least every few hoursevery few hours– Never hNever hold your changes for longer old your changes for longer
than a daythan a day● No one works with obsolete codeNo one works with obsolete code
““Pay me now or pay me more later”Pay me now or pay me more later”
23
Continuous integrationContinuous integration● Regular automated builds of the softwareRegular automated builds of the software
– Recompile, run tests, redeploy, generateRecompile, run tests, redeploy, generatedocumentation and reportsdocumentation and reports
– Software is packaged and is ready to runSoftware is packaged and is ready to run● Discover conflicts: provides short feedback Discover conflicts: provides short feedback
to developersto developers● Offload longer running tasksOffload longer running tasks● Constantly growing working systemConstantly growing working system
Hudson(extensible continuous integration server)
Step-by-step installation
Go to: www.hudson-ci.orgDownload: hudson.war
Run: java -jar hudson.warOpen: http://localhost:8080
What Hudson does?
● Runs and monitors your builds● Cron-like or by polling the code repository
● Visualizes stats● Passed tests, test coverage, compiler warnings, etc
● Distributes builds across multiple machines● Builds software on multiple architectures● Can fully manage the whole release process
What Hudson does?
Next level checklist
✔ Accept the idea that automated test suite is not just about testing; it is about proving the code works
✔ Anything that can be automated, automate it
✔ Never accept the idea of that's the way its done here
✔ Push back any attempt to make technical decision/estimation by non-tech people
✔ Share knowledge - anyone can get hit by a truck
✔ Working software is more important than optimizing metrics for performance reviews
Technical debtTechnical debtAnd don't forget paying theAnd don't forget paying the