Please define Done!

Guidelines to help define done for requirements, development and test.

We have all been there, but I’ll pick on me for this blog. During a daily standup, I’ve stated my task is done. Woot woot! Time for a cup of coffee and then onto the next task. Just as the Agile board is being updated the project manager asks: “is the code checked-in?”, “was a code review done?”, “is it deployed to the development environment?”, “did you unit tested?”. Umm…(insert awkward silence). I guess I need a bit more time.

It happens to the most seasoned team member. In my experience, the best way to prevent this is to have a clear definition of what Done is. It varies by team and team member, so define early and incorporate as part of your daily routine.

Define Done

The definition of Done is set of guidelines or checklist to follow. It ensures everyone is on the same page on what is required to get a task completed and how to verify the requirement has been met. Defining Done is not easy, takes time, and is a living document. Without the definition of Done, items are missed, assumptions are made, and an inferior product is delivered. Of all the principles that guide a project team, I feel the definition of Done is in the top two or three priorities.

In this blog, I outline key areas where the definition of Done is most critical. This is a starting point – expand and update.

Note: I will use the term “tasks” for simplicity. The approach is applicable to all project delivery methodologies I can think of.

Definition of Done for Tasks

One of the best methods I have seen is a detailed review of each task by all project team members. In an Agile project, this is often done as part of the planning session. During this session, I ask each team member to review the task subject, requirement, and acceptance criteria. Any confusion, assumptions, or missing details need to be addressed before the task definition is Done.

This is a time-consuming process and I hear lots of grumbling about the time that could be spent doing something else. Each time I run through this process, however, I am reassured this is the right approach as the tasks are matured, assumptions are removed, and the team understands the objectives. The net result is a higher quality product, a team that understands the bigger picture and a happier customer.

Writing task definition and acceptance criteria seems like a relatively straightforward task but writing a comprehensive task (subject, details, and acceptance criteria) takes experience and creativity. A few guiding principles I recommend:

  • Is the title short and descriptive? I found this article particularly helpful.
  • Are there assumptions in the task? For example, “personal information” may mean multiple things to different team members. Spell out the details and remove the assumption.
  • Do multiple audiences (PM, analyst, developer, QA, SME) understand what the task is trying to convey?
  • Is the acceptance criteria defined? This post does a great job spelling out why what and how to write the acceptance criteria.
  • Is there a priority assigned to the task?
  • Ideally, an estimate and high-level design are provided. Depending on the size of the task, an estimate and design might be a separate task.

This list is a starting point but covers critical items.

Done for Development & Test

After many years of writing code and claiming my tasks are done, I can say this with love, respect and confidence – developers are notorious for claiming tasks are done when they are not. Here are statements about tasks I have that were “done”, but with a little poking and prodding, code was…

  • Not checked-in.
  • Is not part of the build.
  • Has not been unit tested.
  • Has not been code reviewed.

During the Wild Wild West phase of the project, the focus is on getting sh*t done and compromises are made. That is the reality of project delivery but the problem with some compromises is quality. These compromises are not worth the perceived time savings. Here are some the guidelines I use to define Done for development and test while maintaining quality:

  • Code reviews are completed.
  • The code is checked-in to source control.
  • All files are added to source control.
  • The code can compile on someone else’s machine.
  • The code is commented.
  • The code is maintainable.
  • The solution passes positive and negative unit and system testing.
  • The solution passes functional tests using the acceptance criteria.

For development tasks, all above items must be accomplished to be considered Done. This is a bare minimum list. For larger projects/products, the list is more comprehensive.

Ready for Demo!

This is the definitive definition of Done – the solution is in an environment where it can be shown off to the customer and other key parties. Assuming the process above was followed, few corrections are needed and ideally, you have a happy customer.

Final Thoughts

Defining Done is not a trivial task and it takes a team to do so. The project’s architect and project manager generally come up with the initial list, but the team helps shape and mature the list. Once the definition is initially agreed upon, print it, and hang it up where everyone can see it daily. It is a living and breathing document, so expect it to change. When you believe your task is Done, refer to the list and verify.

 

Until next time,

Chris

Manage by…?

