Passion. That summarizes it all. Software craftsmen are passionate about software development and their profession.
==========
Being a craftsman doesn’t mean you are superior or better than any other developer. When a developer calls herself a craftsman, she is just stating the values and professional attitude she has. But that doesn’t mean that developers who don’t call themselves craftsmen don’t have the same values or attitude.
==========
Being a software craftsman is about more than just waking up in the morning, going to work, and getting paid to do some stuff. 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 craftsmen are humble, always ready to learn from more-experienced developers, and eager to help the less experienced.
==========
Craftsmanship is an ideology. XP is a methodology. An ideology is about values, attitude, and behavior. A methodology is about practices that solve specific problems.
==========
“Making things work is the minimum I expect from someone who is paid for it,” he calmly said.
==========
Back in the 1990s, a developer would be considered a senior developer if she could write code that no one else could understand.
==========
“How it is done is as important as getting it done.”
==========
And writing code that no one else could understand would make you a senior developer straightaway.
==========
Software developers are normally considered senior according to the number of years they have worked in the industry and not according to their knowledge.
==========
Seniority is not a badge we can wear for the rest of our lives after completing five years in the industry.
==========
Modern developers need to know how to speak to customers, automate tests and deployment, make technological choices that may affect the entire business, work in distributed teams, help clients to define and prioritize requirements, report progress, manage changes and expectations, present products to potential clients or partners, help with pre-sales activities, estimate time and costs, interview new team members, design and evolve the software architecture, deal with nonfunctional requirements and service level agreements (SLAs), understand business goals, make decisions based on trade-offs, keep an eye on new technologies and better ways to do things, worry about the value delivered to their customers, and many other things.
==========
We don’t do Agile. Either we are Agile or we are not.
==========
To fit this way of working, software professionals had to evolve. Instead of just being specialists, like in the past, companies started to look for generalizing specialists. Being good at writing code is the minimum skill expected from software professionals. Testing, analysis, ability to understand the business, good communication, and a more extroverted personality became part of the skill set that software professionals need today.
==========
Many Agile projects are now, steadily and iteratively, producing crap code.
==========
I have seen many companies state strongly that they wanted to adopt Agile but not make much effort to actually be agile.
==========
Agile transformations were focused on process but not on technical disciplines, which means that they did very little to make developers better.
==========
Many people in the Agile and Lean communities love to talk about Toyota and how successful they became changing their process, reducing waste (or inventory), limiting work in progress (WIP), and all the great things they have done.
==========
Every software process, including Agile processes, will assume technical excellence. Without technical excellence, every software project will be a painful, frustrating, and expensive experience.
==========
Agile methodologies help companies to do the right thing. Software Craftsmanship is about professionalism in software development. Software Craftsmanship is an ideology, which many developers decided to adopt in order to get better at what they do.
==========
Software craftsmanship is a long journey to mastery. It’s a mindset where software developers choose to be responsible for their own careers, constantly learning new tools and techniques and constantly bettering themselves. Software Craftsmanship is all about putting responsibility, professionalism, pragmatism, and pride back into software development.
==========
Software Craftsmanship is about professionalism in software development.
==========
For some, it is a trade. For others, it is engineering. Very few would say that software development is a science.
==========
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.
==========
A paraphrase of a Boy Scout rule (first applied to software by Uncle Bob) states that we should always leave the code cleaner than we found it.
==========
Learning from each other is by far the best way for us to become better. Writing blogs, contributing to open source projects, making our code publicly available, becoming part of our local communities, and pairing with other developers are some of the ways we can contribute to the greater good of our industry.
==========
Sharing our knowledge with less-experienced software craftsmen is our moral obligation.
==========
Clients don’t pay professionals to learn. Clients pay professionals for their knowledge and skills.
==========
If developers want to be treated as professionals, they should start acting as professionals. A software professional must, among other things, get involved and contribute to the business, provide options and solutions, and offer the best service when it comes to the implementation, technologies, and quality of what we produce.
==========
A few examples would be The Pragmatic Programmer, The Mythical Man-Month, Design Patterns (GoF), Test-Driven Development: By Example, Extreme Programming Explained: Embrace Change, The Clean Coder, Software Craftsmanship, and Refactoring. It may take many years to master the content in the books in this category.
==========
All software developers should have their own blogs, regardless of how much experience they have. We should all share our experiences and findings and help to create a great community of professionals.
==========
A common problem that developers have with pet projects is finding a good idea. The good news is that you do not need one. You are not starting a new business. I always advise developers to choose a subject that they are very passionate about.
==========
Many of us get very attached to our own applications and code base, which can blind us to what the market really wants.
==========
Usually, we think of ourselves as very good developers, and we like to think that all the other developers are bad. Other developers write crap code, not us.
==========
Not knowing what we don’t know is also called second-level ignorance.
==========
If you are the type of person that says, “I don’t want to touch a computer outside work,” you probably should think again about your career choice; maybe software development is not for you.
==========
We were not acting professionally because we never said NO.
==========
We spent a few weeks working long hours and weekends. Of course when I say we, I am talking about the developers. The manager and the business analyst were nowhere to be seen after six o’clock and almost never available on the phone on weekends.
==========
saying yes to avoid disappointment is just lying.
==========
Professionalism means being honest with ourselves, with our teammates, and with our managers and customers.
==========
Raising the red flag as early as possible, indicating that something is wrong, allows the team and all people involved to be pragmatic and come up with alternative solutions.
==========
Rather than construction, programming is more like gardening.
==========
Our industry is finally learning that quality code may not guarantee the success of a project, but it can definitely be the main cause of its failure.
==========
It is easy to say that a piece of code is badly written. It is easy to complain or even laugh. But the question is: are you good enough to make it better?
==========
Although there are overlaps between Agile and Software Craftsmanship, Software Craftsmanship complements Agile by focusing on technical practices and providing a quick and short feedback loop on the quality of our code.
==========
In 1996, Kent Beck introduced and combined a set of practices that originated XP. Kent became the project leader on the Chrysler Comprehensive Compensation (C3) payroll system, and he proposed and implemented some changes in their practices—some of them based on his work with Ward Cunningham in the mid-1980s.
==========
The Boy Scout rule says: “Always leave the campground cleaner than you found it.”
==========
This is known as the “broken windows theory.”
==========
We, software craftsmen, value and control our careers.
==========
autonomy, mastery, and purpose.
==========
Our careers will always be more important than any specific job or company.
==========
More bluntly, only incompetent people are scared to lose their jobs.
==========
Your problem is that your selection process and whoever is responsible for it sucks. The selection process must be changed and whoever is behind it should be fired.”
==========
Good developers want to work with good developers and for them that is the only thing that matters.
==========
When a software craftsman makes a recommendation, it is implied that the recommended developer is also a software craftsman, and that he or she shares the same passion, values, principles, and dedication.
==========
As a company, don’t think you are the only one applying filters and looking for the best people. Good developers are also filtering bad companies out and looking for the best ones.
==========
During an interview, it is important to understand that we are not begging for a job. We are doing a business negotiation.
==========
The only thing I regret about that interview is that we were not fast enough to get back to him and he got a job somewhere else.
==========
Dealing with the client’s bureaucracy, business pressure, production issues, and stakeholders’ management are things that cannot be learned while coding a pet project or in our spare time. These are things that we just learn when we are actively involved in delivering software for real customers.
==========
Good developers don’t hire bad developers. They will try to find developers who are even better than they are; they know how important it is to have a great team—not just for the benefit of the company but for their own benefit as well.
==========
The ability to answer these stupid brainteasers has nothing to do with writing well-crafted code, being a good team player, or having a professional attitude. Brainteasers are a total waste of time, as Google interviewers finally realized after using them for a long time. At least for them, better later than never.
==========
Good developers are also interviewing companies and they will exercise their option to reject the bad ones.
==========
In projects like that, it is almost impossible for a single developer to change the world. Certain projects need a bigger intervention, where external experts need to be brought in and take control of the project for a period of time.
==========
Embracing Agile processes and ideology is essential for providing the right environment for improving morale, but when it comes to developers, we need more than that.
==========
community, internal or external. That’s exactly how LSCC, the largest Software Craftsmanship community in the world, started. Internal communities also start like that.
==========
It is not difficult to bring a culture of learning into an organization. The only thing needed is a passionate developer willing to start it. Stop finding excuses and be this developer.
==========
Many developers suffer from what Kent Beck calls adolescent surety.
==========
Developers in this group believe that looking smart is more important than being smart.
==========
Very few technical managers were actually great developers in the past, and even fewer were actually promoted because of their software development skills; they would disagree with this statement, of course. If they still write code, they may sometimes be perceived as Time Crunched.
==========
Don’t try to talk about details of your code or frameworks with managers or product owners. Instead, tell them about the benefits that your proposal has for the project: reducing maintenance costs, more reliable and frequent releases, and so on.
==========
You need to expose yourself. You need to be visible. You need to demonstrate how passionate you are and how much you care about the project and about what you are proposing.
==========
“If I make my boss happy, I’ll get promoted. I don’t care about the company, I care about my bonus.” This is selfish, unprofessional, and immoral.
==========
Developers are creatures of habit and are generally very opinionated. You cannot just go there and tell them what to do. The most efficient way to introduce a technical practice is to lead by example. Ask them to pair with you and show them how you do it.
==========
Real software professionals understand that responsibility should always come with accountability.
==========
Any stupid developer can make things work. What distinguishes great and mediocre developers is how they make things work.
==========
“Four Rules of Simple Design,” as defined by Kent Beck: 1. Pass all tests 2. Clear, expressive, and consistent 3. Duplicates no behavior or configuration 4. Minimal methods, classes, and modules Over the years, many people reworded these four rules (or elements). I personally prefer J. B. Rainsberger’s version: 1. Passes all tests 2. Minimizes duplication 3. Maximizes clarity 4. Has fewer elements
==========
The pragmatic approach would be to only introduce abstractions when they are really needed.
==========
Craftsmanship without pragmatism is not craftsmanship. A craftsman’s 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.
==========
Quality is not expensive. The lack of skills is what makes well-crafted software expensive.
==========
code—code that is testable, easy to understand, and easy to maintain.
==========
Software craftsmen are on a mission. They focus on bettering themselves, constantly investing in their own careers, and learning, teaching, sharing, and delivering value to every single client.
==========