How to apply a design thinking, HCD, UX or any creative process from scratch
This how-to article aims at providing designers, creative thinkers or even project managers with a tool to set up, frame, organise, structure, run or manage design challenges, and projects: The Double Diamond revamped.
The Double Diamond revamped
In order to do so, I have come up with an own and a revamped version of the Double Diamond process. In case, you are familiar with the British Design Council’s Double Diamond, IDEO’s human centred design ideology or @d.school’s Design Thinking process you might be familiar with the majority of approaches, steps and tools in the following paragraphs of this article.
According to Don Norman, the human centred design process starts with a good understanding of people and the needs that the design is intended to meet. Various companies, organisations and educational institutions have taken on this challenge and have therefore come up with models in order to provide structure to the process of human centred design or design thinking.
Chilli Con Carne and the Double Diamond
When you cook a chilli con carne for the first time, you might start off with a recipe that appeals to you. Once you have burned your tongue a couple of times, you either go easy on the spices, or you even spice it up as you can’t get enough of the burning. Generally speaking, you tweak the original recipe to your own needs and taste.
Según determinó la investigación del juez, Nicza Báez fue torturada por separado y en conjunto a su pareja Alonso Lazo Rojas -detenido desaparecido-. Luego de ello, “Nicza permanece privada de libertad ilegalmente en la unidad militar, siendo objeto de continuos apremios físicos que consistían en golpes de pies, de puños y de objetos contundentes, además de aplicarle electricidad y amenazarle de atentar contra la integridad de su hijo de año y medio en caso de no entregar información sobre las actividades del movimiento y de las personas que lo integraban” Tras estos hechos, el ministro acreditó “ Que después de quince días de angustia permanente por las torturas recibidas y los días de encierro, se decide su traslado a la ciudad de Santiago junto a otros detenidos, pero antes de llegar a la capital, los agentes y sus víctimas se detienen en la ciudad de La Serena en el Regimiento Arica de esa ciudad, donde renuevan los interrogatorios y las torturas los agentes de la sección segunda del Regimiento de esa ciudad” Y finalmente “el traslado de la víctima finalmente concluye en el recinto de detención de Cuatro Álamos y luego en el centro de reclusión Tres Álamos, donde se le mantuvo encerrada sin derecho hasta el mes de junio de 1976, cuando recupera su libertad y decide irse al exilio, no sin antes en este periplo de encierro por más de 90 días debió soportar interrogatorios y torturas permanentes que le provocaron severas consecuencias en su estado mental y físico, fundamentalmente en el Regimiento de Copiapó como en su breve estadía en La Serena, que hasta hoy resienten su vida”
According to the Scrum Guide, Scrum is a framework within which people can address complex problems, and productively and creatively develop products of the highest possible value. It’s a tool organizations can use to increase their agility.
Within Scrum self-organizing, cross-functional, and highly productive teams do the work: creating valuable releasable product increments. Scrum offers a framework that catalyzes the teams learning through discovery, collaboration and experimentation.
A great Scrum Team consists of a Product Owner who maximizes value, a Scrum Master who enables continuous improvement and a Development Team who focus on delivering high quality product increments.
For sure this sounds great!
But what are the characteristics of such a great Scrum team? This white paper will answer that question. It offers a detailed description of the characteristics and skills of a great Product Owner, Scrum Master and Development Team.
The Product Owner
The Product Owner is responsible for maximizing the value of the product and the work of the Development Team. It’s a one-person role that brings the customer perspective of the product to a Scrum Team.
The Product Owner is responsible for:
- Developing and maintaining a product vision and market strategy;
- Product management;
- Ordering and managing the Product Backlog;
- Involving stakeholders and end-users in Product Backlog refinement and backlog management;
- Alignment with other Product Owners when needed from an overall product, company or customer perspective.
A Great Product Owner…
- Embraces, shares and socializes the product vision. A great Product Owner represents the customers voice and creates a product vision together with the stakeholders. Every decision is taken with the product vision in mind. This ensures sustainable product development, provides clarity for the development team and increases the chances of product success drastically.
- Exceeds the customer’s expectation. A great Product Owner truly understands the customer’s intentions and goals with the product and is able to outstrip its expectations. Customer delight is the ultimate goal!
- Is empowered. A great Product Owner is empowered to take decisions related to the product. Sure, creating support for his decisions might take some time, but swiftly taking important decisions is a primary condition for a sustainable pace of the development team.
- Orders the product backlog. A great Product Owner understands that the product backlog should be ordered. Priority, risk, value, learning opportunities and dependencies are all taken into account and balanced with each other. For example, when building a house the roof might have the highest priority considering possible rain. But still it’s necessary to realize the foundation and walls earlier and therefore order them above the construction of the roof.
- Prefers face-to-face communication. A great Product Owner understands that the best way to convey information is face-to-face communication. User stories are explained in a personal conversation. If a tool is used for backlog management, its function is to support the dialogue. It never replaces the good old-fashioned conversation.
- Knows modeling techniques. A great Product Owner has a backpack full of valuable modeling techniques. He knows when to apply a specific model. Examples are Business Model Generation, Lean Startup or Impact Mapping. Based on these models he knows how to drive product success.
- Shares experiences. A great Product Owner shares experiences with peers. This might be within the organization, and outside it: seminars and conferences are a great way to share experiences and gather knowledge. In addition, writing down your lessons learned can be valuable for other Product Owners.
- Owns user story mapping. A great Product Owner should master the concept of user story mapping. It’s a technique that allows you to add a second dimension to your backlog. The visualization enables you to see the big picture of the product backlog. Jeff Patton wrote some excellent material about the concept of story mapping.
- Has a focus on functionality. A great Product Owner has a focus on functionality and the non-functional aspects of the product. Hours or even story points are less important. The goal of the Product Owner is to maximize value for the customer. It’s the functionality that has value; therefore this is the main focus for the Product Owner.
- Is knowledgeable. A great Product Owner has in depth (non-)functional product knowledge and understands the technical composition. For large products it might be difficult to understand all the details, and scaling the Product Owner role might be an option. However the Product Owner should always know the larger pieces of the puzzle and hereby make conscious, solid decisions.
- Understands the business domain. A great Product Owner understands the domain and environment he’s part of. A product should always be build with its context taken into account. This includes understanding the organization paying for the development but also being aware of the latest the market conditions. Shipping an awesome product after the window of opportunity closes is quite useless.
- Acts on different levels. A great Product Owner knows how to act on different levels. The most common way to define these levels is strategic, tactical and operational. A Product Owner should know how to explain the product strategy at board level, create support at middle management and motivate the development team with their daily challenges.
- Knows the 5 levels of Agile planning. Within Agile, planning is done continuously. Every product needs a vision (level 1) which will provide input to the product roadmap (level 2). The roadmap is a long range strategic plan of how the business would like to see the product evolve. Based on the roadmap, market conditions and status of the product the Product Owner can plan releases (level 3). During the Sprint Planning (level 4) the team plan and agree on Product Backlog Items they are confident they can complete during the Sprint and help them achieve the Sprint Goal. The Daily Scrum (level 5) is used to inspect and adapt the team’s progress towards realizing the Sprint Goal.
- Is available. A great Product Owner is available to the stakeholders, the customers, the development team and the Scrum Master. Important questions are answered quickly and valuable information is provided on time. The Product Owner ensures his availability never blocks the progress of the development team.
- Is able to say ‘no’. A great Product Owner knows how and when to say no. This is probably the most obvious but most difficult characteristic to master. Saying yes to a new idea or feature is easy, it’s just another item for the product backlog. However, good backlog management encompasses creating a manageable product backlog with items that probably will get realized. Adding items to the backlog knowing nothing will happen with them only creates ‘waste’ and false expectations.
- Acts as a “Mini-CEO”. A great Product Owner basically is a mini-CEO for his product. He has a keen eye for opportunities, focuses on business value and the Return On Investment and acts proactive on possible risks and threats. Everything with the growth (size, quality, market share) of his product taken into account.
- Knows the different types of valid Product Backlog items. A great Product Owner can clarify the fact that the Product Backlog consists of more than only new features. Fore example: technical innovation, bugs, defects, non-functional requirements and experiments, should also be taken into account.
- Takes Backlog Refinement seriously. A great Product Owner spends enough time refining the Product Backlog. Backlog Refinement is the act of adding detail, estimates and order to items in the Product Backlog. The outcome should be a Product Backlog that is granular enough and well understood by the whole team. On average the Development Team spends no more than 10% of the capacity of the Development Team on refinement activities. The way it is done isn’t prescribed and is up to the team. The Product Owner can involve stakeholders and the Development Team in backlog refinement. The stakeholders because it gives them the opportunity to explain their wishes and desires. The Development Team because they can clarify functional and technical questions or implications. This will ensure common understanding and increases the quality of the Product Backlog considerably. As a consequence, the opportunity to build the right product with the desired quality will also increase.
The Scrum Master
According to the Scrum Guide the Scrum Master is responsible for ensuring Scrum is understood and enacted. Scrum Masters do this by ensuring that the Scrum Team adheres to Scrum theory, practices, and rules. The Scrum Master is a servant-leader for the Scrum Team. The Scrum Master helps those outside the Scrum Team understand which of their interactions with the Scrum Team are helpful and which aren’t. The Scrum Master helps everyone change these interactions to maximize the value created by the Scrum Team.
The role of a Scrum Master is one of many stances and diversity. A great Scrum Master is aware of them and knows when and how to apply them, depending on situation and context. Everything with the purpose of helping people understand and apply the Scrum framework better.
The Scrum Master acts as a:
- Servant Leader whose focus is on the needs of the team members and those they serve (the customer), with the goal of achieving results in line with the organization’s values, principles, and business objectives;
- Facilitator by setting the stage and providing clear boundaries in which the team can collaborate;
- Coach coaching the individual with a focus on mindset and behaviour, the team in continuous improvement and the organization in truly collaborating with the Scrum team;
- Conflict navigator to address unproductive attitudes and dysfunctional behaviors;
- Manager responsible for managing impediments, eliminate waste, managing the process, managing the team’s health, managing the boundaries of self-organization, and managing the culture;
- Mentor that transfers agile knowledge and experience to the team;
- Teacher to ensure Scrum and other relevant methods are understood and enacted.
A Great Scrum Master…
- Involves the team with setting up the process. A great Scrum Master ensures the entire team supports the chosen Scrum process and understands the value of every event. The daily Scrum for example is planned at a time that suits all team members. A common concern about Scrum is the amount of ‘meetings’, involving the team with planning the events and discussing the desired outcome will increase engagement for sure.
- Understands team development. A great Scrum Master is aware of the different phases a team will go through when working as a team. He understands Tuckman’s different stages of team development: forming, storming, norming, performing and adjourning. The importance of a stable team composition is therefore also clear.
- Understands principles are more important than practices. Without a solid, supported understanding of the agile principles, every implemented practice is basically useless. It’s an empty shell. An in-depth understanding of the agile principles by everyone involved will increase the chances of successful usage of practices drastically.
- Recognizes and acts on team conflict. A great Scrum Master recognizes team conflict in an early stage and can apply different activities to resolve it. A great Scrum Master understands conflict isn’t necessarily wrong. Healthy conflict and constructive disagreement can be used to build an even stronger team.
- Dares to be disruptive. A great Scrum Master understands some changes will only occur by being disruptive. He knows when it’s necessary and is prepared to be disruptive enough to enforce a change within the organization.
- Is aware of the smell of the place. A great Scrum Master can have an impact on the culture of the organization so that the Scrum teams can really flourish. He understands that changing people’s behavior isn’t about changing people, but changing the context which they are in: the smell of the place.
- Is both dispensable and wanted. A great Scrum Master has supported the growth of teams in such a manner they don’t need him anymore on daily basis. But due to his proven contribution he will get asked for advice frequently. His role has changed from a daily coach and teacher to a periodical mentor and advisor.
- Let his team fail (occasionally). A great Scrum Master knows when to prevent the team from failing but also understands when he shouldn’t prevent it. The lessons learned after a mistake might be more valuable than some good advice beforehand.
- Encourages ownership. A great Scrum Master encourages and coaches the team to take ownership of their process, task wall and environment.
- Has faith in self-organization. A great Scrum Master understands the power of a self-organizing team. “Bring it to the team” is his daily motto. Attributes of self-organizing teams are that employees reduce their dependency on management and increase ownership of the work. Some examples are: they make their own decisions about their work, estimate their own work, have a strong willingness to cooperate and team members feel they are coming together to achieve a common purpose through release goals, sprint goals and team goals.
- Values rhythm. A great Scrum Master understands the value of a steady sprint rhythm and does everything to create and maintain it. The sprint rhythm should become the team’s heartbeat, which doesn’t cost any energy. Everyone knows the date, time and purpose of every Scrum event. They know what is expected and how to prepare. Therefore a complete focus on the content is possible.
- Knows the power of silence. A great Scrum Master knows how to truly listen and is comfortable with silence. Not talking, but listening. He is aware of the three levels of listening – level 1 internal listening, level 2 focused listening, level 3 global listening, and knows how to use them. He listens carefully to what is said, but also to what isn’t said.
- Observes. A great Scrum Master observes his team with their daily activities. He doesn’t have an active role within every session. The daily Scrum, for example, is held by the team for the team. He observes the session and hereby has a more clear view to what is being discussed (and what isn’t) and what everyone’s role is during the standup.
- Shares experiences. Great Scrum Masters shares experiences with peers. This might be within the organization, but also seminars and conferences are a great way to share experiences and gather knowledge. Of course writing down and sharing your lessons learned is also highly appreciated. And yes, for the attentive readers, this is exactly the same as for the Product Owner and the Development Team.
- Has a backpack full of different retrospective formats. A great Scrum Master can apply lots of different retrospective format. This ensures the retrospective will be a fun and useful event for the team. He knows what format is most suitable given the team’s situation. Even better: he supports the team by hosting their own retrospective. To improve involvement this is an absolute winner!
- Can coach professionally. A great Scrum Master understands the power of professional coaching and has mastered this area of study. Books like Coaching Agile Teams and Co-Active Coaching don’t have any secrets for him. He knows how to guide without prescribing. He can close the gap between thinking about doing and actually doing; he can help the team members understand themselves better so they can find news ways to make the most of their potential. Yes, these last few sentences are actually an aggregation of several coaching definitions, but it sounds quite cool!
- Has influence at organizational level. A great Scrum Master knows how to motivate and influence at tactic and strategic level. Some of the most difficult impediments a team will face occur at these levels; therefore it’s important a Scrum Master knows how to act at the different levels within an organization.
- Prevent impediments. A great Scrum Master not only resolves impediments, he prevents them. Due to his experiences he is able to ‘read’ situations and hereby act on them proactively.
- Isn’t noticed. A great Scrum Master isn’t always actively present. He doesn’t disturb the team unnecessary and supports the team in getting into the desired ‘flow’. But when the team needs him, he’s always available.
- Forms a great duo with the Product Owner. A great Scrum Master has an outstanding partnership with the Product Owner. Although their interests are somewhat different, the Product Owner ‘pushes’ the team, the Scrum Master protects the team. A solid partnership is extremely valuable for the Development Team. Together they can build the foundation for astonishing results.
- Allows leadership to thrive. A great Scrum Master allows leadership within the team to thrive and sees this as a successful outcome of their coaching style. They believe in the motto “leadership isn’t just a title, it’s an attitude”. And it’s an attitude everyone in the team can apply.
- Is familiar with gamification. A great Scrum Master is able to use the concepts of game thinking and game mechanics to engage users in solving problems and increase users’ contribution.
- Understands there’s more than just Scrum. A great Scrum Master is also competent with XP, Kanban and Lean. He knows the strengths, weaknesses, opportunities and risks of every method/framework/principle and how & when to use them. He tries to understand what a team wants to achieve and helps them become more effective in an agile context.
- Leads by example. A great Scrum Master is someone that team members want to follow. He does this by inspiring them to unleash their inner potential and showing them the desired behavior. At difficult times, he shows them how to act on it; he doesn’t panic, stays calm and helps the team find the solution. Therefore a great Scrum Master should have some resemblance to Gandalf. The beard might be a good starting point 🙂
- Is a born facilitator. A great Scrum Master has facilitation as his second nature. All the Scrum events are a joy to attend, and every other meeting is well prepared, useful and fun, and has a clear outcome and purpose.
The Development Team
According to the Scrum Guide the Development Team consists of professionals who do the work of delivering a potentially releasable Increment of “Done” product at the end of each Sprint. Only members of the Development Team create the Increment. Development Teams are structured and empowered by the organization to organize and manage their own work. The resulting synergy optimizes the Development Team’s overall efficiency and effectiveness.
Development Teams have the following characteristics:
- Self-organizing. They decide how to turn Product Backlog Items into working solutions.
- Cross-functional. As a whole, they’ve got all the skills necessary to create the product Increment.
- No titles. Everyone is a Developer, no one has a special title.
- No sub-teams in the Development team.
- Committed to achieving the Sprint Goal and delivering a high quality increment
A Great Development Team
- Pursues technical excellence. Great Development Teams use Extreme Programming as a source of inspiration. XP provides practices and rules that revolve around planning, designing, coding and testing. Examples are refactoring (continuously streamlining the code), pair programming, continuous integration (programmers merge their code into a code baseline whenever they have a clean build that has passed the unit tests), unit testing (testing code at development level) and acceptance testing (establishing specific acceptance tests).
- Applies team swarming. Great Development Teams master the concept of ‘team swarming’. This is a method of working where a team works on just a few items at a time, preferably even one item at a time. Each item is finished as quickly as possible by having many people work on it together, rather than having a series of handoffs.
- Uses spike solutions. A spike is a concise, timeboxed activity used to discover work needed to accomplish a large ambiguous task. Great Development Teams uses spike experiments to solve challenging technical, architectural or design problems.
- Refines the product backlog as a team. Great Development Teams consider backlog refinement a team effort. They understand that the quality of the Product Backlog is the foundation for a sustainable development pace and building great products. Although the Product Owner is responsible for the product backlog, it’s up to the entire team to refine it.
- Respects the Boy Scout Rule. Great Development Teams use the Boy Scout Rule: always leave the campground cleaner than you found it. Translated to software development: always leave the code base in a better state than you’ve found it. If you find messy code, clean it up, regardless of who might have made the mess.
- Criticizes ideas, not people. Great Development Teams criticize ideas, not people. Period.
- Share experiences. Great Development Teams share experiences with peers. This might be within the organization, but also seminars and conferences are a great way to share experiences and gather knowledge. Of course writing down and sharing your lessons learned is also highly appreciated. And yes, for the attentive readers, this is exactly the same as for the Product Owner.
- Understands the importance of having some slack. Great Development Teams have some slack within their sprint. Human beings can’t be productive all day long. They need time to relax, have a chat at the coffee machine or play table football. They need some slack to be innovative and creative. They need time to have some fun. By doing so, they ensure high motivation and maximum productivity. But slack is also necessary to handle emergencies that might arise; you don’t want your entire sprint to get into trouble when you need to create a hot-fix. Therefore: build in some slack! And when the sprint doesn’t contain any emergencies: great! This gives the team the opportunity for some refactoring and emergent design. It’s a win-win!
- Has fun with each other. Great Development Teams ensure a healthy dose of fun is present every day. Fostering fun, energy, interaction and collaboration creates an atmosphere in which the team will flourish!
- Don’t have any Scrum ‘meetings’. Great Development Teams consider the Scrum events as opportunities for conversations. Tobias Mayer describes this perfectly in his book ‘The Peoples Scrum’: “Scrum is centered on people, and people have conversations. There are conversations to plan, align, and to reflect. We have these conversations at the appropriate times, and for the appropriate durations in order to inform our work. If we don’t have these conversations, we won’t know what we are doing (planning), we won’t know where we are going (alignment), and we’ll keep repeating the same mistakes (reflection).”
- Knows their customer. Great Development Teams know their real customer. They are in direct contact with them. They truly understand what they desire and are therefore able to make the right (technical) decisions.
- Can explain the (business) value of non-functional requirements. Great Development Teams understand the importance for non-functional requirements like e.g. performance, security and scalability. They can explain the (business) value to their Product Owner and customer and hereby ensure its part of the product backlog.
- Trust each other. Great Development Teams trust each other. Yes, this is obvious. But without trust it’s impossible for a team to achieve greatness.
- Keep the retrospective fun. Great Development Teams think of retrospective formats themselves. They support the Scrum Master with creative, fun and useful formats and offer to facilitate the sessions themselves.
- Deliver features during the sprint. Great Development Teams deliver features continuously. Basically they don’t need sprints anymore. Feedback is gathered and processed whenever an item is ‘done’; this creates a flow of continuous delivery.
- Don’t need a sprint 0. Great Development Teams don’t need a sprint 0 before the ‘real’ sprints start. They are able to deliver business value in the first sprint.
- Acts truly cross-functional. Great Development Teams not only have a cross-functional composition and act truly cross-functionally. They don’t talk about different roles within the team but are focused on delivering a releasable product each sprint as a team. Everyone is doing the stuff that’s necessary to achieve the sprint goal.
- Updates the Scrum board themselves. Great Development Teams ensure the Scrum/team board is always up-to-date. It’s an accurate reflection of the reality. They don’t need a Scrum Master to encourage them; instead they collaborate with the Scrum Master to update the board.
- Spends time on innovation. Great Development Teams understand the importance of technical/architectural innovation. They know it’s necessary to keep up with the rapidly changing environment and technology. They ensure they have time for innovation during regular working hours, and that it’s fun and exciting!
- Don’t need a Definition of Done. Great Development Teams deeply understand what ‘done’ means for them. For the team members, writing down the Definition of Done isn’t necessary anymore. They know. The only reason to use it is to make the ‘done state’ transparent for their stakeholders.
- Knows how to give feedback. Great Development Teams have learned how to give each other feedback in an honest and respectful manner. They grasp the concept of the ‘Situation – Behavior – Impact Feedback Tool’ and hereby provide clear, actionable feedback. They give feedback whenever it’s necessary, and don’t postpone feedback until the retrospective.
- Manages their team composition. Great Development Teams manage their own team composition. Whenever specific skills are necessary, they collaborate with other teams to discuss the opportunities of ‘hiring’ specific skills.
- Practice collective ownership. Great Development Teams understand the importance of collective ownership. Therefore they rotate developers across different modules of the applications and systems to encourage collective ownership.
- Fix dependencies with other teams. Great Development Teams are aware of possible dependencies with other teams and manage these by themselves. Thereby ensuring a sustainable development pace for the product.
- Don’t need story points. Great Development Teams don’t focus on story points anymore. They’ve refined the product backlog so that the size for the top items don’t vary much. They know how many items they can realize each sprint. Counting the number of stories is enough for them.
About the Author
Barry Overeem is an Agile Coach at Prowareness and Professional Scrum Trainer at Scrum.org. He is an active member of the Agile community and shares his insights and knowledge by speaking at conferences and writing articles. Since 2000 he fulfilled several roles with a software development environment, these vary from application consultant, project manager and team lead. Since 2010 his primary focus is applying the Agile mindset and the Scrum Framework. Barry is specialized in the role of the Scrum Master and helping people understand the spirit of Scrum and hereby using the Scrum framework better. Due his own practical experience as a Scrum Master, Barry gained a lot of experience with starting new teams, coaching teams through the different stages of team development and applying different types of leadership. Sharing these experiences and hereby contributing to other persons growth is his true passion!
En otras ocasiones hemos hablado sobre los problemas de salud que sufren nuestros perros, como consecuencia de las políticas de cruce y pedigrí. Una de las razas más afectadas por estas leyes eugenésicas es el pug o carlino. Al igual que los bulldog, los pug o carlinos están condenados a una vida de problemas respiratorios y de salud debido al capricho humano.
Of Gods and Procrastination: Agile Management
Common errors in Agile management, and how to get the best quality code from your developers without tying them to their keyboards.
Quickly embraced by some, completely ignored by others, Agile management spent the last decade and a half gaining popularity. Today it has become one of the most trendy phenomena, and most companies claim to have adapted and applied its principles. And indeed, that is true, yet almost always in a modified, and even sometimes in a corrupted, way.
Most of us in software development have been in different teams and projects, as developers in some, and as team leads & managers in others. We coped with clients in kick-off meetings, decoding acceptance criteria and wireframes, defining the MVP, accepting changes in the requirements, and modifying the scope in the middle of the sprint. We made mistakes and learned the hard way. Mistakes that we should not commit again. Yet sometimes, we see them happening again in our own team, when visiting clients, or meeting teams with whom we will collaborate, etc. Today, I want to focus on the troubles I see the most among managers with software developer teams.
Agile Management Common Errors
Meeting a Tight Deadline by Adding Additional Resources to the Team
You check the estimation for the running sprint and find out that the team is currently 16 hours behind the schedule. It seems like no problem at all; you have a developer that just finished his project, he will join the struggling team for two days, and you guys will be back on track.
By doing this, the team probably won’t meet the deadline. Why? The mistake here is to think that a developer performs easy, automatable work. Well, he doesn’t. Even if he is familiar with the technologies used in the project, he still needs an introduction to what the project is about, what has already been done, where all the documentation is, what wireframes are still being reviewed, and a very long list of other things. Besides the fact that the productivity of this developer will be low (at least in the beginning), he will also need to be assisted by the rest of the team to be taught everything described above. A task that is usually assigned to one particular person. Well, that person’s productivity will also drop as he will be distracted and will have to spend hours helping and training the new member of the team.
In the beginning, Parkinson’s Law had a different meaning. Today it states that work expands to fill the time available for its completion. Let’s say we are having a performance issue with a particular project. So we assign one of our best developers to investigate what the problem is and to fix the bottleneck. To do that, we decide to spare a week of time.
Parkinson’s Law is not always present in a developer; sometimes it’s stronger, sometimes it’s weaker. Yet freedom of time in a task, especially if it doesn’t have a clear where-to-end point, will lead to its expansion, occupying all the time available for it. Sometimes it can even be worse, where the resulting solution suffers from over-engineering that adds unnecessary complexity to the project. To avoid this situation, the task must have strict goals and acceptance criteria, or otherwise, a frequent polling in order to see the results achieved so far.
Multiple Projects and Distributed Teams
Although out there you can find an enormous amount of articles on how to succeed with distributed teams applying Agile, keeping in mind an even distribution of tasks, understanding time and cultural differences, etc, not all projects are good to do such a thing. Especially when each developer forms a part of several different teams at the same time. In the attempt to make each one of the developers an ‘all-terrain’ developer, they end up working on multiple projects at the same time; for instance, Monday and Tuesday on project A, and from Wednesday to Friday on project B.
You have probably heard about the developer’s focus. This is when the developer is in their most productive state of mind. Once they lose that focus, however, it takes some time to get it back. Well, the same thing happens when switching between projects and checking what was missed while being away. Although some tools help to mitigate this effect, Dailies, Jira or Trello, for example, it still drags down one’s productivity.
It’s easy to disagree about this topic, but by default, I do defend the 6th principle of the Agile Manifesto, for both ‘co-location’ and ‘co-time’:
“The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.”
Time Pressure Increases Productivity
It’s surprising how common it is to discover among your co-workers and professional colleagues that they had the same dark experience. Often in a startup or in a small company, with a very talented manager that made them ‘believe in themselves and in the product,’ which ended up in countless extra hours, tons of stress, and impossible-to-meet deadlines. As developers accept such working conditions, it allows their manager to presume that the team is quite productive, as the ratio of delivered functionalities and time is unbelievably high.
In fact, the productivity of the team might be considered high, as long as you don’t take into account the quality of the work done and the extra (and unpaid) hours. Those kinds of conditions inevitably lead to two results:
- First, the quality of the code goes down hill. This means more bugs passing through (no need to explain that a bug in production is hundreds of times more expensive for the company than the time needed to get it done right in first place), the test coverage fails, functionality is implemented partially, etc. Under time pressure, developers won’t work more, developers will work faster. Basically quantity over quality.
- Second, at a certain point, the developer ends up quitting. Once he realizes that things won’t change and that his workaholic attitude and commitment to the company isn’t really good for him, he will definitely find another place to try his luck. Usually, the one that leaves is the one that had the most pressure, i.e. the one that can actually leave because he knows he has another option. And guess what? That’s the developer that you can’t let go.
To finish with this paper, I would like to point out the link between the code of a developer and his motivation. Usually, Software Development is not just something that ‘pays the bills,’ it’s someone’s passion. For a developer, to have the chance to write quality code means a burst of motivation. Take that chance away, and the motivation is gone.
And when a manager’s focus for the team is to keep up the productivity, the quality rarely increases in a significant way. When the focus is on quality, however, productivity tends to soar.
La misma política utilizada por Gobiernos y grupos fundamentalistas se encuentran utilizando elementos al interior de nuestra organización para ocultar una realidad que es evidente.
La pagada de piso no tiene fecha, y pareciera no existir ninguna evidencia que indique que este rito elemental constitutivo de nuestra comunidad, tenga posibilidad de realizarse en un horizonte cercano…
En un principio se crearon los programadores y los proyectos, pero no había nada más que tinieblas y el espíritu del cliente cabreado planeaba por los departamentos.
Así que un buen día, dos tipos llamados Takeuchi y Nonaka dijeron: ¡Hágase el Scrum!
Y vieron los jefes de proyecto que era bueno, y volaron sombreros en algarabía.
Casi sin saberlo, se había inventado lo que iba a ser una de las implementaciones Agile más populares del planeta.
¿Qué aportó Scrum que lo diferenció del resto de formas de gestionar proyectos? En mi opinión dos aspectos básicos: transparencia con los clientes y ciclos de release periódicos y definidos.
En los otros sistemas de gestión que usé anteriormente (if any!) los proyectos se cargaban de una pesada losa de documentación que se llevaba casi la mitad de los costes disponibles y que el cliente debía firmar entre un mar inmenso de dudas (y de papeles).
Esta es la semilla de las frustraciones y lo que ha marginado a los proyectos de software hacia una de las experiencias más insatisfactorias que pueda sufrir el ser humano, junto a la de participar en juegos de azar y ponerse a dieta.
Tocar el producto desde el principio
Este aspecto es el más valorado por el cliente, quien es ni más ni menos que el que nos paga.
La sensación de estar metido desde la “mórula”, la génesis de su proyecto, les hace ser más comprensivos con los posibles imprevistos que puedan ir surgiendo, amén de proporcionarles una infinita tranquilidad sobre su inversión.
Yo lo comparo con comprar por internet: pagas por algo que no has tocado, ni olido ni visto. ¿Quién no mira el tracking code para ver dónde está el paquete? Puede que esté parado en Berlín y lleve tres días, pero sabes que está ahí.
Con Scrum el futuro propietario del producto, el padre adoptivo, también sabe dónde está, y además también sabe cómo se va construyendo. Esto que parece nimio es nuestra revolución. ¡Estamos iniciando a un muggle a los rudimentos de la magia! Esta persona aprenderá que los programas no son “dar un botón y listo”, que tienen tanto de artesano como ese Murillo que tanto admira y que sabe que es único.
Será comprensivo (salvo Saurons) cuando le digamos que ese BotónVerdeQueSaltaYVuela que le prometimos es totalmente imposible, pero que intentaremos hacerlo de una manera parecida.
Lo que hay que hacer bien clarito
La gran herramienta de Scrum es el Product Backlog, que no es ni más ni menos que la lista de funcionalidades que debe realizar el software que vamos a empezar a hacer, perfectamente ordenada y documentada incluso a nivel de procesos.
Es la Herramienta, así con mayúsculas, y todo el mundo podrá verla y tocarla desde el principio.
Lo ideal es montarla como una Wiki, y que vaya evolucionando como el germen de la documentación del proyecto, ayudándolos de los resultados de los sprints y las actas de reunión.
Mantener al equipo centrado
Es común que haya interferencias externas (teléfono, propuestas de cambio, etc) que desconecten a los programadores de su tarea. Tarea dicho sea de paso que está mal reconocida y valorada. Programar es algo muy complejo y necesita una altísima carga de concentración y de eficiencia mental. Cualquier distracción hará que el desarrollador tenga que perder dicho estado de foco en la tarea y, después de 10 minutos al teléfono, tenga dificultades para saber qué estaba haciendo justo antes.
El Scrum Master es nuestro “papi”, que lo arregla todo todo, y que evita que tengamos que sufrir dichas distracciones y cuyo trabajo nunca es fácil, teniendo que manejar las situaciones con la maestría que les caracteriza.
Este rol es fundamental y, bajo mi punto de vista, es el más importante de todos. Era un rol que hacíamos los programadores habitualmente cuando llamaba el cliente para quejarse por algo o para preguntar qué tal iba el módulo ChachiOptimizador que le estábamos haciendo.
Objetivos cercanos y factibles
Los Sprints son eso: objetivos a realizar en un corto periodo de tiempo que incrementarán la funcionalidad del software.
Para los programadores este aspecto es magnífico porque nos permite saber qué tenemos que hacer (ojo a ese plural) para cumplir la planificación prevista.
Las tareas son concretas, divisibles por módulos y asignables libremente (en principio), y usando un Pomodoro todo parece más fácil, y lo mejor de todo es que ¡es trabajo en equipo!
Cualquier cambio o nueva característica habrá de respetar el Sprint. Nada de imprevistos durante ese tiempo cerrado e intocable, ya se planificará en la siguiente iteración.
Ah, y ojo con valorar dichas novedades en tiempo y dificultad sin contar con los que las tienen que hacer: en Scrum eso es ilegal.
Y nada de sofisticados sistemas: una pizarra, papeles y un reloj de cocina es lo único que vamos a necesitar. Con esto no habrá proyecto que se nos resista.
Esta es la revolución Scrum, y ha venido para quedarse, al menos en mi equipo.
Ha llegado la cordura a la gestión de proyectos.