Project Management

PM Canvas

by
This blog is a repository of professional learnings from my 8+ year journey of project and program management. I will share best practices and ideas, and explore project management as a profession in the digital age—and how project and program mangers should upskill themselves to stay ahead of the curve. I would love to hear your comments!

About this Blog

RSS

Recent Posts

Business Analyst to Product Manager

Refactoring – Standard Process or Stretch Goal or Self-Discipline?

Is Artificial Intelligence a Doomsday or Blessing for Project Manager?

Demystifying Myths about Scrum

Scaling Delivery Using Scrum Framework

Categories

agile, Artificial Intelligence, automation, delivery, Facts, Folklore, metrics, productivity improvement, project management, Scrum, scrum

Date

Refactoring – Standard Process or Stretch Goal or Self-Discipline?

Categories: agile, scrum, delivery

linkedin twitter facebook Request to reuse this  

What is Refactoring? How does it affect the Product?

Refactoring is nothing but modifying the internal structure of the code without altering its external behavior. I’ve seen multiple projects where developers storm with full enthusiasm to develop features as soon as they see what is needed. Moreover, when the team size increases the effects of less maintained code gets compounded as more and more developers starts committing the code changes. As you can imagine, when technical debts loom large, accommodating features becomes extremely challenging. You will start to have unhappy stakeholders as you will not be able to move faster as the technical debt starts pulling you down. If you are not making effort to curtail the technical debts, you would have to pay down doubly in the longer run. I would say, paying down technical debts in one of the easiest ways of improving the quality of the code.

Should it be a Standard Process?

Wouldn’t it be easy to add refactoring as a part of definition of done. This will assist developers to have a checkpoint on how much code has been committed and cleaned up for every iteration. You could also use a metric like number of files checked in vs number of files refactored. Refactoring is always a collective effort mimicking the collective code ownership from eXtreme programming. This way each and every individual gets to know what is happening around each and every feature technically. Refactoring as a process can provide comfort to developers in improving the throughput as the tests gets executed faster without any side effects. Imagine your house is untidy and would it look good in adding decorative items or furniture’s without cleaning it in the first place? Just like how you clean your house to look great, it is also an art of cleaning up your code base habitually to enhance the product outlook technically.

The art of software craftsmanship lies in the practicing the principles and methods tirelessly for longer time. Gaining the knowledge and skill to develop cleaner code alone would not entail success and makes your product (render your service) better but sweating over it would. You’d need to practice it tirelessly over and over (fail of course couple of times) to learn art of refactoring or writing better piece of code. Establishing refactoring as a process, would certainly make all developers follow it meticulously without bypassing it.

Should it be an item on the Product Backlog or Stretch Goal?

On the other hand, as a Scrum Master or Project Manager, you could also negotiate with product owner or stakeholders to underline the importance of cleaning up the code base for better stability. This can be done in several ways and can be left to the team on how to allocate time and effort for refactoring every iteration. Considering an ideal team of 9 members and 2-week iteration length, the team can allocate 5-7% of the team’s capacity or M size story could potentially added every iteration for refactoring effort. But this could also lead to conflicts between the product owner / stakeholders and the development team due to prioritization challenges. Say for e.g. Marketing team would say “I need these features to go in next sprint and is non-negotiable as it would help the company in reorganizing the portfolio to serve customers better”.  

This can be achieved based on mutual agreement between both the parties and the effort should come down slowly as the team matures and learning curve flattens. The team can also think of different approaches to solve the problem either through pair programming, peer code reviews etc. This can help the team weed out some of the technical debts every now and then. All of the activities carried out for the refactoring effort should be factored in the story size accordingly. Alternatively, team can also pick up the refactoring effort as a stretch goal and accomplish within the iteration. This can help avoid the friction between the development team and stakeholders. The team will uncover many things during the iteration and would probably spend extra time and energy to accomplish what has been committed for the iteration. These changes can make the team lose focus on the refactoring and eventually the purpose of cleaning up the code base becomes defeated. The stretch goals make the team feel like crushing the weight instead of a lofty aspiration in these circumstances.

