Getting value to the customer quickly, reducing development costs, increasing stakeholder engagement, improving quality, and managing risks better all sound great from the business perspective. These high level benefits are often what we hear of when it comes to building software with agile. But, as a developer, I also see how this enhances my day-to-day work life. Sure, helping the company to perform at a higher level has potential indirect benefits for me. However, what I find most rewarding about being a developer in an agile environment is how this methodology increases the amount of time I can spend focusing on the things I enjoy and can be proud of while pushing my career forward.
The first point in the Agile Manifesto Principles states "Our highest priority is to satisfy the customer through early and continuous delivery of valuable software." Often there is a discrepancy between what customers actually need and what we think they need or even what the customers themselves think they need. Agile development enables us to deliver working product to the user faster even as we are still developing it. We can quickly prioritize and incorporate requests and modifications, getting us closer to delivering what they actually need. Watching the feedback come in justifies the work that we are doing and continues to motivate me throughout each iteration. Knowing the visibility of those results to the business stakeholders pushes me to continue to find ways to solve users’ problems and simplify their lives.
A Wider View
Agile encourages self-organizing teams with limited and controlled business stakeholder oversight to achieve better architecture, requirements, and design, and run more efficient development lifecycles. In contrast to more traditional methodologies, deeper problem solving is often entrusted to the development team. I find that to be one of the most fun parts of my work life. Being a developer on an agile development team means working in all areas of the code base, not just my specialization. It means pair programming with other devs and building full stack development skills through knowledge transfer. It means deeper understanding of the product through face-to-face collaboration among stakeholders, scrum masters, developers, designers, and quality assurance team members. The more I learn about the desired user experience and value proposition of the product, the more efficient I can be while creating it. Being a part of those conversations also broadens my perspective and enhances my ability to be a leader across my organization.
Being a developer is like being an artist where the IDE is our canvas, our tools and processes are the brush, and the code is our art. Creating elegant, bug free code that adheres to best practices is our masterpiece. Many tools are used to ensure this quality; two tools embraced by the agile community are pair programming and test driven development. Having two sets of eyes on the code before it is checked in along with testing code coverage through a suite of unit, functional, performance, and end to end tests identifies issues early and mitigates risk. I want to be confident that as the code passes through the steps in the continuous integration pipeline that it is production ready and could be considered a release candidate. Frequently, the effort needed to create these tests, environments, and pipelines is mistaken for non-value added overhead. On agile teams, we have the flexibility to prioritize these technical tasks over customer facing work – a dream come true for developers which allows us to keep our work clean and efficient. Agile Manifesto Principle #5 states: “Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.” Working in an agile environment gives developers the opportunity to self-organize, be more flexible, and creatively solve the challenges of forging quality software.
Working in an agile environment and the culture it promotes is more enjoyable than many alternatives from a developer’s perspective. The methodology is founded on collaboration and teamwork so you become closer with those who you interact with every day. There are no long stints of up front requirements gathering that can lead to analysis paralysis and endless days of “waiting for sign off." Short iterations yield realistic goals and plans, which typically leads to an improved work-life balance. Better code quality reduces the number of defects so more time can be spent on new feature development and the stories that everyone gets excited about. And, finally, frequent releases means lots of reasons to celebrate with a sense of pride knowing that what you are building is the highest priority for the customer at that time.
But, it’s still all about the customer…
When looking at an agile environment from a developer’s perspective, there are a lot of advantages and benefits. The overall practice of building software is more enjoyable and the collaborative, iterative nature of the methodology propel skills and career development. Ultimately though, the goal is to create a better product and deliver value to the customer faster. It just happens that doing that is what makes this developer happy.