Software Algebra – Building Applications Without Reinventing the Wheel