• en | es

Sandro Mancuso

Software craftsman, author, and founder of the London Software Craftsmanship Community (LSCC). Sandro has been coding since a very young age but only started his professional career in 1996. He has worked for startups, software houses, product companies, international consultancy companies, and investment banks.

During his career Sandro had the opportunity to work in a good variety of projects, with different languages, technologies, and across many different industries. Sandro has a lot of experience in bringing the Software Craftsmanship ideology and Extreme Programming practices to organisations of all sizes. Sandro is internationally renowned by his work on evolving and spreading Software Craftsmanship and is frequently invited to speak in many conferences around the world. His professional aspiration is to raise the bar of the software industry by helping developers become better at and care more about their craft.


Publications

How do I convince...?

How can I convince my team to adopt TDD? How do I convince my manager that we should do pair programming? How do I convince the business that we should invest in Continuous Integration? Those are questions we normally get everywhere we go to talk...


Teal Organisations

Video - Sandro Mancuso on how companies have evolved, presented at Munich Software Craftsmanship Community Most organisational models are broken and very few employees can say they are empowered and trusted to do their jobs. Most professionals today want far more than a job—they want...


Codurance Barcelona

We are very happy to announce that we have opened a new office in Barcelona. Why Barcelona? Barcelona has a vibrant Software Craftsmanship community which is very aligned to our values at Codurance. We hope to provide a home for some of the talented developers...


Bowling Kata in Clojure, F# and Scala

In one of our evening apprenticeship meetings, a pair was doing the Bowling Kata in Java. After reviewing their code, I thought that it would be a good idea to do it myself. Every craftsman at Codurance is a polyglot developer and, although we have...


We did it wrong, but not all was in vain

Yes, there was over engineering. Loads of it. Back in the mid 90s, when I started my career as a developer, the goal was to become an architect. No serious developer would dare writing a single line of code before selecting our preferred design patterns—we...


Cohesion - The cornerstone of Software Design

Cohesion is one of the most important concepts in software design. Cohesion is at the core of the vast majority of good design principles and patterns out there, guiding separation of concerns and maintainability. The term cohesion (alongside coupling) was first introduced by Larry Constantine...


Open Financials

Early this month we took a big step towards full transparency and decided to open the financials to the whole company. Our decision is aligned to the open-book management concept. Why did we do that? The short answer: it was the right thing to do....


Changing Scalatra and sbt default directories

Conventions are not always good. I recently started a new internal web project at Codurance and I decided to use Scala. As I'm not a fan of big frameworks, I chose Scalatra as a micro web framework. The first challenge was that I wanted to...


Practicing Well-Crafted Design

Katas are great, but not enough. In the past year I’ve been trying to find ways to teach our craftsmen and apprentices how to design software. Although we could discuss good design principles, it was very difficult to find a way to practice them. Katas...


Does TDD really lead to good design

Does TDD really lead to good design? “TDD is a design tool.” That’s what I’ve said for years. But not anymore. After working with different teams in different organisations, I realised that I don’t believe anymore that TDD is a design tool. In this talk...


Code review: Why are we doing it?

Developers across many organisations adopted code reviews as one of their core practices. Although that sounds like a very reasonable thing to do, over time the goal that led to the adoption of the practice is forgotten and the only thing left is the mindless...


Interview with Sandro Mancuso - Software Craftsmanship

Thinking of code as a beautiful work of art is a mistake. But at the same time we need to start seeing coding as a genuine skill that deserves professional recognition, says leading Software Craftsmanship advocate and JAX London speaker Sandro Mancuso. This interview was...


Increasing complexity one entity at a time

While working on one of our internal tools, I decided to make a small comprise and not follow my own advice. We are building a mini CRM tool and the initial requirements were: Maintain information about the companies we are dealing with; Maintain a list...


Inflection Point

We all say that software design is all about trade-offs but how do we actually reason about it? How do we decide how much code we are going to write for a given task? Is the easiest thing that could possibly work the right approach?...


Does TDD really lead to good design?

Recently I tweeted that TDD can’t lead to a good design if we don’t know what good design looks like. I was also saying that we probably should teach design before TDD (or at least, at the same time). This tweet led to a discussions...


Outside-In TDD part 3

Oustide-In TDD (part III) Different from the previous screencasts, this one is not meant for TDD beginners. Inspired by recent discussions on Twitter and a public discussion about TDD and Software Design (see video below), Sandro Mancuso decided to record a video showing how he...


