Home » Author Archives: Sandro Mancuso

Author Archives: Sandro Mancuso

Software craftsman, founder of the London Software Craftsmanship Community (LSCC) and author of Software Craftsmanship: Professionalism, Pragmatism, Pride.

Does TDD really lead to good design?

software-development-2-logo

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 with J.B. Rainsberger, Ron Jeffries, and a few others. J.B. and I ended up having ...

Read More »

Design Patterns in the 21st Century: The Chain of Responsibility Pattern

software-development-2-logo

Here’s a thing you might not see a lot. @Test public void hungryHungryPatrons() { KitchenStaff alice = new PieChef(); KitchenStaff bob = new DollopDistributor(); KitchenStaff carol = new CutleryAdder(); KitchenStaff dan = new Server(); alice.setNext(bob); bob.setNext(carol); carol.setNext(dan); Patron patron = new Patron(); alice.prepare(new Pie()).forPatron(patron); assertThat(patron, hasPie()); } It might look odd, but the idea is fairly common. For example, the ...

Read More »

Design Patterns in the 21st Century: The Adapter Pattern

java-logo

This is part three of my talk, Design Patterns in the 21st Century. The Adapter pattern bridges worlds. In one world, we have an interface for a concept; in another world, we have a different interface. These two interfaces serve different purposes, but sometimes we need to transfer things across. In a well-written universe, we can use adapters to make ...

Read More »

Design Patterns in the 21st Century: The Abstract Factory Pattern

java-logo

This is part two of my talk, Design Patterns in the 21st Century. This pattern is used everywhere in Java code, especially in more “enterprisey” code bases. It involves an interface and an implementation. The interface looks something like this: public interface Bakery { Pastry bakePastry(Topping topping); Cake bakeCake(); } And the implementation: public class DanishBakery implements Bakery { @Override ...

Read More »

Dangerous Words

software-development-2-logo

Ludwig Wittgenstein was one the greatest philosophers of 20th century. His book Tractatus Logico-Philosophicus addresses the limits of language and its relationship with reality. A friend of mine, great polemicist, suggested me to read it some years ago to understand one of his favourites conversational deux ex machina: “I can’t prove that, because of the inherent insufficiency of the language.” ...

Read More »

User Story Guidelines

agile-logo

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 text below serves not only as a foundation but also as a guideline for all ...

Read More »

Rethinking Pair Programming

software-development-2-logo

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 pitfalls In a professional environment, pairing with developers who have a different software development foundation ...

Read More »

Balanced Abstraction Principle

java-logo

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 friends, no trips should be displayed. An example:     public List<Trip> tripsByFriend(User user, User ...

Read More »

The Wrong Notion of Time

agile-logo

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. If that is the case, how come Agile projects are now failing? How come do ...

Read More »

Best approach to software development

software-development-2-logo

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 the right thing to do. Well, that’s what very smart guys proposed on the 1968 ...

Read More »
Do you want to know how to develop your skillset and become a ...

Subscribe to our newsletter to start Rocking right now!

To get you started we give you our best selling eBooks for FREE!
Get ready to Rock!
To download the books, please verify your email address by following the instructions found on the email we just sent you.

THANK YOU!

Close