As a software engineer, what is your job? and what is your value?
On many teams, the work is “add features to this codebase.” We congratulate teams for moving JIRA tickets from “defined” to “delivered.”
Meanwhile, the value to the business depends on value to the customers, or to people or software who in turn provide value to customers. And when value comes as software, its magic is what it lets people do that they couldn’t otherwise.
To find the value in our work, ask, “What capability does our software provide, and to whom?” Then if your team’s software is internal-facing, ask “What capability does that let other teams provide?” and keep going until you get to people.
For instance, maybe I work on provisioning software that activates mobile phones on the network. Then my team provides an activation capability to the eCommerce team. That team provides customers with the capability of turning on new mobile phones.
The value my team provides is that activation capability (among others). As a product team, we can ask: is activation reliable? is it fast? is it easy to use correctly? does it communicate well about what happened? We can balance the needs of the eCommerce team against the customer service software team that provides capabilities to representatives and the point-of-sale team that offers capabilities to phone-store salespeople.
We provide this capability continuously through a changing world. The network switches upgrade the capabilities they provide our team. Standards for performance and reliability go up. New communication protocols emerge, and the new point-of-sale software sends us JSON instead of SOAP. My team’s value is in keeping these capabilities up to what the business needs.
Yes, sometimes this means delivering new features to production. New mobile features, ever-faster data service, may prompt us to enhance the activation capability. Sometimes we add capabilities, increasing the value our team provides.
Other times we focus on increasing reliability, making better status reports and error messages, upgrading our technology to take advantage of what the world now offers. Refining our software until it’s so easy to operate that we have the capacity to own more capabilities. Helping other teams use it, and then updating our documentation to make that easier in the future.
If your job is to implement features as specified in JIRA, and your value is providing a capability, what happens to all this other work? Supporting the software in production, increasing reliability after some downtime, making the code more readable, smoothing out deployment, improving our tests — this is the work that provides capabilities a customer can rely on.
A healthy software team does this work. Not every team gets credit for it.
Delivering features is one piece of the work of owning a capability. Please don’t pretend it is our whole job.