My face

I'm an enthusiastic software professional with a soft spot for agile development.

Here I gather my works and thoughts.


I currently live and work in the beautiful city of Trieste, Italy.


I am a signatory of the Manifesto for Agile Software Development and of the Manifesto for Software Craftsmanship, which I hold, in some incarnations, among the simplest yet best ideas about software development for the 21st century. Their focus on people, relationships, and values takes what was considered a technical-only task - software development - to a different level, bridging the gap between what is just a software and what is a 'really useful' software.

I work mostly using Java and Python programming languages, yet I think that a developer should be language agnostic and pick the best tool to perform his job in a certain context; lately I'm quite happy when using Ruby, especially for small tasks that need to be automated, and I'm becoming increasingly interested in functional languages.

I'm quite experienced at developing web-oriented, distributed applications with a lot of networking inside, in medium-sized development teams (10-15 people).


I strongly support the idea that quality matters - any way to do something is not the best way to do it.

Teamwork is an essential part of software development. Very few great pieces of software have been created and evolved by a single person, and a motivated, well-jelled team can achieve a development speed which is orders of magnitudes greater than the sum of its components. Let's forget the myth of the genius programmer

I think that problems should be solved where they arise, at their root, and that software is not a solution for business process issues. Creating a software to solve an issue caused by a poor business process may just create a crappy software, and estabilish a bad practice as the 'right way to do it'.

I believe automation is a key factor to highly efficient organizations: as soon as a task can be automated, its burden is gone. How long does that task take is not really important: a lot of time every day is wasted in small, trivial, and yet necessary, manually-performed tasks.

I think that an essential part of software development involves dealing with complexity: mapping a complex concept requires a proper analysis and decomposition in smaller pieces that can be understood and individually handled. A complicate problem doesn't justify a complicate solution.

I like to say that software development is partly a science, partly an art; both faces deserve their own merits and woes, and balance between them should be achieved when programming.

Continuous improvement is the way to achieve better and better results. No one knows everything from the beginning, but that's not a good excuse for not learning from the past. The fact that something has worked (or not worked) someway since long is not a good reason not to improve it.

Innovation can provide groundbreaking advantages to an organization; it often stems from research and needs a favourable environment in order to flourish. Failure is a necessary by-product which must be accepted and learned from.

  • ruby logo

    docker-rpm-builder Fast native RPM building

    Building an RPM can be slow and messy. Especially if you're not on an RPM-based host distribution. docker-rpm-builder leverages docker for easy RPM building.
  • java logo

    jquickrepo minimalistic disk-based persistence

    Whenever you need persistency but a full-fledged DBMS/KV Store/(put anything in there) is an overkill, chances are that a save-and-retrieve-from-disk solution must be created on the fly every time. This project offers such very basic yet reusable piece of functionality.
  • ruby logo

    extrarange ruby ranges on steroids

    Enhanced Ruby ranges that support operations on sparse ranges. They try to act as normal ruby ranges as much as possible, yet they greatly enhance the power of the language.
  • python logo

    pydenji Python(ic) Dependency Injection Toolkit

    Dependency Injection the python(ic) way. If you though that could be achieved by large and cumbersome xml-based frameworks only, take a peek at this!
  • python logo

    ducktypes Does it quack like a duck?

    Duck typing is fun. If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck. Ducktypes lets you tell whether it swims, quacks and looks like a duck.
  • python logo

    annopyte Annotations for Python

    PEP-3107 function annotations are a nice way to add metadata to Python; such metadata is available on Python 3.x and on functions only. This toolkit backports such functionality to Python 2.x and extends it to allow annotations on any object.
  • python logo

    hgskipcommit skip committing some files

    Extension for the mercurial distributed version control system that allows the user to skip the commit of tracked files, especially to prevent IDEs or externals tools from accidentally polluting a project's history via unintended changes.


It's my tech blog, where I discuss something on software, be it programming, analysis, methodologies, or just a rant. My latest post is


Mostly Unixish

where I write about sysadmin-friendly tips and tricks, I recommend some Linux/Mac tool, or I discuss about some strange gotcha I wouldn't like to need sorting out ever again. I recently sorted out


Here you can find some links to my presentation stuff, slides, and some videos.

  • english language

    Python Good Practices

    Florence, July 2013 @ Europython.
    Python is quite a powerful language; sometimes, it’s a too much powerful language. Do you know how to tame it without getting caught in its perils and gotchas? Quite a lot of scaffolding and DOs/DONTs can be seen in this talk.
  • lingua italiana

    Quanto conosci il tuo debito tecnico? (v2.0)

    Florence, April 2013 @ Develer Workshop.
    A new version of my Technical Debt talk, with more focus on technical debt sources. Pick the slides here.
  • lingua italiana

    Continuous Delivery in un baleno

    Milan, November 2012 @ Italian Agile Day.
    A 10 minutes introduction to the setup of a continuous integration + continuous delivery server. Pick the slides here.
  • lingua italiana

    Quanto conosci il tuo debito tecnico?

    Florence, September 2012 @ Better Software.
    A revisited version of my Technical Debt talk. Pick the slides here.
  • english language

    Language alone won't pay your bills

    Florence, July 2012 @ Europython.
    Each platform is got its own tradeoffs. Python is a great language, what about the whole platform? How do Python tools, IDEs, deployment work together?
  • lingua italiana

    Capire e gestire il debito tecnico

    Rome, November 2011 @ Italian Agile Day.

    Do your once-looking-good projects crumble after some amount of time? Do you spend more and more resources on just maintaining something working rather than improving it? Technical debt may be the root cause of all your issues, even though you may not know it - but you can handle it.

  • english language

    Dependency Injection is your friend

    Florence, June 2011 @ Europython.

    There I introduce Dependency Injection and Inversion of Control themes to python developers. It's highly recommended if you think DI just means bloat!

  • lingua italiana

    Twisted for dummies

    Florence, May 2010 @ Pycon Quattro.
    It's a rather large introduction to the many concepts underlying the Twisted network programming framework. I think it was too an ambitious talk and I don't recommend watching it if you want to get introduced to Twisted - check out that instead.
  • lingua italiana

    Perspective Broker: Real Programming Comfort

    Florence, May 2009 @ Pycon Tre.
    It's an introduction to the great RPC/Object broker offered by the Twisted framework.
  • lingua italiana

    Introduzione alla programmazione asincrona

    Trieste, October 2008 @ Linux Day

    Some example of async programming using Python and Twisted. No link available at this time.