(Read the english version here.)
Ho conosciuto un programmatore in Italia che stava sviluppando una applicazione per aiutare un Mercato dei Salumi e Formaggi (è così che si chiama il negozio) a meglio servire i suoi clienti.
In questo articolo provo a spiegare come lui ha riuscito a capire cos’era importante agli utenti dell’app e quali funzionalità dovrebbero essere presenti nel primo rilascio in produzione.
Questo mio collega era impegnato a sviluppare in modo incrementale basato sulle esigenze del cliente. In altre parole:
- rilasciare una nuova versione in produzione periodicamente (diciamo ogni due settimane) con nuove funzionalità, correzioni di bug e eventuali modifiche richieste dall’utente
- permettere all’utente di decidere (e aiutarlo a decidere) quali funzionalità devono essere consegnati prima
- scrivere tests in modo a guidare il design e la implementazione del software (TDD).
Continue reading “Draghi, Unicorni e Titani* – Un Racconto di un Sviluppatore Agile”
(First of all install Travis CLI if you haven’t done it yet.)
Tip 1: Updating GitHub Project Pages Automatically after Building
It’s pretty nice and very rare to have documentation up-to-date with the code base. Using Yatspec, GitHub and Travis CI (all part of my current work environment), it’s easy to test, document and publish the documentation automatically after a build (like this and this), and keep the docs always in synch with the code.
Let’s Do It…
1) (Obviously) Have Some Content to Publish
As mentioned before, the content I’m interested in publishing is the specification generated by Yatspec based on acceptance tests.
2) Configure GitHub Project Pages
Continue reading “Travis CI Tips”
Now that we have a very good idea about what app X is all about, we can finally start writing tests and implementing functionalities. We feel very good because we are a modern agile team, with TDD, pair programming, CI, even Kanban! There is a lot of work to do. And we mean business. But how long do we take to release new features? How long do we take to release the very first one?
Delivering the first functionality (let’s say in the Iteration 1) involves a lot of work exactly because it’s the first time the app is going to be released in production. Just to mention a few tasks:
- choosing all the essential libraries, tools, preferred frameworks and make them work together;
- set up repository, continuous integration, database in the dev environment*;
- prepare the staging environment*;
- production environment;
- automate deploy.
It’s common to have dev-teams developing code right after completing the 2nd or 1st task in the list, and measuring progress somehow. It certainly feels like a lot of progress is happening there (and we like to feel we are productive developers), though none of that is useful since customers can’t use the app yet.
Continue reading “Iteration 0”
It’s great how easy these days is to have a work environment that supports agile process (iterations, continuous integration/delivery, [B|T]DD) almost for free.
The fact alone that all this stuff is running on someone else machine is great. But, most important, there’s no need to spend a penny or spend very little compared to having your own infrastructure and people maintaining it (even if people means just you).
Continuous Integration & Delivery
I’m using GitHub as repository, and Travis CI for continuous integration (configurable in minutes) to test and build my projects as soon as I push code to GitHub.
Continue reading “Work Environment (beta)”
(Leggi la versione italiana qui.)
I’ve met a software engineer in Italy that was developing an application to help a Mercato dei Salumi e Formaggi to better serve their customers.
Here I tell how he managed to understand what was important to the users and which functionalities should be delivered first.
My colleague was committed to develop incrementally based on his client needs. That translates to:
- release a new version of the application in production periodically (let’s say two weeks) with new features, bug fixes and possible changes requested by the user
- let the user decide (and help him to decide) which features must be delivered first
- let tests guide software design and implementation.
Continue reading “Dragons, Unicorns and Titans* – An Agile Software Developer Tail”
This text is about developing RESTful web services using Java, Maven, Json and Spring 3. You can read instructions on how to setup a development environment for this kind of project here. The source code is available on GitHub.
As stated in this text,
[With Rest], requests and responses are built around the transfer of representations of resources. Resources are identified by global ID’s that typically use a uniform resource identifier (URI). Client applications use Http methods (such as
Delete) to manipulate the resource or collection of resources. Generally, a
GET method is used to get or list the resource or collection of resources,
Post is used to create,
PUT is used to update or replace, and
Delete is for removing the resource.
The Amazing Salume Application™
You work at a small business, a supplier company specialized in the finest salumes in the world, with a few clients, mostly bistros and restaurants (actually, there are only two clients, one bistro and one restaurant, but describing the company that way makes it looks larger). They both are good clients and the sales of the company is quite impressive. As the sales are expected to continue to grow, it is time to use a software application to aid the sale process. You decided to provide a RESTful web service to allow clients to manipulate their salumes orders through requests/responses in Json format.
Continue reading “Rest, Json, Spring and Maven”
A few days ago, I heard somebody ask “How do I start developing a functionality with TDD?” and I thought immediately that it would be a good idea to write about it.
Suppose you are really popular, with thousands of friends in the Facebook, everybody in your neighborhood knows you and enjoys your company. In fact everyone in your city does.
Continue reading “Implementing a Feature With TDD”