Should it be a Shutsuke (Self-Discipline)?                  

Having explored the above methods, let’s also look at making the refactoring a daily habit to the developers through constant coaching and some development aids. Every team will go through Tuckman model of Forming, Storming, Norming and Performing stages in each and every project. Initially the team may not have the time and energy to focus on cleaning up as they will have a lot to deal with in terms of design thinking, user experience, demos etc. But it is also equally important to seed in the thought of making the refactoring also a habit to each and every development team member. It gives clear advantage to ingrain these thoughts early in the development stages along with other activities. Most of the team will never think about refactoring as a primary responsibility and always give step motherly treatment.

There are also lots of development tools (open source) that can aid developers in reducing the technical debts. It can quickly throw a report on how many static code violations are present categorized by critical, major and minor. The team can address these violations as a part of each iteration to accomplish the goal of cleaner code. Manual code review has become a thing of past and there are tools as well that can help annotate code from any code repositories and provide comments on the modularity, quality, reusability as well. Technical leads can use these tools that can come handy to provide their review comments to the developers. Scrum Master can also provide coaching to the development team and reiterate on the importance of cleaner code for product quality. Like I said earlier, the development team should practice hard on these engineering practices to become better at software craftsmanship.

Conclusion

Refactoring is certainly one of the critical engineering practices that can help pay down technical debts earlier in the game. It is often said that the sum of good design and development effort is equal to poor design, development and operations effort combined. It is imperative that developers understand the impact of refactoring early stages of the project and becomes a habit in their daily routine. As mentioned earlier, refactoring is a collective effort by the team that can be accomplished through the methods suggested above. It is always left to the best interest of the team to see how it can he accomplished depending on the nature of the team and project. But it is always a healthy practice to clean up the code then and there instead of someone helping to formalize the process of tidying up. It is said that your daily routine becomes your habit and eventually your behavior.

Posted on: July 16, 2019 06:38 AM | Permalink | Comments (2)

Scaling Delivery Using Scrum Framework

Categories: agile, scrum, delivery

linkedin twitter facebook Request to reuse this  

Introduction

Organizations across the globe are embracing agility using different methodologies and frameworks to meet customer demands and improve time to market. Scrum is one of the most popular frameworks within which people can solve complex adaptive problems, while productively and creatively delivering products of highest possible value. Scrum was developed to work best within a team size of 5 to 10 members and has to be cross functional to be effective and efficient. It becomes easy for the Scrum team to achieve synergy and resonate with each other if the team is collocated further. The Product Owner, Scrum Master and Development team work in tandem with fewer problems to deal with however and can release most valuable features quickly. The challenges and impediments increases with the addition of every Scrum team. There is also a general myth that Scrum may not be suitable for large scale projects or programs and people recommend or prefer other methodologies like LeSS or SAFe. 

Challenges with Scrum in Large Program/Product Development

Can Scrum be used for large programs (involving more than 5-6+ scrum teams) and still address top priorities like fulfilling customer needs, improving time to market and reducing cycle time?

The answer is "YES"

Nevertheless, some of the questions that comes to our mind quickly when we think of scaling delivery using Scrum are below,

  • What challenges would arise when the team becomes distributed globally?
    • State of Scrum Report 2015 says 33% of 5000 people responded have distributed teams and this number should have gone higher YOY.
  • How can engineering practices be standardized across team for optimal throughput?
  • What happens when there is one product backlog that is shared by multiple teams and one product owner who is influencing all teams? How does prioritization work for different teams?
  • How can Scrum Masters motivate and help the team to maintain the focus and deliver one product increment every sprint?
  • As there is One Product Backlog and One Product Increment, how do the Scrum Ceremonies like Sprint Planning, Backlog Grooming, Daily Scrum, Sprint Review & Sprint Retrospective happens with multiple teams and structure in place?
  • How does definition of done work for multiple teams?

