7. Software Engineering Software engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software. IEEE Computer Society's Software Engineering Body of Knowledge
8.
9.
10.
11. Software Engineering: The process "People ask, doesn't this process stifle creativity? You have to do exactly what the manual says, and you've got someone looking over your shoulder," says Ted Keller (senior technical manager). " The answer is, yes, the process does stifle creativity ." Space shuttle project - NASA (1968) "They Write The Right Stuff" - Fast Company article (1996)
13. Software Engineering for the masses The Good Enough Era... ... and the simplest thing that could possibly work. "I'm going to deliver a system to you in six months that will have 5,000 bugs in it - and you're going to be very happy!" Edward Yourdon Rise and Resurrection of the American Programmer (1996)
14. Agile Software Development We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value: Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan That is, while there is value in the items on the right, we value the items on the left more.
15.
16. Cargo Cult Agile “ We do standups – so we're agile” “ We have retrospectives – so we're agile” “ We write user stories – so we're agile” “ I'm a Certified Scrum Master – of course we're agile”
17. Good enough is not always good enough Many Agile projects are now, steadily and iteratively, producing mediocre software.
18. "The original torch of the Agile message has changed hands, and is now being carried by the Software Craftsmanship movement." Robert C. Martin (Uncle Bob)
19. What is Software Craftsmanship? “ Is an approach to software development that emphasizes the coding skills of the software developers themselves. It is a response by software developers to the perceived ills of the mainstream software industry, including the prioritization of financial concerns over developer accountability” Wikipedia
20. What is Software Craftsmanship? A different definition “ It is a long journey to mastery. It is a lifestyle where developers see software as a craft and not as engineering. It's a commitment to perpetual learning and improvement of their craft. Software Craftsmanship is all about putting responsibility, professionalism, pragmatism and pride back into software development”
21.
22. Manifesto for Software Craftsmanship raising the bar As aspiring Software Craftsmen we are raising the bar of professional software development by practising it and helping others learn the craft. Through this work we have come to value: Not only working software, but also well-crafted software Not only responding to change , but also steadily adding value Not only individuals and interactions , but also a community of professionals Not only customer collaboration , but also productive partnerships
37. The Craftsmanship Discussion 1. How the team structure should be? 2. How can we define the “journey”? 3. Would promotion by public recognition work?
Welcome to the first London Software Craftsmanship Community meeting.
David Green - Java developer; gambling - Writing software 20 yrs; commercially for 10
Passionate about software Believe software can be better; we can be better Keep seeing same mistakes: - complexity, technical debt - typists, not craftsmen - software factory Didn't write the book – I'm no Bob Martin just passionate professionals Bring community together so we can all learn - share experiences/ideas Its about you – ask questions Phones silent
How many ppl are programmers? Everyone stand - Java - C# - Python - Ruby - PHP - Anything else? Anyone not a developer? - PM - Agile Coach - Anyone else? Summarize – good mix, mostly...
Programmers stand again - Over the age of 30 sit down (need rest) - Anyone still in university? - Rest sit
Programmers stand Sit down if: - taught yourself first language - learnt first language at university - learnt first language at work
Let’s talk about software engineering
Software crisis – extremely large projects Hardware still being developed Hardware worth millions National security and people’s lives at risk Bugs could be catastrophic
-Software Engineering can be very effective for critical systems
Money is not a problem Thin slice of NASA’s pie Most expensive dollar-per-line project One of the most expensive software organisations
-Development process seen as production line -Coders not developers -Creativity was forbbiden
- Cheaper hardware - business at all sizes needed software; Could not afford to pay $35m per year Not expensive hardware nor life-threatening situations. - Process had to be adapted impatient and lower budget businesses - New process aimed faster and cheaper development - Most adopted were the iterative and incremental (RUP) - Evolution to the Agile software development methodologies Yourdon also wrote Decline and Fall of the American Programmer (1992).
- Biggest success of various methodologies - Defined the last decade - Moving away from engineering – to empirical approach. Inspect & adapt. Unknowns - Process people; process police Individual responsibility; encouraging right interactions - Working software – not doc; Project success: amount of doc - Seen both sides of contract negotiation Not productive – who's paying - Change is the only constant; “ how are we tracking against the baseline plan?”
This year's IT Project Success Rates Survey 200 individuals; US, Europe & Asia 12% of agile projects failed; 18% of traditional projects failed Mike Cohn tells story of salesforce.com Big scrum adoption – 200 engineers virtually overnight Compelling story of how scrum, agile can improve delivery
Richard Feynman: 1940s remote islands in South Pacific Natives never seen modern civilisation. Allied troops build temporary base of operations. Setup airstrip, control tower, don headphones Call down great metal birds from the sky Valuable cargo shared with the natives When troops leave, cargo stops coming Natives view cargo with religious significance They build airstrip out of bamboo, coconuts for headphones- but metal birds never come back Agile adoption in danger of doing same Visible behaviours without understanding the ideas
Agile became synonymous of Scrum (Process oriented) XP practices were not largely adopted Quality is overlooked by managers and dev team -Projects failing. - No specifications or diagrams anymore. - Management process improved but development still production line with unskilled and cheaper workers.
Agile is a success Agile became synonymous of Scrum and a project management tool Improvement not at the desired level proposed by creators -Agile not used as proposed -Not being used to improve the quality of code delivered -Not being used to create long-lasting software
I don't think that this definition really catches the essence. It's a bit cold and dull.
- A bit more passion here. - better metaphor - software as a craft, creative process and art. Pride of our work professional and pragmatic during implementation.
2009 – Conferences in US, UK and other European Countries 2010 – Code retreats more popular around the globe.
Well-crafted software: Greenfield / brown field 5 year-old legacy we are scared to touch. Software Hostage, bad code. must be maintainable and predictable. steadily adding value: Not just add features / fix bugs. Software as asset. Keeping tidy stretches life-span and ROI. Boy Scout Rule community of professionals: what we are doing here tonight Our responsibility for training the next generation Our responsibility for moving the industry forward. productive partnerships: Question requirements, propose improvements. Our best interest to make a software succeed. build reputation Partnership with customers. Shift of perspective bringing advantages to the customer.
PC story 9-5 People in the audience Musician play guitar, Accountant new regulation, chef restaurant Bad code slows us down Professional developer Time constraint and req not excuse Long lasting, high quality, robust, maintainable, testable Cares about ROI Care about reputation
Looked at various methodologies; but what about individual developer? What does it take to craft great software? Creativity & problem solving Design as art; inspired; inspiring; hard to understand “ Problem solving easiest part, which problem to solve is hardest” Judgement; pragmatism. Need experience Observe others; bitter personal experience Computer science, understand the machine Know a language, source control, TDD, pair programming Excel in all four areas to craft great software
If we're to excel in all four areas – a lot to learn How many did a sw eng / comp sci degree? How many been on training course? How many read programming books? How many go to conferences?
All very interesting; good theoretical foundation. How much is actually used in industry?
Graduate has lot to learn Right that uni doesn't teach this Who had to learn this? Who has taught it?
Then start learning alphabet soup: SOAP, JMS, RMI, Spring, Hibernate etc.. etc... Learn thru books; colleagues or training courses here at skillsmatter How many have been on training courses? - SCJP - CSM - other courses? SCJP – good programmers who haven't; poor programmers who have CSM – everyone & their aunt. Great course. Danger of being devalued
How many mentored someone new to company? How many kept that going beyond first 3 months? Personally found mentoring hugely valuable - continuous feedback - pass on his knowledge - improve judgement – impossible to learn thru books, courses
We need continuous learning: - degree courses - training courses - feedback (pair programming / peer review) - books - conferences - mentoring
Practice, practice, practice! Crafting software: learn by doing Deliberate practice
Kata is an exercise – designed to allow student to learn through practice and repetition - removes commercial constraints - focus on learning Dojo – take problem and work thru as a group - normally one pair; others observe - pair rotates every 5 minutes Code retreat – longer format; work thru a problem numerous times - delete code after each iteration - add constraints to an iteration (no arrays, no ifs)
Only way to improve practical skill is to do it Deliberate practice allows us to focus on learning
Recall "Judgement" from earlier slide Understanding how others make decisions Competence over certification Pragmatism over specific processes Mentoring over training
Software craftsmanship is about a community of professionals raising the bar of software development, by continually learning through deliberate practice and the sharing of knowledge, experience and ideas.
-better metaphor -Apprenticeship more learning than teaching; Apprentice -> journeymen: public recognition; work without assistance, verifiable work Journeymen: acceptance of the responsibility for creating robust, high-quality applications and acceptance of the craftsmanship approach. Work for different masters A master needs to take journeymen and apprentices under his wings and provide an environment which they can practice their craft. Becoming a master: Not a certificate or exam. Mastery is achieved by sequence of successful projects; Recognised by other software developers and customers Constantly recommended. Ages to build this reputation.
- Promotion - from apprentice to journeyman - from journeyman to master - Team structure - Mater craftsman: 1 master, 3 journeymen, 9 apprentices - Chief Programmer Team - Ivory tower? Dependency on a single person? Hierarchy? What about self-organised teams? - The journey - Work for different masters - Change jobs frequently?
- Promotion - from apprentice to journeyman - from journeyman to master - Team structure - Mater craftsman: 1 master, 3 journeymen, 9 apprentices - Chief Programmer Team - Ivory tower? Dependency on a single person? Hierarchy? What about self-organised teams? - The journey - Work for different masters - Change jobs frequently?