Living a Coderetreat as a facilitator

Last 18th of November, I lived my first experience facilitating a Coderetreat. We celebrated the Global Day of Coderetreat, an annual event in which Coderetreats take place simultaneously around all the world. For those people who never attended a Coderetreat, it's a full day event...


Introducing Interaction-Driven Design

Before reading this post, I strongly recommend you read the two previous blog posts that serve as a foundation to this blog: MVC, Delivery Mechanism and Domain Model and A Case for Outside-In Development. Most software projects become very difficult to maintain and evolve after...


Java Optionals For More Expressive Code

Any of us who has programmed in a language that permits null references will have experienced what happens when you try to dereference one. Whether it results in a segfault or a NullPointerException, it’s always a bug. Tony Hoare described it as his billion-dollar mistake....


Software Design Bias

This week we had a software design night at Codurance. We spent almost three hours talking about many interesting things but there were a few things that really stuck with me: We all have software design bias. Project after project, we build our software design...


Fractured Skill: Compartmentalising Software Development

An assembly line is where the machine or a process directs the person to perform a well-defined task. Here, the person is little more than a piece of the machinery to churn out the same product over and over again. There is no room for...


A Case for Outside-In Development

There is no reason to have a backend when there is no front-end. There is no reason to have an API when there is no one to consume it. There is no reason to have a class when there is no other class (or framework)...


Find a workplace where you can grow

Surround yourself with people who expect more from you Many studies have shown the great impact of teachers expectations on students achievements. [...] expectations exert powerful influences upon both student and teacher behavior whether the expectations come from an external source or are held internally...


MVC, Delivery Mechanism and Domain Model

Model-View-Controller (or MVC for short) is one of the most misunderstood design patterns in software design. MVC has its origins in the SmallTalk community in the late 70s but it was only in 1988 that it was expressed as general concept in an article by...


A reflection on Software Craftsmanship

Many people inside and outside the Software Craftsmanship community refer to Craftsmanship as a “Metaphor” for Software Development. We ourselves often refer to Software Craftsmanship as a metaphor without thinking too much on what it means to us. Thinking deeper, and looking at our behaviours...


Light Access - A simple JDBC DSL

I prefer not to couple my entities (or data structures as I prefer to call them) to my database, neither via annotations nor via frameworks that use naming convention. I like to have total freedom to map whatever data in whatever format I have stored...


P3 Quality

What is software quality? Is it measurable? What should we focus on when we want to improve quality? It is still believed that quality in software is about automated functional tests. A manager worried about quality tends to contract external companies to automate functional tests....


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


NCrafts in 20 pictures

NCrafts 2017 is a two days conference in Paris. I had the chance to also attend an event storming workshop run by Alberto Brandolini a day before the conference. It was full of fun, socialising and learning. Here are some of my takeways of those...


My first year at Codurance

I have always been able to deliver what was asked and I was able to understand and pick up new project quickly, but the code base I would work on would always grow into something people would fear to touch, working with it would become...


Hierarchy of opinion

The word opinion has two distinct meanings according to the Oxford Dictionary: A view or judgement formed about something, not necessarily based on fact or knowledge. A statement of advice by an expert on a professional matter. Synonyms to the word opinion are: belief, judgement,...


What I wish I knew when I started as a software developer

Having worked in the software engineering field for 6 years, I sometimes pause and consider how much I have learned since I started my career. One thing that strikes me is how many things I would want to tell just-out-of-college me if I had the...


Communicating Design

Software design is crucial. It is the foundation of an application. Much like a blueprint, it provides a common platform for parties from all backgrounds. It facilitates understanding, collaboration, and development. Design should not be considered only an element of development. It should not live...


Thoughts on Coupling in Software Design

Coupling is a software metric that describes how closely connected two routines or modules are. It is a measure of quality. The concept was introduced by Larry Constantine in the 1960s and was formulized in a 1974 article for the IBM Systems Journal, Structured Design,...


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


Premature Microservices

Building your app from the very start as microservices is not a great idea! Their deployment is complex - regardless of how good your microservices infra is. They create boundaries in your application that resist change. Software applications are complex systems and complex systems are...


GitHubAnimator

The Beginning Inspired by my friend @SamirTalwar and the initiative he set upon himself to automate the world I picked up on an idea I had many months ago. Automating the generation of presentations using GitHub commits. What Problem am I Trying to Solve? Often...


Clojure VIM Environment

The Cursive plugin for Clojure is now out of its beta testing phase. I have been using it throughout its beta program and, I must say, it is pretty good. Sure, the refactoring capabilities are not quite on a par with those of IntelliJ for...


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


My first couple of months at Codurance

Some background Some of you may know me from the various meetups in the city, especially my attendance at a number of LJC and LSCC meetup events. Attending these events I learnt about various conferences like Devoxx, SoCraTes, JAX London, Java2Days, OpenFest, and I ended...


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?

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


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 craftsmanship plays a role in agile software development. The book contains stories, examples and practical advice...


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


What is it like to be a Codurance Apprentice?

This month Codurance is celebrating its first birthday. A lot has happened during that time, including the hiring of two apprentices. One of which, I am pleased to say is me! Three months into my apprenticeship, I thought I would provide some insight into how...


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


A Software Craftsman Is

Someone who aspires to quality. Someone who considers the means as well as the ends. Alternatively, one who realises that everything has more than one outcome, and that as many of them as possible should be considered. Someone who does not build unnecessary things. Someone...


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


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


Keeping the domain in the core

Inspired by Alistair Cockburn's excellent article on Hexagonal Architecture, on our current project we have kept the core domain of our application independent of the infrastructure by taking the simple decision to divide our code into two main sections (higher level packages): infrastructure and core....


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


Resist the "Just in Case"

Of all the projects I have worked on a big regret has been; adding complexity where it was not needed. I was recently reminded of, how easy it is to fall into that trap. We are in the process of developing a new feature for...


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

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


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


Codurance Logo

Software is our passion.

We are software craftspeople. We build well-crafted software for our clients, we help developers to get better at their craft through training, coaching and mentoring, and we help companies get better at delivering software.

Latest Blogs




Contact Us

15 Northburgh Street
London EC1V 0JR

Phone: +44 207 4902967

Carrer Aragó, 208
08011, Barcelona

Phone: +34 689 723 737

Email: hello@codurance.com