Let’s look at how the roles and artifacts are scaled when it comes to large scale product or program development using Scrum

Scrum Roles

Scrum Master and Development Team

Scrum guide mandates a small and cross functional team of 6-9 members for effective delivery. When the program demands more features to be developed in shorter time frame, one of the easiest way to achieve this to scale the team members to multiple scrum teams. This allows the scrum teams to pick up independent features from the product backlog for quick turnaround. Similarly, the scrum master could also be scaled to take care of the individual teams. However, it is up to the organizational maturity in agile adoption and execution as how many scrum masters are needed for a particular program setup and sets of teams. The scaling of the development team and the scrum masters will certainly help in development of features to meet the vision of the product.

Product Owner

In paper, Product Owner is just one person who is responsible for the product vision and maximizing the ROI. But in real world with complex product development, it’s often a shared effort and ownership. There needs to be an understanding on how to develop the product without hassles and inconsistencies through shared ownership between the Product Owners.

Fig 1.0

In general, when the product is new (in early stage) and hasn’t reached product-market fit—or is close to achieving it—one product owner will be the best person in charge of the product. This is due to the level of experimentation it requires during this stage and effective decision making is of paramount importance. Having multiple product owners during this stage would dilute and elongate the decision making process leading to ineffectiveness. At this stage, the single PO could help in making decisions quickly without wasting time in the process. When the product growth starts after entering the market stage, more features will be needed and it would become difficult to manage the product with single product owner. In that case, it would be good to have couple of product owners to manage the product. During this maturity stage, changes would be needed less frequently allowing the product owners to prioritize the changes and share the responsibilities easily.

Scrum Artifacts

Product Backlog

Product Backlog is prioritized list of items or requirements needed to fulfill the product vision. Product Owner owns the product backlog and ensures that the Product Backlog Items are stacked in the order of priority to maximize the return on investment. In the Fig 1.1 shown below, during the initial stages of the product development (entering market fit stage), it is imperative that only one product backlog exists for the teams to work on. The product discovery stage is a separate journey altogether which involves user interviews, impact mapping, what and how to develop and prioritization techniques. When the product evolves over period of time (as mentioned above) or enters maturity, the product backlog can be owned by multiple product owners for managing and prioritizing features effectively.

Fig 1.1

Sprint Backlog

Sprint Backlog will have prioritized list of features needed for development for that sprint towards achieving the product vision. The prioritized list of items will be picked up by the individual teams for development of the product features during the sprint planning meeting. Individual teams can have sprint planning meeting separately (to save time) along with Product Owner & Scrum Master to prioritize what is needed for the sprint.

Product Increment

One Product Increment is always recommended during the initial stages of the development of the product to ensure the minimum viable features are integrated well. This helps the product owner to quickly validate the assumptions about the product. Having single product increment hashes out all the issues with dependencies and integrations and enables users to validate the functionality end to end.  

Scrum Events

The Scrum ceremonies like planning, refinement, retrospectives, reviews can be done separately by the individual team along with PO and other stakeholders. You might wonder how the dependencies across the teams will be resolved as there is no common meeting to discuss those? Well, Scrum of Scrum can help the development teams to sort of internal dependencies where the Scrum Masters from individual team’s members represent to discuss about the dependencies and work towards resolving them.

Conclusion

There is also no doubt that Scrum would definitely be an ideal fit when it comes to large scale product development with some considerations listed above. The Scrum Framework is very light weight and has lots of process built within for a great product development. Although other scaling methods exists like SAFe, Less, Scrum@Scale etc. the organization need to carefully consider the options to better suit their culture and the nature of the product being developed.

Posted on: December 27, 2018 06:26 AM | Permalink | Comments (11)
ADVERTISEMENTS

"A doctor can bury his mistakes but an architect can only advise his client to plant vines."

- Frank Lloyd Wright

ADVERTISEMENT

Sponsors