3. DEFINITION
One of the original definitions of Software
Engineering (NATO SOFTWARE ENGINEERING
CONFERENCE 1968):
Software engineering is the establishment of sound engineering
principles in order to obtain economical software that is reliable and
works efficiently on real machines.
4. DEFINITION
On Software Craftsmanship by Pete McBreen:
Becoming a good software developer involves a lot more than
just learning to write programs. Software development is a
craft, it blends science, engineering, mathematics, linguistics
and art.
5. DEFINITION
The book The Pragmatic Programmer paints software
craftsmanship as similar to traditional medieval
European craftsmanship where an apprentice learns a
craft under the guidance of a master gradually climbing
his way into becoming a skilled journeyman, eventually
branching off on his own and working towards mastery
of the craft.
6. SIMILARITY
Shared engineering and craftsmanship goals:
• Meeting customer needs
• Delivering high quality software
• Ensuring timely release
• Minimizing risk of failure
7. ISSUES WITH
ENGINEERING
Engineers often seem to believe that they can completely
streamline the process of building software, with complete
control and predictability. And, this belief seems to be process
independent. In other words, even engineers who are strong
advocates of agile often believe that if you do a, b, and c, you
will get the results you want.
8. ISSUES WITH
ENGINEERING
Engineers often think that one has to learn
all, most, or many best practices before successfully
building software.
9. ISSUES WITH
ENGINEERING
Some engineers seem to think that best practices
apply everywhere or in every situation. More
experienced engineers are aware that different
contexts require different best practices though.
10. MITIGATION IN
CRAFTSMANSHIP
Craftsmen see software development more as an
art that emerges and less as a science that can be
controlled, so they let time and experience shape up
their skills in successfully completing software
projects.
11. MITIGATION IN
CRAFTSMANSHIP
Craftsmen often discover their own best practices
from their experiences, which often better fit their
situations.
12. MITIGATION IN
CRAFTSMANSHIP
Craftsmen do not religiously follow even their
own best practices, often transcending them when
they do not make sense in a new situation anymore.
They thus rely more on their intuition and gut
feelings to succeed.
13. SOFTWARE ENGINEERING
REVISITED
Even Tom DeMarco, one of the early key figures in
the software engineering world, famous for the quote
"You cannot control what you cannot measure", recently
renounced the controlled development approach in an
article posted by the IEEE, titled "Software Engineering:
An Idea Whose Time Has Come and Gone?"
14. DIFFERENCE
While engineering is about the macro goal of
delivering economical software that is reliable and
efficient, craftsmanship is about the micro process
of mastering the skills to achieve that macro goal.
15.
16. ENGINEERING'S GOT A
BAD REP
Unfortunately, engineering got some undeserved
negative associations over time:
• Strict
• Big Up Front Design
• Heavy-weight process (Waterfall?)
• Everything is predictable
• Measure everything
17. MOSTLY BECAUSE OF
THINKING TRAPS
Reactive vs Proactive thinking
Getting too attached to words instead of seeking the meaning
behind them
Accepting education from the media instead of digging for
knowledge personally
Silver bullet syndrome
Black & White thinking
23. SOFTWARE ENGINEERING
AT GROUPON
Software Architecture
Website
Deal Service
Order Service
Mobile
User Service
24. SOFTWARE ENGINEERING
AT GROUPON
Verification and Acceptance Testing
• As a user who has seen the personalize wizard
• When I advance past step 1
• And I refresh the page
• And I open the personalize wizard
• Then I should see the step I was previously on
30. SOFTWARE CRAFTSMANSHIP
AT GROUPON
Internal Training Courses
Often given by Noel Rappin
Author of Professional Ruby
on Rails and
Rails Test Prescriptions
31. SOFTWARE CRAFTSMANSHIP
AT GROUPON
High Encouragement to Present at Conferences
• Check out my talk Rails Engines Patterns at
RailsConf 2012 on Apr 23, 2012
32. SOFTWARE CRAFTSMANSHIP
AT GROUPON
Hosting Conferences and Meetups
• Weekly GeekFest Lunch (public)
• Weekly Brown Bag (internal)
• Annual Groupon University (internal)
33. SOFTWARE CRAFTSMANSHIP
AT GROUPON
Having a few Masters around
• Michael Feathers, author of Working Effectively
with Legacy Code, and alumni of Uncle Bob’s
Object Mentor software consultancy.
• Aaron Bedra, author of Programming Clojure, and
contributor to the Clojure programming language.
35. SOFTWARE
APPRENTICESHIP
AT GROUPON
Potential over Credential
6 Months with 3 milestones
A mentor oversees apprentice entire period
36. SOFTWARE
APPRENTICESHIP
AT GROUPON
Apprentice pair-programs with different people in
different teams
Apprentice spends about 50% of his time on his
personal project
Apprentice presents his personal project to senior
developers (journeymen) at the milestones
39. REFERENCES
Work at Obtiva and Groupon
The Pragmatic Programmer book by Andy Hunt and
Dave Thomas
Software Craftsmanship book by Pete McBreen
Software Apprenticeship Patterns book by Dave
Hoover and Adewale Oshineye
40. GROUPON IS HIRING
Potential over Credential
Ruby on Rails, Java, or System Operations
Agile, Test Driven Development, Pair Programming
Passion to foster a collaborative environment and
partner with business on delivering value