1. Software Craftsmanship
Develop your skills on a continuously enhancing
canvas to grow up the value chain.
!
Pallav Kumar
SOFTWARE CRAFTSMANSHIP - PALLAV KUMAR 1
2. Having ten years of experience & having one year of experience
repeated ten times - huge difference!!!
Ten years spent working on different projects, with different technologies,
and for different clients is different from ten years working for the same client, on
the same project, and with the same people and same technology.
Seniority is transient as clients will demand different types of systems as
technology evolves and relative as we need to define the context/technology we are
referring.
What make the project fail?
Poor management | Competitor’s superiority | Time to market | Bad
business strategy | Ill-defined processes | Badly written code
To overcome this we need to raise the bar.
Software Craftsmanship – A Metaphor – is
about responsibility, professionalism,
pragmatism, & pride in software evolution.
It’s a lifestyle.
!
SOFTWARE CRAFTSMANSHIP - PALLAV KUMAR 2
3. !
!
Manifesto of software craftsman elucidates
Not only working software,
but also well-crafted software
Well-crafted software means that,
regardless of how old the application is,
developers can understand it easily. The
side effects are well known and
controlled. It has high and reliable test
coverage, clear and simple design, and
business language well expressed in the
code. Adding or changing features does
not take longer than it used to take at
the beginning of the project, when the
code base was small.
Not only responding to change,
but also steadily adding value
When we talk about steadily adding
value, we are not just talking about
adding new features and fixing bugs.
This is also about constantly improving
the structure of the code, keeping it
clean, extendable, testable, and easy to
maintain.
Not only individuals and
interactions, but also a
community of professionals
Be passionate and always strive to
better ourselves. Sharing and
mentorship should in heart, learn from
others and express your thoughts.
Not only customer collaboration,
but also productive partnerships
We believe in partnership and
professional behavior above all. Actively
contribute to the success of the project,
questioning requirements,
understanding the business, proposing
improvements, and productively
partnering with our customers or
employers.
SOFTWARE CRAFTSMANSHIP - PALLAV KUMAR 3
4. Traits of Software Craftsman
Focus & Determination – Define the direction, understand the vision, and
keep the long term goal in mind. Take requirements, break them down into
smaller pieces, and iterate. While working on small iterations, also keep re-
evaluating the project’s goals and adapting when necessary.
Project as investment - Invest the ever-increasing knowledge, passion,
time, dedication, and professional attitude in every project and measure the
throughput. Adopt good technical practices, build great new teams, and inject some
passion into the existing ones.
Craftsman get motivated by three things: autonomy, mastery, & purpose.
• Autonomy: It is when we are in control of what we do, how we do it,
and when we do it. That should always be the case in a true agile context.
• Mastery: It is when we are constantly learning and evolving—
becoming better professionals and better human beings.
• Purpose: It is when we feel that our job is important and we are
contributing to make things better—instead of just doing what we are told
without understanding why.
Aggressive Offering – Pro-active in thoughts, understand the prospective
and come out with value additions. Think as partner, have the flavor of strategy &
enhances the return on investment.
Reduce the technical debt - Maintain the code - Code is organic and
requires constant maintenance. In order to increase business agility and have a
good return on investment, keeping code quality high is paramount. Craftsman
understands the impact of bad code and re-factor it. It is backed by a good battery
of automated tests that can test the entire application in just a few minutes. Time
constraints or change in requirements is never used as an excuse for bad code, use
good design principles and techniques throughout the application life span. The
language used to explain the business feature is in sync with the language that is
SOFTWARE CRAFTSMANSHIP - PALLAV KUMAR 4
5. used in the code to implement it and have unit and integration test associated with
it. The test coverage is also verified by preparing various matrix.
Dealing with legacy code - If you don’t like something, change it; if you
can’t change it, change the way you think about it. Craftsman focus on small
parts of it, one at a time, and start improving them, gradually. Working with
legacy code is almost like solving a big jigsaw puzzle, the more you join pieces the
more you get clarity.
The Intellectual Toolbox – Apply techniques that are best for business.
Know the right tool for the job and knows how to use it correctly. Involved in
inception, scope & discovery phase and realize the vision.
Conquer Complexity – Divide a system into subsystems at architecture
level to focus. Define the contracts, abstract the behavior. Apply the principles of
design and make the system robust by handling the non-functional requirements to
the perfection. Define the relationship between the conceptual integrity of the
architecture and its low-level implementation. Define guidelines. Design
prototypes, proof of concepts, feasibility studies and define the technology stack.
The Right Thing versus the Thing Right - This is achieved through a
combination of practices and activities: visualizing work in progress, just-in-time
prioritization and planning, focusing on minimum marketable features (MMFs),
backlogs, stand-up meetings, burn-down charts, user stories, acceptance criteria,
scenarios, definition of done, cross-functional teams, regular demos, focusing on
technical practices and providing a quick and short feedback loop on the quality of
our code. Craftsman encourages the adoption of best practices, technologies, tools,
processes, methodologies for the job.
!
SOFTWARE CRAFTSMANSHIP - PALLAV KUMAR 5
6. Culture of Learning – The most efficient ways of injecting passion into a
company. Craftsman generally creates a book club where members read and share
their leanings. Have brown bag sessions in which members talk about different
technologies, approaches/techniques. Conduct group code reviews and hands-on
coding sessions. Engage in pet projects, communities, practices.
Driving the technical challenges – Identify the problem arenas, defines
which category it falls like lack of awareness, less experience, time crunched,
failed, not able to vision. Be confident, honesty and transparency are core values.
Craftsman establish trust by consistently delivering quality software, expose and
demonstrate passion. Gain expertise and lead by example.
Pragmatic –Primary focus is customer satisfaction. Besides quality, time
and cost are part of this satisfaction. Code cannot be considered well-crafted code if
it doesn’t provide value. Craftsman writes clean and well-crafted code to give the
ability to quickly and safely make changes according to the business needs.
Quality is always expected but it should not be expensive. As big ball of mud
increases, bug increases, time to develop new features increases and hence the
cost, so craftsman produces quality code, lowers the cost of quality.
!
!
!
!
!
!
SOFTWARE CRAFTSMANSHIP - PALLAV KUMAR 6
7. Being a Software Craftsman
It’s all about the passion.
It’s a life of continuous dedication to the art of writing code. It’s a constant
search for better and more efficient ways to deliver value through software. Be
curious & experiment new things. Focus first on solving problems, not on writing
code, then write quality code that is testable, easy to understand, and easy to
maintain.
Be honest, courageous and provide solutions/options.
Software craftsmen wake up in the morning to make things better and to
change the world we live in. Being a software craftsman is far more than writing
well-crafted code or being a software developer.
It’s a lifestyle—a commitment to excellence. Embrace it. Be proud of the role
you play in the evolution of our society.
SOFTWARE CRAFTSMANSHIP - PALLAV KUMAR 7