Articles

Writing Usable APIs In Practice (pdf format)

These are the slides of a session I presented at the ACCU 2012 conference. Programmers, explicitly or implicitly, when working on complex systems, end up designing some APIs to accomplish their tasks, either because the product itself is some kind of general purpose library or because they need to write some libraries and packages to put some common code of their applications. There is plenty of information available about how to write clean and maintainable code, but not a lot about writing usable APIs. The two things are related, but they are not the same. In fact, clean code is code that is clean from the point of view of its maintainers, usable APIs, on the other hand, refer to code that programmers (other than the original author) find easy to use. We'll see how usable APIs help in writing clean code (and vice-versa). In this session I will introduce the concept of API usability, explain its importance--e.g., impact on productivity and defects--and show its relation with clean code, as well as some (sometimes surprising) research results from literature. I will also give some practical advice on how to start writing more usable APIs.


Talking Tests (pdf format)

These are the slides of a lightning talk I presented as part of the "Testing a la Carte" session at the ACCU 2012 conference. It uses the metaphor of talking to describe some bad (and unfortunately common) unit testing practices in a humorous way.


Fingers In The Air: A Gentle Introduction To Software Estimation (pdf format)

These are the slides of a session I presented at the ACCU 2007 conference. The process of estimating size, time, effort, etc., is fundamental for the success of every software project. Unfortunately, it is often the case that the stakeholders--including project managers, developers, and users--don't know how to do it properly (and also confuse estimates with commitments), and everybody ends up working against the clock to meet impossible targets, getting poor software late as a result. After a short introduction in which I'll present what can and should be estimated (e.g., time, size, effort, cost, etc.), and give an overview of some techniques, I'll focus on what is necessary to get started with some simple, but very effective techniques.


Scrum: Getting Started Without Getting Burned (pdf format)

These are the slides of a session I presented at the JavaPolis 2006 conference. This presentation is an in-depth introduction to Scrum and of some of the problems that may happen during its implementation, along with some hints and tips for their solution.


An Introduction To Scrum (pdf format) English version Polish version

This is a brief introduction to Scrum, a well known agile methodology, written for the Polish edition of this magazine.


Simple Simplest, or Simplistic? (pdf format)

These are the slides of a session I presented at the ACCU 2006 conference. Simplicity is a concept that lies at the very foundation of software engineering: simple software is more maintainable, has fewer bugs, has a longer lifetime, etc. In the last few years, the advent of Extreme Programming and agile methods has made simplicity (e.g., "do the simplest thing that could possibly work") even more fashionable. However, simplicity is an elusive concept, and, very often, people confuse it with the first idea they can think of, producing simplistic solutions that eventually lead to unnecessarily complex software. This presentation explores this concept, giving also real-life (good and bad) examples, and highlighting some of the reasons why we continue to produce unnecessarily complex software, and about what we can do to avoid the traps of simplistic solutions.


How to Shoot Yourself in the foot. In an Agile Way (pdf format)

In this article I describe what, in my experience, are the five most common and dangerous mistakes that can make the implementation of an agile methodology fail, along with some hints about how to avoid and/or fix them.


The Unnamed Process: Doing Agile With C++, Python, And A Tailor-made Process (pdf format)

These are the slides of a session I presented at the ACCU 2005 conference. It is an experience report on the implementation of a custom agile methodology with a particular focus on the human issues involved.


An Experience Report on Implementing a Custom Agile Methodology on a C++/Python Project (pdf format)

This is an experience report on implementing a custom agile methodology in a (successful) real-life project. Introducing a new methodology--and more generally, any kind of change--in an organisation may create several technical, human, and political problems. In this article, we describe the choices we made in order to minimise their occurrence, and how we managed to solve the ones we faced. Finally, we give an assessment of the results of our approach, including what worked well and what we would do differently the next time in similar circumstances.


Motivation, Teamwork, and Agile Development (pdf format)

Motivation has been recognized as the most important factor for productivity and quality. Nowadays, most software is developed by teams, so this article takes the approach of showing the strong connections between motivation and effective teamwork, and then showing how agile development methods are related to the latter.