I focus on the least amount of effort to build and maintain software over time. What is the smallest number of moving parts to accomplish the goal? How few repos/deployables/runtimes can we maintain? Do we already have a tool that can do the job? Let’s use it. What is the shortest, clearest call stack for this feature?
Why?
I’ve seen trends in the industry the tend toward “throw anything against the wall quickly because we’ll lose if we aren’t first”. This is an understandable reaction to over-engineering. Inexperienced architects—or experienced architects with the wrong training—will over-engineer because right-sizing requires special knowledge and experience.
What can we do about it?
With experience like mine, we can move quickly and build quality, and align a team on the right patterns to maintain this cadence indefinitely. I’ve done this for multiple organizations, starting at InvitedHome where we built apps for 10 disperate roles revolving around a vacation rental, from the owner, to the guest, to vendors, concierge, field maintenance, and so on. Fast forward to now, we have successfully moved to these patterns for large parts of our architecture at my current company with rave reviews from everyone involved.
Let’s build something great, and let’s get it done swiftly!