Sunday, February 14, 2016

Benefits of agile software delivery for software developers


Benefits of agile software delivery to software developers

Agile and continuous delivery practices can add tremendous value to a software developer’s life and career. Here are some key benefits!

You work only on one feature at a time

The team has to start and finish a feature to production quality levels, and ideally (if Product and DevOps is enabled) deliver the feature to customers, and confirm the value of the feature for customers (DONE CRITERIA). While every developer prides himself at being able to multi task, focusing on one feature allows you and your team to focus deeply on the WHY (customer or business problems to be solved by this feature), WHAT (Product solution design to solve required problems) and HOW (technology, experience, architecture, test scenarios. i.e. actual implementation, testing and delivery of the feature) of the feature and deliver it to required levels of quality in one GO!

Additionally, if your team is in the middle of a feature delivery iteration, your manager or scrum master or executive cannot interrupt an individual or the team and request attention to other matters or additional scope on the side, WITHOUT calling off the entire delivery iteration. Any changes to scope or any other form of course correction has to be at the end of the current iteration, with invocation of appropriate change management processes. This protects your focus on the current iteration and feature delivery to the maximum extent possible.

Maximum amount of your work hours are spent writing or debugging new code

Effective continuous delivery practices require that you team adopt maximum automation to make this goal possible: Time-efficient compilation, Automated unit test suites, automated deployments to dev-test-staging-production environments, automated and comprehensive regression suites. You and your team have to plan for time to build and maintain these levels of automation with every iteration. This level of automation ensures that you are not spending your time repeating manual time intensive activities, and can be very efficient in your code delivery cycle.

Less meetings, no status meetings!

Agile adopts lean practices, and the only regular meeting you are to be a part of, is the stand-up meeting, where you and your team members sync up with each other. This is a technical meeting and you get to briefly update the team on your progress, and optionally raise any challenges and ask for help, if necessary. The rest of your discussions are face to face discussions with you counterparts across functions, wherever necessary, as you drive and complete tasks required to make the deliverable possible.

Minimal product design & implementation documentation

Another implication of adopting lean practices; You are not required to create elaborate functional specifications or design documents, before you start coding. At the same time, it’s a best practice for you to be able to come up with an effective way of representing a complex implementation (be it a picture of a whiteboard diagram, or using some other smart tool), and make it available (say on wiki) to enable adequate information to be available to stakeholders who might need the information. For e.g. Such information is very useful to create test scenarios; In complex implementations we cannot always verbally convey everything or remember everything that what was conveyed verbally or through emails; Your architect might want to review your design; your product manager might want to understand your implementation in detail.

Takes the fears away from code changes and release delivery!

High levels of automation enable you to be unhesitant in making code changes for fear of breaking a part of code that was previously comprehensively, but manually, tested by the team. At best, you will be able to quickly confirm that your changes work as expected, and have not had any unintended side effects, and at worst, you will be able to quickly revert back your changes. You no longer have to hope and pray that the manual tester has covered everything in re-testing. You can know for sure that your feature works as expected through always being in sync with results of the automated test suite!

You get to establish yourself in a new team in quick and iterative cycles over time.

Every new feature presents a new opportunity for you to establish yourself and build on your success in the team. Working on and delivering on a single feature all the way to customers, ensures high visibility to your successful work.

Better work life balance!

Focusing on one feature at a time eliminates context switching across multiple features, eliminates long and never ending release cycles, eliminates intense defect fix cycles & last minute surprises at the end of a multi feature deliverable to production, and ensures alignment of the complete cross functional team to the complete delivery of the feature, thus greatly reduces the variables you have to deal with on a day to day basis. Additionally, the time span that you have to focus on (and are thus likely to be consumed by!), in terms of individual, team and business success, is greatly reduced to each short iteration, as opposed to long 6-9+ monthly durations which always seem never ending or burdensome by sheer size of the release feature set and amount of product release risk variables you are grappling with at any given point in time.

 Frequent engagement with customers

Agile stresses on frequent customer interactions, and calls for wing to wing ownership and delivery of feature to customers. You are empowered and are to be a part of customer interactions, significantly improving your detailed understanding of customer problems as well as varying customer needs, as well as your knowledge of the business domain. As a developer and as a team, you own your destiny and have to no longer rely exclusively on a product manager defining feature requirements or deciding on feature success. Agile delivery practices cut through the clutter and inefficiencies or Organizational layers and functions and gets coders and customers together to work on customer solutions!