If you’ve been a software engineer for very long, you’ve probably worked on a codebase that’s seen better days. It’s not clear where the next feature should be added. Some components do too much, and some components do too little. Every change you make seems to break something else. Writing software has transformed from delight to drudgery. Your task list has become a toil list. But it doesn’t have to be this way.