Outside-In TDD part 2

Oustide-In TDD (part II) Different from the previous screencasts, this one is not meant for TDD beginners. Inspired by recent discussions on Twitter and a public discussion about TDD and Software Design (see video below), Sandro Mancuso decided to record a video showing how he...


Outside-In TDD part 1

Oustide-In TDD (part I) Different from the previous screencasts, this one is not meant for TDD beginners. Inspired by recent discussions on Twitter and a public discussion about TDD and Software Design (see video below), Sandro Mancuso decided to record a video showing how he...


TDD and Software Design

TDD and Software Design JB Rainsberger and Sandro Mancuso started an interesting discussion on twitter about TDD and design. However twitter is not the best place to host these kind of discussions it's better to talk. Sandro and JB will discuss and answer questions face...


Q&A about The Software Craftsman

Our co-founder Sandro Mancuso was interviewed by Ben Linders from InfoQ. Below is the full transcript. In the book The Software Craftsman, Professionalism, Pragmatism, Pride Sandro Mancuso explores how craftmanship plays a role in agile software development. The book contains stories, examples and practical advice...


Interaction Driven Design

Interaction Driven Design How can we quickly tell what an application is about? How can we quickly tell what it does? How can we distinguish business concepts from architecture clutter? How can we quickly find the code we want to change? How can we instinctively...


User Story Guidelines

Disclaimer: This post was extracted from an internal Codurance document used to help our apprentices to learn how we work. We all understand that each project is different and that by no means we can apply exactly the same techniques and practices everywhere. However, the...


Rethinking Pair Programming

By default, we always do our work in pairs. We strongly believe that the quality achieved by two people working on the same task is superior to when done by a single person. However, there are times where pairing is not very efficient. Pair programming...


Balanced Abstraction Principle

One of the things that make code complicated to read and understand is when the instructions inside a method are at different levels of abstraction. Let's assume that our application only allows the logged-in user to see trips from her friends. If users are not...


Code quality cannot be measured

We cannot effectively measure what we can't precisely define. And this is definitely true when it comes to software quality. What is software quality? What does quality mean? Quality for whom? Compared to what? In which context? Are we talking about quality from a developer's...


Naming Test Classes and Methods

What should my first test be? What should I test next? These are common questions that I'm asked over and over again. I quite often ask these questions myself. Deciding on what to test is hard. Deciding on the order that things should be tested...


Test Driving Algorithms

Test-driving algorithms Test-driving algorithms is hard. In this video we show how to grow an algorithm test-by-test, only using very simple constructs and removing duplication.


Codurance - Looking forward to 2015

One year ago Mash and I were thinking how great it would be to be surrounded by great craftsmen, work with good clients, mentor talented apprentices, and a have decent office. We thought to ourselves: “We don’t want a company with employees. We want a...


Not all managers are stupid

(The following story was a bit altered in order to keep it short(ish) and to protect the innocents) I still remember the day when our managers in a large organisation told us we should still go live after we reported a major problem a couple...


Crafted Design

Sandro Mancuso on Crafted Design How can we quickly tell what an application is about? How can we quickly tell what it does? How can we distinguish business concepts from architecture clutter? How can we quickly find the code we want to change? How can...


Google+ Sign-In with Scalatra

The requirements For one of our internal pet-projects at Codurance, we decided to have authentication and authorisation using Google+ Sign-in. Google+ Sign-In is able to authenticate anyone with a Google email account (gmail or business) using OAuth 2.0. However, we wanted to restrict the application...


TDD is NOT (just) about you

