Practical Software Engineering: A Case-Study Approach