My approach to management and leadership.

Sink or swim. Trial by fire. Fly by management. There are more descriptions and publications on how to be a manager than there are Starbucks in Seattle. So why write another? As common as the topic is, I find that many managers are missing specific fundamentals. My goal of this blog is not to say that my approach is the right approach or I have the answers, but to share my experiences of what has worked well for the teams I have coached throughout the years. I welcome your experiences and approaches.

Nearly all of my professional career I have been a manager and through trial and error, mentoring, and lots of reading, I have developed a style and approach. I do not use a one size fits all approach. My style adapts to the company, culture, and individual.

Note: I use the term manager for simplification. For many practical purposes, I interchange lead and manager. There are differences, but when it comes to guiding, coaching, and mentoring I find more similarities than differences in the roles.

My Beliefs

Before diving into specifics, it is important to share a few of my core beliefs that have shaped my management style.

  • Being a manager is hard – it is not for everyone.
  • Do not be a manager if you are not willing to make someone’s professional growth a priority.
  • A manager should care, personally and professionally, about his/her team. There is, however, a difference between caring and being friends.
  • Patience is critical. Feel, pause, and then react.
  • The notion that there is an absolute separation between personal and professional life is a fallacy. Managers balance compassion with getting sh*t done.
  • Bidirectional open and honest feedback loops are vital.
  • I follow a strict “no surprises” philosophy during reviews  (excluding compensation changes). Reviews are a summation of the one-on-one meetings.

My Fundamentals

My fundamentals represent the must-haves for a manager. This is not comprehensive but is a starting guide. Align with your preferences and your company’s culture. I’d love to hear what you would add to this list.

Clear Communication

Related imageMiscommunications happen. Anyone that is or has been in a relationship knows this all too well. I find that miscommunication often occurs because feelings are trying to be spared, there is fear of being honest, or the parties are not speaking the same language (figuratively). Unfortunately, the net result is lack of transparency, dishonesty and often being blindsided. Personally, I’d rather have it between the eyes than dance around a topic (I’m not a good dancer – just ask my wife).

Be honest, direct, clear and blunt if needed. The message does not have to be abrupt or rude. Shape the message style according to the parties involved. Most importantly, do not leave the room without ensuring everyone is on the same page.

1:1s

Related image1:1s (one-on-ones) are essential. It is time for the employee and manager to have dedicated time to discuss career growth, how things are going, any concerns or questions, and general updates. At times, 1:1s are brief, but use this time to get to know your teammates better and vice versa.

1:1s discussions must be open, honest, and bidirectional. I encourage my direct reports to tell me how I can improve, what I can do to help them and what is on their mind. Depending on the individual, this can take some poking and prodding. Some individuals are not interested in sharing more than what is happening on his/her project. That is the prerogative of the individual.  1:1s are as unique as they come with people management but do I have a few standards:

  • Conversations are documented by the employee and sent to the manager. Personal items are excluded. The manager updates the document (if needed) and acknowledges. If your company uses a talent management solution (I use Crelate), see if you can store the document there. If not, email storage works fine too. The goal of this process is to help with reviews and promote clear communication.
  • 1:1s happen every two to three weeks depending on the employee and size of the organization. I default to every two weeks.
  • 1:1s form the basis for reviews. As stated above, any items that are going great or need to improve are discussed as they come up during the 1:1s. The worse situation is to blindside either party in a review (performance improvements, desire for a new project, better comp, etc.)
  • Do not cancel 1:1s. I am notorious for moving 1:1s (among other meetings), but I do my very best not to cancel. It is too easy to get caught up in the day-to-day, but treat this meeting as critical.

Dealing with Negative Emotions

TEST 2Like it or not, there are going to be times that you are pissed off, upset or sad at work. Emotions are the reality of life. I have worked with managers that believe that as a professional, you should be able to separate your feelings from your job. That is a load of crap. I have been in the position of pissing off a team member and other times where I wanted to fire an employee on the spot because he pissed me off (skipping details).

