At present, unit testing, TDD and SOLID Patterns is been asumed by (good) developers as a must. But… is that enought ? I don’t think so… We still need to deliver some piece of an application to the customer that really work. And when I say “really work” I mean something that the user can use and get an improvement to solve a requirement.
In a few words… Working Software is that “something else thing” that is missing on a customer centric development to really deliver functionality that can be used. Unit Test, TDD and SOLID are the roots and can asure the process, they are so important indeed, but there’s much more involved in deliver something that the user is going to fall in love.
The purpose of this post, is to show you tools, methodologies and good practices to build software that works from all perspectives (software architecture, lean development, continuous integration and quality assurance).
As people from agile-process.org says:
Very important to Agile projects but often overlooked is getting working software done regularly and frequently. The definition of working software may vary slightly between projects, but not much. Working software is fully integrated, tested, and ready to be shipped to customers or deployed into production.
Be a nice programmer
- As a developers, we’re all the time with something to learn.
- Take the ownership of your deliverables. At the end of the chain, there’s an user that will use your application
- Focus, focus and focus. Stay concentrated with the proper mindset to deliver as much quality as you can.
Deliver software that works is to “working software”
- Is better to deliver something small that works perfectly than a lot of non yet working functionalities
- Go step by step in small iterations and commit-push as much as you can.
- Integrate frequently and automate everything is a repetitive task.
- Talk with the users and make them participate in the process
…the biggest risk to any software effort is that you end up building something that isn’t useful…
Go live Ownership
- Make sure all the test suites are green (unit, integration and functional)
- Take care of the code quality, there are plenty tools to give you feedback about the quality with static analyzers.
- Make sure all acceptance criteria are met. A good user story comes with acceptance criteria that let us check the main functionality
- Although everything went fine, don’t forget manual test, is always necesary.
- Automate the deploy process and inform the users, let them choose if they want a demo meeting
- Continuous integration works only in one branch, really ! Deploy with professional tools and control every stage of the process.
- Go and get more feeback and make an application that the users are going to love
If you want to know more about it, just give us a call or an email, by the way.. here you can find some technical recomendations to begin with the working software philosophy.
Some interesting related links: