We Can Have Nice Things
There is a phrase I frequently hear across engineering organizations in companies: “what does the business want?“. The “business” is referred to as an amorphic entity, hovering outside the periphery of daily engineering work. It makes frequent demands that are at odds with the pace of work that results in high quality software. The implication is that “the business” does not want well tested and maintained software that is easy to operate. The other implication is that engineering teams are not part of the business, but a separate entity with a different set of wants and needs. This viewpoint is detrimental to an engineering organization, and sets up a self-fulfilling prophecy where engineers are treated as a cost center. You do not want to be a cost center.
As software engineers we need to internalize that we are the business, and crucial part of it. We have a highly in-demand skillset that allows us to build solutions to business problems that have incredible value (it is why are we are paid so damn well). We must become domain experts in every part of the business we touch, and must own the responsibility to help the business to run efficiently and effectively.
Once an engineering team accepts that they are a critical part of the business it becomes easier to state that testing is not optional. Regular maintenance and upkeep of software is required. Paying down tech debt cannot be deferred until there is a better time. They are critical activities that deserve the investment of time and resources. To endlessly defer this investment puts the business at tremendous risk, and as professional software engineers we have a responsibility to mitigate that risk.
The above argument is what I refer to when I tell my team, “we can have nice things”. We need not settle for two weeks around the holidays to finally tackle some tech debt incurred earlier in the year. We can improve the developer experience for the systems we own in order to stay productive and nimble. We can take the time explore experimental approaches to problems that may not pan out immediately. We do not need to accept inferior tools and hardware to do our jobs.
This is an important mindset to adopt as a professional software engineer. You do not get paid to code. You do not get paid to move tickets across the board. You are paid because you understand how to leverage technology to solve problems. So advocate for doing your job in a professional manner with the tools you need to be productive. We can have nice things.