Effective Software Engineering: A guide to building successful software products