Software Craftsmanship
Introduction and Philosophy
April 19, 2016
Introduction
Scott Franks
Feb 2013
RDT
Rage ATM
Osborne, Austin
July 2015
Security Tech Ops - Data Lake
Purple Rain
Walters, Darwin
Feb 2015
Card
Mainstreet DevOps
https://pollev.com/scottfranks188
What is Software Craftsmanship?
I see software development as a creative blend of art, science, and engineering, whose purpose is to deliver effective systems. The best way I have been able to describe this idea is by talking about software craftsmanship. The software craftsmanship metaphor allows developers to acknowledge all aspects of their craft – the artistic and aesthetic aspects as well as the measurable and mechanical aspects. - Peter McBreen
Software Craftsmanship is a metaphor. The goal being to emphasize personal skill, mastery of tools and techniques, along with productive relationships with your peers and clients.
Software as a Craft
A craftsman or artisan is a skilled manual worker who makes items that may be functional or strictly decorative.
- How is software a craft?
- How is software different from typical crafts?
- What things make programmers artisans?
- Why is it important to improve in your craft?
- What are important qualities of a skilled craftsman?
- How can you improve your crafting skills?
Software as an Art
Writing code is similar to painting a picture. A programmer who writes clean code is an artist who can guide a blank screen through a series of transformations until it is an elegantly coded system.
-
Easy to recognize a good painting.
-
Hard to paint a good picture.
Programmers are authors – responsible for communicating well with their readers.
-
You write for readers who need to comprehend your motivation and intentions.
-
The ratio spent reading vs. writing code is usually at least 10:1.
Software as a Science
The communal growth of Software Craftsmanship is analogous to the Scientific Method. There have been many developers before you:
-
If I have seen further, it is by standing on the shoulders of giants. - Isaac Newton
The best practices, design patterns, and design principles we are going to go over in this course were created by "giants". Leveraging them will allow you to produce more value than reinventing the wheel through trial and error.
The Scientific Method
Tackle development tasks with a structured approach.

Science
UI/UX Design
Programming
Bridge Building
Ask a Question
Background Research
Construct Hypothesis
Test with Experiment
Analyze Data &
Draw Conclusions
Communicate Results
Identify a User Problem
User Research and Interviews
Construct
Prototype
User Testing and Feedback
Incorporate Feedback
Hand Off / Implement Design
Proposal Request
Survey Site
Design to Specifications
CAD and Physical Model
Improve Structure
Build Bridge
Identify Technical Problem
Gather Requirements
Plan Stories and Design System
PoC, User and Perf Testing
Improve Structure
QS Validation and Release
Why think of software development as a science?
Thinking of software development as a Science will help break the bad habit of:
"I don't know what to do so I'll just write code and see what happens..."
A civil engineer wouldn't say:
"I don't know what to do so I'll just start building this bridge and see what happens..."
Why think of software development as a craft/art?
Effective way to transition from the college mindset of software development to a professional mindset.
- From "journeyman" to "master"
Aligns with Capital One's objective of becoming an industry leader in technology.
Important for improving your technical skills and succeeding in the workplace.
From Journeyman to Master
As a student:
- Solve it
- Test it
- Fix it
- Turn it in
- Forget about it
As a professional:
- Solve it
- Make it easy to understand
- Make it easy to use
- Make it easy to change
- Test it
- Fix it
- Review it
- Commit it
- Test it
- Release it
- Support it
Mantras of a Software Craftsman
-
Broken windows
- One broken window, left unrepaired, instills in the community a sense of abandonment.
-
Boy Scout rule
- "Leave the campground cleaner than you found it."
-
Tests are your parachute
- Keep them free of holes and obstructions.
Your Knowledge Portfolio
Your knowledge and experience are your most important professional assets.
Unfortunately, they're expiring assets.
- Invest regularly
- Diversify
- Manage risk
- Buy low, sell high
- Review and rebalance
Expand your knowledge portfolio regularly; not only with technical expertise but also Capital One expertise.
Care about your craft
Think about your work
Continuously make small improvements
Code Reading Competition
https://gist.github.com/ClassicThunder/17f860ec37bc0e304ccc369911f865c8
Copy of Software Craftsmanship - Intro & Philosophy
By cof_softwarecraftsmanship
Copy of Software Craftsmanship - Intro & Philosophy
2016 - Day 1.1 - Session 2 Nova
- 337