Recently, another big debate about TDD started on Twitter and blogosphere. Is TDD dead? (No, that's ridiculous.) Does it improve or damage our design? Does it make us faster or slow us down? Seb Rose compiled a list of blog posts and tweets about it,...


Test Driving Algorithms

Software Craftsmanship After over ten years since the Agile summit, software projects are still failing and developers are still behaving and being treated as factory workers. The software development industry is still very amateur when compared to other professions. How can we change this? Why...


Screencast - Explanatory Methods

On 9th of April 2014, we created our first screencast on our new YouTube channel. The idea is to have a series of (reasonably) short videos explaining some of the techniques we use when developing software. The videos will range from basic to advanced topics...


Explanatory Methods

Explanatory Methods Using explanatory methods to make the code more readable, expressing the business rules.


Just Another Day at the Office

On 4th of March 2014, a few days before my baby boy Samuel completed two months, a well-regarded cardiologist—let's call him Dr. Smith—gave us the news that Samuel had a heart condition called pulmonary valve stenosis. Dr. Smith's recommendation was that Samuel had a heart...


Software Craftsmanship book is now finished

Yesterday a wonderful 19-month journey came to an end. I released the last chapter of my book Software Craftsmanship: Professionalism, Pragmatism, Pride. As an avid reader since a young age, writing a book was always something I wanted to do. For me, it didn't matter...


Samir Talwar is our first craftsman

We are very happy to announce that Samir Talwar is joining us as our first craftsman. Mash and I first met Samir back in October 2010, when he joined LSCC. Samir became a very active LSCC member, ran many technical sessions, became an LSCC Associate,...


Starting a Software Craftsmanship Community

Two people that meet regularly are already a community. The first thing to know if you want to start a community is that it is much simpler than you think. You just need another person that is keen to meet regularly and a public space...


UGtastic Interviews Sandro Mancuso

UGtastic Interviews Sandro Mancuso In this interview, right after his talk "Craftsmanship: A few years on", Sandro discusses the future of Software Craftsmanship and addresses some of the criticism on Software Craftsmanship movement.


Craftsmanship: A Few Years On

Craftsmanship: A Few Years On It's been 12 years since Pete McBreen's book and 5 years since the Software Craftsmanship summit. So, what is the current state of Software Craftsmanship? If there is a Software Craftsmanship movement, where is it? What is it? Is it...


AgileByExample: Software Craftsmanship

AgileByExample: Software Craftsmanship After over ten years since the Agile summit, software projects are still failing and developers are still behaving and being treated as factory workers. The software development industry is still very amateur when compared to other professions. How can we change this?...


Test Deafness

A few months ago I was talking to a musician friend of mine. He is also Brazilian, same age as me, and moved to the UK on the same year I did. As we were talking about music, I mentioned I like punk rock. He...


My birthday wish list

Today is my birthday. Yay! And since today is all about me, I will choose what I want as a present. As a developer, here's what I want: I want developers to be empowered to do whatever they need to do to satisfy the real...


Functional Programming is cool, but do you know OO?

Functional Programming is cool, but do you know OO? Functional programming is becoming more and more popular, and for good reasons, but now a big number of developers are bashing Object Oriented Programming. However, how much do we really know about Object Oriented Programming? Inheritance,...


Screencast: Testing and Refactoring Legacy Code

In this screencast I take a small piece of legacy Java code that contains the most common problems found in much larger legacy code bases. The objective is to first write tests to understand what the code does and then refactor it to make it...


Testing and Refactoring Legacy Code

Testing and Refactoring Legacy Code In this video, we take a piece of crappy Java code with no tests. Our objective is to write tests for it and then refactor to make it better. The code has the most common problems that much larger legacy...


The Wrong Notion of Time

No one wakes up in the morning and say "Today I'm gonna screw up. Today I'm gonna piss my boss and all my team mates off writing the worst code I could possibly write". Well, there are always exceptions but normally no one does that....


UGtastic Interviews Sandro Mancuso

UGtastic Interviews Sandro Mancuso In this interview Codurance co-founder Sandro Mancuso talks Software Craftsmanship communities in London and Europe.


Testing legacy code with Golden Master

As a warm up for SCNA, the Chicago Software Craftsmanship Community ran a hands-on coding session where developers, working in pairs, should test and refactor some legacy code. For that they used the Gilded Rose kata. You can find links to versions in java, C#...


The best approach to software development

Today, talking about doing a big design up-front (BDUF) sounds a bit ridiculous, right? Who would do that? That's not craftsmanship, is it? However, in the past, that would be considered the norm. Writing requirement documents, drawing architectural and very low level detail diagrams was...


Curing Agile Hangover with Craftsmanship

Curing Agile Hangover with Craftsmanship Agile adoption brings into focus the shortcomings in the existing engineering practices. After undergoing an Agile transformation for a few years at UBS, where the focus was heavy on process and light on the technical disciplines, it is an understatement...


Test-driving Builders with Mockito and Hamcrest

A lot of people asked me in the past if I test getters and setters (properties, attributes, etc). They also asked me if I test my builders. The answer, in my case is it depends. When working with legacy code, I wouldn’t bother to test...


Testing multiple properties with single assertion

Every time I was trying to test an object's properties I was neither satisfied writing very verbose tests nor in using some of the out of the box hamcrest matchers. Although using the matchers was a big help, I never managed to make them read...


Extract, Inject, Kill: Breaking hierarchies (part 3)

In part one I explain the main idea behind this approach and in part two I start this example. Please read parts one and two before reading this post Although the main ideas of Extract, Inject, Kill is already expressed, it's good to finish the...


Extract, Inject, Kill: Breaking hierarchies (part 2)

In part 1 of this post I explain the problems of using the template method in deep class hierarchies and how I went to solve it. Please read it before reading this post. Here is a more concrete example in how to break deep hierarchies...


Extract, Inject, Kill: Breaking hierarchies (part 1)

Years ago, before I caught the TDD bug, I used to love the template method pattern. I really thought that it was a great way to have an algorithm with polymorphic parts. The use of inheritance was something that I had no issues with. But...


Code coverage is a side effect and not an end goal time

In my previous life as a consultant, one of our clients hired us to "increase the code coverage" of their code base. We would not develop any new features or make any changes. They just wanted us to write tests. Basically they wanted us to...


Mentorship in Software Craftsmanship - part 3

In previous posts I covered: Part 1: Mentor and mentee roles, gains and sacrifices, mutual respect Part 2: How to choose mentors and mentees and mentorship misconceptions Walking the long road together (or at least part of it) Once the relationship between mentor and mentee...


Installing Io language on Ubuntu

Since I'm new to Ubuntu and I had a hard time installing Io language, I've decided to record my steps. Hopefully I'll remember all of them and other people won't struggle as much as I did. I'm running Ubuntu 11.10. The main problem I had...


Mentorship in Software Craftsmanship - part 2

In part one I gave a bit of background history and also described the roles and responsibilities of mentors and mentees according to the Software Craftsmanship principles. In this second post I'll be convering a few other areas related to the relationship itself. Remember that the focus...


Mentorship in Software Craftsmanship

How's mentorship seen in Software Craftsmanship? First, a little bit of background and metaphor In the medieval times, apprentices would work in workshops an would be mentored by senior craftsmen (journeymen) or by the master craftsman himself. The apprentice had the responsibility to learn, observing the...


LSCC's First Code Retreat

On September 10th we had the London Software Craftsmanship Community's First Code Retreat. We had 22 passionate and talented developers working in Java, C#, Ruby, Python and JavaScript. Some of them travelled two hours, waking up as early as 5am, to come to the code...


One year of London Software Craftsmanship Community (LSCC)

Without a sense of caring, there can be no sense of community. Anthony Burgess Happy Birthday, LSCC!!!! On 18th of August 2011, the London Software Craftsmanship Community completed one year. And what a great year we had! How did it all start? David Green and...


SRP: Simplicity and Complexity

Simplicity does not precede complexity, but follows it. Alan Perlis The Single Responsibility Principle (SRP) - one of the SOLID principles - is definitely one of my favourites principles in Object-Oriented Design. I find its simplicity and, at the same time, its complexity fascinating. I...


Testing legacy: Hard-wired dependencies (part 2)

In part one, I showed how to unit test a method that uses a Singleton and makes static calls. So now, let's have a look at common code problems we find in legacy code, using the same example: public class TripService { public List<Trip> getTripsByUser(User...


Testing legacy: Hard-wired dependencies (part 1)

When pairing with some developers, I've noticed that one of the reasons they are not unit testing existing code is because, quite often, they don't know how to overcome certain problems. The most common one is related to hard-wired dependencies - Singletons and static calls....


Working with legacy code

Context Large organisations' systems may have from tens of thousands to a few million lines of code and a good part of those lines is legacy code. By legacy code I mean code without tests. Many of these systems started being written many years ago,...


A change in attitude - Legacy code

Attitude is a little thing that makes a big difference. Winston Churchill Not long ago, I gave a talk about Software Craftsmanship where I asked who liked to work on greenfield projects. Almost everyone raised their hands. Then I asked who liked to work with...


Re-drawing my own map: A new milestone

For every step you take towards mastery, your destination moves two steps further away. Embrace mastery as a lifelong endeavour. Learn to love the journey. George Leonard: Mastery: The Keys to Success and Long-Term Fulfillment It is with a mixture of sadness and excitement that...


Open-source developers deserve respect

I was recently reading Gojko Adzic's blog post called How is it even possible for code to be this bad? I must admit that I was very sad to see tremendous lack of respect towards the Hudson/Jenkins community and towards open source software developers in...