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.


Blogs

Bowling Kata in Clojure, F# and Scala

Bowling Kata in Clojure, F# and Scala

In one of our evening apprenticeship meetings, a pair was doing the [Bowling Kata](http://codingdojo.org/cgi-bin/index.pl?KataBowling) 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

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 - 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

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](https://en.wikipedia.org/wiki/Open-book_management) concept. ## Why did we do that? The short answer: it was the right thing to...


Changing Scalatra and sbt default directories

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](http://www.scalatra.org/) as a micro web framework. The first challenge was that I wanted to...


Practicing Well-Crafted Design

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...


Code review: Why are we doing it?

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

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...


Increasing complexity one entity at a time

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...


Inflection Point

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?

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](https://twitter.com/sandromancuso/status/588503877235781632). 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...


Q&A about The Software Craftsman

Q&A about The Software Craftsman

_Our co-founder [Sandro Mancuso](http://twitter.com/sandromancuso) was [interviewed by Ben Linders from InfoQ](http://www.infoq.com/articles/mancuso-software-craftsman). Below is the full transcript._ In the book [The Software Craftsman](http://goo.gl/KgxKaw), Professionalism, Pragmatism, Pride Sandro Mancuso explores how craftmanship plays a role in agile software development. The book contains stories, examples and practical advice...


User Story Guidelines

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

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...


Balanced Abstraction Principle

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

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

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...


Codurance - Looking forward to 2015

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

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...


Google+ Sign-In with Scalatra

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](https://developers.google.com/+/). 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...


TDD is NOT (just) about you

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](http://twitter.com/sebrose) compiled a [list of blog posts and tweets](http://claysnow.co.uk/to-tdd-or-not-to-tdd/) about it,...


Screencast - Explanatory Methods

Screencast - Explanatory Methods

On 9th of April 2014, we created our first screencast on our new [YouTube channel](https://www.youtube.com/user/codurance). 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...


Just Another Day at the Office

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](http://en.wikipedia.org/wiki/Pulmonary_valve_stenosis). Dr. Smith's recommendation was that Samuel had a heart...


Software Craftsmanship book is now finished

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](http://leanpub.com/socra). 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

Samir Talwar is our first craftsman

We are very happy to announce that [Samir Talwar](https://twitter.com/samirtalwar) is joining us as our first craftsman. Mash and I first met Samir back in October 2010, when he joined [LSCC](http://londonswcraft.com). Samir became a very active LSCC member, ran many technical sessions, became an LSCC Associate,...


Starting a Software Craftsmanship Community

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...


Test Deafness

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

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: 1. I want developers to be empowered to do whatever they need to do to satisfy the...


Screencast: Testing and Refactoring Legacy Code

Screencast: Testing and Refactoring Legacy Code

In [this screencast](https://www.youtube.com/watch?v=_NnElPO5BU0) 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...


The Wrong Notion of Time

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....


Testing legacy code with Golden Master

Testing legacy code with Golden Master

As a warm up for [SCNA](http://scna.softwarecraftsmanship.org/), the [Chicago Software Craftsmanship Community](http://www.meetup.com/ChicagoSC/) 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](https://github.com/sandromancuso/Gilded-Rose-Kata). You can find links to versions in java, C\#...


The best approach to software development

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...


Test-driving Builders with Mockito and Hamcrest

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

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)

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

*In [part one](/2012/03/06/extract-inject-kill-breaking/) I explain the main idea behind this approach and in [part two](/2012/03/06/extract-inject-kill-breaking_06/) I start this example. Please read parts [one](/2012/03/06/extract-inject-kill-breaking/) and [two](/2012/03/06/extract-inject-kill-breaking_06/) 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)

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

*In [part 1](/2012/03/06/extract-inject-kill-breaking/) 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](/2012/03/06/extract-inject-kill-breaking/) before reading this post.* Here is a more concrete example in how to break deep hierarchies...


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

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

Years ago, before I caught the TDD bug, I used to love the [template method pattern](http://en.wikipedia.org/wiki/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

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

Mentorship in Software Craftsmanship - part 3

In previous posts I covered: Part 1: [Mentor and mentee roles, gains and sacrifices, mutual respect](/2011/10/05/mentoring-in-software-craftsmanship/) Part 2: [How to choose mentors and mentees and mentorship misconceptions](/2011/10/10/mentoring-in-software-craftsmanship_09/) ###Walking the long road together (or at least part of it) Once the relationship between mentor and mentee...


Installing Io language on Ubuntu

Installing Io language on Ubuntu

Since I'm new to Ubuntu and I had a hard time installing [Io language](http://iolanguage.com/), 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

Mentorship in Software Craftsmanship - part 2

In [part one](/2011/10/05/mentoring-in-software-craftsmanship/) 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

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

LSCC's First Code Retreat

On September 10th we had the London Software Craftsmanship Community's [First Code Retreat](http://www.meetup.com/london-software-craftsmanship/events/27600561/). ![Code Retreat](/assets/img/custom/blog/coderetreat01.jpg) 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...


One year of London Software Craftsmanship Community (LSCC)

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](http://www.londonswcraft.com/) completed one year. And what a great year we had! ###How did it all start? [David Green](http://twitter.com/activelylazy) and...


SRP: Simplicity and Complexity

SRP: Simplicity and Complexity

Simplicity does not precede complexity, but follows it. Alan Perlis The Single Responsibility Principle (SRP) - one of the [SOLID](http://craftedsw.blogspot.com/2010/06/object-oriented-design-principles-part.html) 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)

Testing legacy: Hard-wired dependencies (part 2)

In [part one](/2011/07/16/testing-legacy-hard-wired-dependencies/), 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...


Testing legacy: Hard-wired dependencies (part 1)

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

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

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](http://skillsmatter.com/podcast/design-architecture/what-is-software-craftsmanship/js-1956) 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

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

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...