As a leader, I believe one of the best attributes you bring the table is patience. That is easier said than done. Patience is a virtue, and it takes practice – a lot of practice. The best leaders I know have mastered emotional reaction. I am not suggesting they do not want to jump over the table and smack the person that is irritating them, but they have learned that is far more effective to breathe, listen to the emotion and know when and where to react.

For inappropriate behavior conversations, it is best to have them behind closed doors. There are exceptions, of course, such as egregious behavior, but as a general rule of thumb, I’ll have these conversations as soon as possible, and not wait for the next formal 1:1. Like the 1:1s however, the dialogue is documented and if appropriate, HR is included in the conversation and/or email thread.

Your Style

As I mentioned earlier, I have shaped my management and leadership style based on my mentors, reading many books and blog posts, but most importantly, what has worked well for my team and me. Find a style that works well for you, know that it is a constant state of a draft and it has to be adaptive. One size does not fit all.

Recommended Readings

 

Until next time,

Chris

 

 

Project Delivery – Back to the Basics

Bring your project back from the Wild Wild West to a state of quality, maintainability, and supportability.

The Fast & Furious

pexels-photo-60230.jpeg

Many of the projects I have worked on had initial similar traits – understaffed, underfunded, and behind schedule. I call this the Wild West West (WWW) phase. Although this stage is chaotic and stressful, I enjoy this stage of a project. There is a tight collaboration between business and technical teams, lots of challenges to solve and everyone is motivated to get sh*t done. The problems in the WWW phase are standards are not followed, the SDLC is out the window, and quality, maintainability, and supportability are afterthoughts. The WWW phase is often fun, challenging and gets the job done but, it is not sustainable and does not produce a quality product.

Regroup & Breath

After the first release is out the door, critical support items are resolved, and things are generally speaking calm, it is time to regroup and breath. It is important as a team to review the processes that are used and ask some key questions:

  • Do we have the fundaments in place?
  • Is everyone on the same page of what the fundamentals are (SOLID principals for example)?
  • Where do we start to mature the delivery process?
  • Is there time allocated in the schedule to mature the model?
  • Do we have the right resources for the team to help mature the process?
  • Do we all agree on what the definition of “done” is?
  • What’s needed to improve quality?

This is an initial set of questions I start with when I in the regroup & breath mode. Maturing the delivery process is all about supportability, maintainability, and having a predictable and repeatable process. Even for the most seasoned teams and IT professionals, it takes diligence, practice, and time to ensure that the core principals are followed.

Back to the Basics

pexels-photo-601177.jpeg

For a project to be successful in the long term, the basics must be at the core of the delivery process. After each deliverable, sprint, or major milestone, I like to review with the team the fundamentals. There are many, but four key aspects stand out:

  • Quality – what is being done, for each discipline, to ensure the team is delivering the highest quality possible. I look for specific items such as functional and technical design sessions, UX reviews, code check-in & reviews, and unit and system testing.
  • Supportability – support is one of those areas that are often forgotten in the mad dash to get things done. Having spent some time in the support world, I try to instill the importance to the delivery team of building a supportable solution. This means at a minimum of having the appropriate documentation, logging, notifications, and training for support personnel.
  • Maintainability – one thing I love about being a developer is that you get to code some really cool stuff. Not only that, but you often get a second chance (refactoring) to make your code better – condense it, make it more efficient and more elegant. Refactoring can be taken too far though – what was readable and easy to follow now looks like Ancient Sand Scripts. My guidance – can someone read the code a year from today and understand what it does? If so, it is probably maintainable code. If not, consider additional whitespace, comments, or a clearer way to write the logic.
  • Repeatability – it is vital to introduce a repeatable process in everything that is done within the delivery process. This starts with the UX design reviews and goes through training the support teams. The process does not have to be fancy, automated or complex, but it does have to be agreed upon, dependable, documented, and followed. As the project and team mature, this is an area that consistently evolves. In my experience, this is always a work in progress.

 

Final Thoughts

finish

The SDLC, design & code reviews, training sessions, and so many other items all contribute to a successful deliverable. The basics are not sexy, but they are the difference between a successful solution that provides value for many years vs. a one-hit wonder. When in doubt, pause for a moment, review the processes in place and get back to the basics.

Until next time.

Chris