Software is a human endeavor
Condensing best practices and opinions into a practical software development ethos
Software is a human endeavor.
How do humans communicate? Language. Code is communication between the developer and computer and the developer to future developers. Emphasis on the latter.
A software engineer’s job is to help increase the business’s revenue and reduce costs.
Any time you ask yourself a question, try adding “over time” at the end and see what the curve looks like. Does it change your answer?
How do you increase revenue and reduce costs over time? Write code that
Solves the business problem
Works
Easy to read
Easy to change
Software is a human endeavor.
Prefer negotiation on scope or timeline versus quality. Do not trade fast today for slow tomorrow.
How do you go fast over time? Write code that
Solves the business problem
Works
Easy to read
Easy to change
The cost of a given code change is (the time it takes to understand the business problem + the time it takes to understand the existing code + the time it takes to make the change) x the magnitude of the change.
costOfChange = M(dtBp + dtEc + dtMc)
How do you solve the business problem? Understand the business problem. How do you understand the business problem? Talk to people and listen with empathy.
How do you write code that works? Test it. If you test as(not always explicitly before) you write the code, you build leverage. If you test after, you are performing a chore.
How do you write code that is easy to read? How long does it take to understand your code? Does it flow linearly? Is the behavior documented in tests? Write code for the next developer first and the compiler second.
How do you write code that is easy to change? Manage complexity. How do you manage complexity? Manage coupling. How do you manage coupling? Write code that is easy to test. Dependency inversion, functional composition, and automated test suites(safety nets) are the tools of the trade.
Software is a human endeavor.
How do you move quickly alongside your team without stepping on each other’s toes? Integrate with each other continuously. How do you integrate continuously? Keep pull requests small and scoped to one idea.
How do you make sure you are building the right thing? Go from 0 to 1 and get feedback before proceeding further. Deploy every change continuously.
How do you avoid burnout? Stay fresh. How do you stay fresh? Do not trade today for tomorrow. Be predictable.
What happens if you burn out? Take a break. Try not to do it again. It is better to give 80% every day than 120% one day and 40% the next.
Software is a human endeavor.
The purpose of Agile is not project management. The purpose of Agile is business agility. Agility allows the business to stay lean, move quickly, and veer into new territory, all the while in a safe manner that preserves quality. This is a competitive advantage. Business agility cannot exist without code agility. Project management frameworks are not enough.
How do you write code to support business agility over time? Write code that
Solves the business problem
Works
Easy to read
Easy to change
Software is a human endeavor.
With all things, exceptions apply and ideas evolve.
Software is a human endeavor.