Software Craftsmanship

7
Software Craftsmanship Develop your skills on a continuously enhancing canvas to grow up the value chain. Pallav Kumar SOFTWARE CRAFTSMANSHIP - PALLAV KUMAR 1

Transcript of Software Craftsmanship

Page 1: Software Craftsmanship

Software Craftsmanship Develop your skills on a continuously enhancing canvas to grow up the value chain. !Pallav Kumar

SOFTWARE CRAFTSMANSHIP - PALLAV KUMAR �1

Page 2: Software Craftsmanship

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

Page 3: Software Craftsmanship

!!

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

Page 4: Software Craftsmanship

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

Page 5: Software Craftsmanship

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

Page 6: Software Craftsmanship

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

Page 7: Software Craftsmanship

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