Download presentation
Presentation is loading. Please wait.
1
Software Craftsmanship
Creating a Culture of Software Craftsmanship -- About ME – Thank everyone for coming 18 years Software Consultant One of my responsibilities to improve software quality @KeithDHar keithdharrison
2
Agenda Managing Complexity
How to creating a culture of software craftsmanship Managing Complexity – primary activity in software development, problems cause when we don’t manage complexity Creating a Culture of Software Craftsmanship can help manage compl
3
Why Projects Fail Poor Planning Poor Requirements Poor Management
Code Complete 2 – Steve Mcconell
4
Fail For Technical Reasons
Uncontrolled Complexity
5
Accidental Languages IDEs CI/CD
Fred Brooks - Mythical Man Month, Paper - no silver bullets 1986 Accidental complexity - problems which engineers create and can fix; for example, the details of writing and optimizing assembly code or the delays caused by batch processing. Languages - Managing memory, high level programming languages IDE – command line tools for compliers to integrated IDEs that do everything for us. Masively decreased over time
6
Essential Business rules Interactions with real world Algorithms
Essential complexity is caused by the problem to be solved, and nothing can remove it; if users want a program to do 30 different things, then those 30 things are essential and the program must do those 30 different things.
7
How complex? Data from byte to petabyte Millions lines of code
Age calculation from DoB Google search data/Netflix movies
8
What happens if I don’t Manage Complexity? Defects
Ever increasing dev times Afraid to change No reuse Unhappy developers Rewrites
9
Func1() var1 Func4() Func3() var2 var3 Func2() Minimize the amount of essential complexity that anyone’s brain has to deal with at any one time. (Code sample) Dijkstra pointed out that no one’s skull is really big enough to contain a modern computer program (Dijkstra 1972), which means that we as software developers shouldn’t try to cram whole programs into our skulls at once; we should try to organize our programs in such a way that we can safely focus on one part of it at a time. The goal is to minimize the amount of a program you have to think about at any one time. You might think of this as mental juggling—the more mental balls the program requires you to keep in the air at once, the more likely you’ll drop one of the balls, leading to a design or coding error.
10
Characteristics of Good Design
Minimal complexity Ease of maintenance Loose coupling Cohesion Minimal complexity – no overly complex solutions, reduce accidental complexity Ease of maintenance – Write code for people not computers. Minimise thinking Loose coupling – Reduce dependencies (TDD helps with this ) Cohesion- degree to which the elements inside a module belong together. High cohesion is associated with several desirable traits of software including robustness, reliability, reusability, and understandability
11
Levels of Design Microservices, layer architecture
12
How do we create a culture of Software Craftsmanship?
Put developers at the centre (not process/management) Not a science/engineering discipline or art. Combination of the three. A Craft Process – compare to factory Not just programming but programming well. Putting people at the centre Maintainable code, works today and can be changed tomorrow Not an Engineering discipline but a craft Software Craftsmanship: The New Imperative Paperback by Pete McBreen
13
Quality Deadlines Conflicting interests
Meeting their deadlines in the short term Making the code maintainable in the long term. Quality -> Maintainability, Usability, Performance Quality
14
Refactor or hack? What do I name this variable? What do I test?
-- Decisions a developer faces -- -> What do I call this variable -> Should these functions be in there own class -> Should I refactor design or hack a solution -> Should I use a library or write from scratch Choices are endless Choices will have a large effect on the short terms and long success of the project. -- Management reviewing all these decisions is impossible -> developers must be trusted to make the right decisions -> A culture must exist to promote this -> How can management create this culture? People before process Call centre worker reading a script Command and control NeoTaylorism -
15
-- ‘Liars and Outliers’
4 social pressures that enable us to cooperate with and trust others: American cryptographer, computer security and privacy specialist, and writer. He is the author of several books on general security topics, computer security and cryptography.
16
Moral Reputational Institutional Security I do it because it’s right
I do it because of what others will think of me Reputational I do it because I get rewarded/sanctioned Institutional I do it because I’m forced to Security -> Moral – I do it because it’s right -> Reputational – I do it because of what others will think of me -> Institutional – I do it because I get rewarded/sanctioned -> Security – I do it because I’m forced to
17
EXAMPLES
18
Reputational Reviews Code reviews Pair programming
Reputational- I’ll write good code because others will see my bad code. Institutional – I’ll write good code because I’ll be asked to rewrite my bad code. Reputational
19
Moral Group learning Coding dojos In house training sessions
I’ll write good code because it’s the right thing to do and that’s what others are doing. Moral
20
Institutional Moral Project Management Quality Related Tasks
Moral – I’ll write good code because I like my fellow employee and don’t want them to be stuck with my bad code
21
Conclusion Create a culture of software culture to manage complexity
Think about your culture Think about your culture Try these ideas Think up your own Share them! #CultureSoftCraft
22
CODECRAFTCONF FRIDAY 14th SEPT 2018
ROYAL COLLEGE OF PHYSICIANS AND SURGEONS, GLASGOW
23
@KeithDHar keithdharrison Questions?
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.