Abstraction Considered Harmful (and other opinions about writing maintainable code)