Practicing software engineering in the 21st century