urn:lsid:ibm.com:blogs:entries-59010112-9143-447a-ba21-e36e0f009a6bAgility@Scale: Strategies for Scaling Agile Software Development - Tags - modeling Agility@Scale: Strategies for Scaling Agile Software Development22015-01-19T21:45:56-05:00IBM Connections - Blogsurn:lsid:ibm.com:blogs:entry-813ad323-d2bf-4b41-a71d-774c279129d5Requirements Envisioning on Agile Projects at ScaleScottAmbler120000HESDactiveEntradas de comentariosapplication/atom+xml;type=entryGusta2009-02-26T08:05:09-05:002012-01-19T13:00:44-05:00Contrary to popular belief, agile development teams do in fact model and yes, they even do some up front requirements and architecture modeling. Two of the best practices of Agile Modeling are <a href="http://www.agilemodeling.com/essays/initialRequirementsModeling.htm" target="_blank">Requirements Envisioning</a> and <a href="http://www.agilemodeling.com/essays/initialArchitectureModeling.htm" target="_blank">Architecture Envisioning</a> where you spend a bit of time at the beginning of the project doing enough initial modeling to get you going in the right direction. The strategy is to take advantage of modeling, which is to communicate and think things through without taking on the <a href="http://www.agilemodeling.com/essays/examiningBRUF.htm" target="_blank">risks associated with detailed specifications written early in the lifecycle</a>. In this blog posting I will focus on requirements envisioning, in a future posting I'll cover architecture envisioning.<br/><br/>The goal of initial requirements envisioning is to identify the scope of your effort. You need to do just enough modeling early in the project to come to stakeholder concurrence and answer questions such as what you're going to build, roughly how long it's going to take (give a range), and roughly how much it's likely to cost (once again, give a range). If you can get the right people together in the room, which can sometimes be a logistics challenge but not one that you couldn't choose to overcome, there are very few systems (I suspect less than 5%) that you couldn't initially scope out in a few days or a week. I also suspect that most of the remaining systems could be scoped out with less than 2 weeks of modeling, and if not then I'd take that as an indication that you're taking on too large of a project. I'm not saying that you'll be able to create big detailed specifications during this period, and quite frankly given the problems associated with "<a href="http://www.agilemodeling.com/essays/examiningBRUF.htm" target="_blank">Big Requirements Up Front (BRUF)</a>" you really don't want to, but I am saying that you could gain a pretty good understanding of what you need to do. The details, which you'll eventually need, can be elicited throughout the lifecycle when you actually need the information. A common saying in the agile community is that requirements analysis is so important for us that we do it every single day, not just during an initial phase. I'll discuss just in time (JIT) approaches to requirements modeling in a future posting.<br/><br/>To envision the requirements for a business application, you might want to consider creating the following models:<UL><LI><b>High-level use cases (or user stories).</b> The most detail that I would capture right now would be point form notes for some of the more complex use cases, but the majority just might have a name. The details are best captured on a just-in-time (JIT) basis during construction.<LI><b>User interface flow diagram.</b> This provides an overview of screens and reports and how they're inter-related. You just need the major screens and reports for now.<LI><b>User interface sketches.</b> You'll likely want to sketch out a few of the critical screens and reports to give your stakeholders a good gut feeling that you understand what they need. Sketches, not detailed screen specifications, are what's needed at this point in time.<LI><b>Domain model.</b> A high-level <a href="http://www.agiledata.org/essays/agileDataModeling.html" target="_blank">domain model</a>, perhaps using <a href="http://www.agilemodeling.com/essays/umlDiagrams.htm" target="_blank">UML</a> or a data modeling notation, which shows major business entities and the relationships between them, can also be incredibly valuable. Listing responsibilities, both data attributes and behaviors, can be left until later iterations.<LI><b>Process diagrams.</b> A high-level process diagram, plus a few diagrams overviewing some of the critical processes, are likely needed to understand the business flow.<LI><b>Use-case diagram.</b> Instead of a high-level process diagram you might want to do a high-level use case diagram instead. This is a matter of preference, I likely wouldn't do both.<LI><b>Glossary definitions.</b> You might want to start identify key business terms now, although I wouldn't put much effort into settling on exact definitions. I've seen too many teams run aground on "analysis paralysis" because they try to define exact terminology before moving forward. Don't fall into this trap.</UL><br/><br/>For small teams simple tools such as whiteboards and paper are usually sufficient for requirements envisioning. But what happens at scale? What if you're working on a large agile team, say of 50 people, 200 people (IBM has delivered software into the marketplace with agile teams of this size), or even 500 people (IBM currently has teams of this size applying agile techniques)? What if your team is distributed? Even if you have people working on different floors of the same building, let alone working from home or working in different cities or countries, then you're distributed (see <a href="http://www.ibm.com/developerworks/blogs/page/ambler?tag=Distributed" target="_blank">my postings about distributed agile development</a>). Suddenly whiteboards and paper-based tools (index cards, sticky notes, ...) aren't sufficient. You're still likely to use these sorts of tools in modeling sessions with stakeholders, but because of one or more scaling factors you need to capture your requirements models electronically.<br/><br/>In January Theresa Kratschmer and I gave a webcast entitled <a href="https://www.ibm.com/services/forms/preLogin.do?lang=en_US&source=dw-c-wcsdpr&S_PKG=011509" target="_blank">Agile Requirements: Collaborative, Contextual, and Correct</a> which overviewed agile approaches to requirements elicitation and management, including requirements envisioning. We also showed how <a href="https://www.ibm.com/developerworks/downloads/r/rrc/?S_TACT=105AGX23&S_CMP=ratemail" target="_blank">Rational Requirements Composer (RRC)</a> can be used to electronically capture critical requirements information, enabling you to address the needs of large and/or distributed agile teams, while still remaining lightweight and flexible. I suspect that you'll find the webcast to be very illuminating and RRC something that you want to take a look at (the link leads to a trial version). Of course RRC can be used in other situations as well, but that's not what I'm focused on right now.<br/><br/>Teams which find themselves in regulatory environments will likely need to do more than just use RRC, as might very large teams. Regulatory compliance often requires more complex requirements documentation, which in turn requires more sophisticated tools such as DOORS or Requisite Pro, and I would consider using those tools in the types of situations that warrant it. One of the things that people often struggle to understand about agile approaches is that you need to tailor your strategy to reflect the situation at handle. One process size does not fit all, so you will end up using different tools and creating different artifacts to different extents in different situations. <a href="http://www.ibm.com/developerworks/blogs/page/ambler?tag=Repeatability" target="_blank">Repeatable results, not repeatable processes</a>, is the rule of the day. <br/><br/><br><b>Further reading:</b><UL><LI><a href="https://www.ibm.com/services/forms/preLogin.do?lang=en_US&source=dw-c-wcsdpr&S_PKG=011509" target="_blank">Agile Requirements: Collaborative, Contextual, and Correct Webcast </a><LI><a href="https://www.ibm.com/developerworks/downloads/r/rrc/?S_TACT=105AGX23&S_CMP=ratemail" target="_blank">Rational Requirements Composer</a><LI>Rational's <a href="http://www.ibm.com/rational/agile/" target="_blank">Agile Software Development</a> Home Page (for webcasts, whitepapers, ...)<LI><a href="http://www.agilemodeling.com/essays/agileRequirements.htm" target="_blank">Agile Requirements Modeling</a><LI><a href="http://www.agilemodeling.com/essays/initialRequirementsModeling.htm" target="_blank">Requirements Envisioning</a>: An Agile Best Practice<LI>Examining the <a href="http://www.agilemodeling.com/essays/examiningBRUF.htm" target="_blank">Big Requirements Up Front (BRUF)</a> Approach<LI><a href="http://www.ambysoft.com/surveys/modelingDocumentation2008.html" target="_blank">DDJ's 2008 Modeling and Documentation Survey</a>, which found that agile teams are more likely to model than traditional teams</UL><br><br/><br/><br/><br/>Contrary to popular belief, agile development teams do in fact model and yes, they even do some up front requirements and architecture modeling. Two of the best practices of Agile Modeling are <a href="http://www.agilemodeling.com/essays/initialRequirementsModeling.htm" target="_blank">Requirements Envisioning</a> and <a href="http://www.agilemodeling.com/essays/initialArchitectureModeling.htm" target="_blank">Architecture Envisioning</a> where you spend a bit of time at the beginning of the project doing enough initial modeling to get you going in the right direction. The strategy is to take advantage of modeling, which is to communicate and think things through without taking on the <a href="http://www.agilemodeling.com/essays/examiningBRUF.htm" target="_blank">risks associated with detailed specifications written early in the lifecycle</a>. In this blog posting I will focus on requirements envisioning, in a future posting I'll cover architecture envisioning.<br /><br />The goal of initial requirements envisioning is to identify the scope of your effort. You need to do just enough modeling early in the project to come to stakeholder concurrence and answer questions such as what you're going to build, roughly how long it's going to take (give a range), and roughly how much it's likely to cost (once again, give a range). If you can get the right people together in the room, which can sometimes be a logistics challenge but not one that you couldn't choose to overcome, there are very few systems (I suspect less than 5%) that you couldn't initially scope out in a few days or a week. I also suspect that most of the remaining systems could be scoped out with less than 2 weeks of modeling, and if not then I'd take that as an indication that you're taking on too large of a project. I'm not saying that you'll be able to create big detailed specifications during this period, and quite frankly given the problems associated with &quot;<a href="http://www.agilemodeling.com/essays/examiningBRUF.htm" target="_blank">Big Requirements Up Front (BRUF)</a>&quot; you really don't want to, but I am saying that you could gain a pretty good understanding of what you need to do. The details, which you'll eventually need, can be elicited throughout the lifecycle when you actually need the information. A common saying in the agile community is that requirements analysis is so important for us that we do it every single day, not just during an initial phase. I'll discuss just in time (JIT) approaches to requirements modeling in a future posting.<br /><br />To envision the requirements for a business application, you might want to consider creating the following models:<ul sizcache="25" sizset="124"><li><b>High-level use cases (or user stories).</b> The most detail that I would capture right now would be point form notes for some of the more complex use cases, but the majority just might have a name. The details are best captured on a just-in-time (JIT) basis during construction.</li><li><b>User interface flow diagram.</b> This provides an overview of screens and reports and how they're inter-related. You just need the major screens and reports for now.</li><li><b>User interface sketches.</b> You'll likely want to sketch out a few of the critical screens and reports to give your stakeholders a good gut feeling that you understand what they need. Sketches, not detailed screen specifications, are what's needed at this point in time.</li><li sizcache="25" sizset="124"><b>Domain model.</b> A high-level <a href="http://www.agiledata.org/essays/agileDataModeling.html" target="_blank">domain model</a>, perhaps using <a href="http://www.agilemodeling.com/essays/umlDiagrams.htm" target="_blank">UML</a> or a data modeling notation, which shows major business entities and the relationships between them, can also be incredibly valuable. Listing responsibilities, both data attributes and behaviors, can be left until later iterations.</li><li><b>Process diagrams.</b> A high-level process diagram, plus a few diagrams overviewing some of the critical processes, are likely needed to understand the business flow.</li><li><b>Use-case diagram.</b> Instead of a high-level process diagram you might want to do a high-level use case diagram instead. This is a matter of preference, I likely wouldn't do both.</li><li><b>Glossary definitions.</b> You might want to start identify key business terms now, although I wouldn't put much effort into settling on exact definitions. I've seen too many teams run aground on &quot;analysis paralysis&quot; because they try to define exact terminology before moving forward. Don't fall into this trap.</li></ul><br /><br />For small teams simple tools such as whiteboards and paper are usually sufficient for requirements envisioning. But what happens at scale? What if you're working on a large agile team, say of 50 people, 200 people (IBM has delivered software into the marketplace with agile teams of this size), or even 500 people (IBM currently has teams of this size applying agile techniques)? What if your team is distributed? Even if you have people working on different floors of the same building, let alone working from home or working in different cities or countries, then you're distributed (see <a href="http://www.ibm.com/developerworks/blogs/page/ambler?tag=Distributed" target="_blank">my postings about distributed agile development</a>). Suddenly whiteboards and paper-based tools (index cards, sticky notes, ...) aren't sufficient. You're still likely to use these sorts of tools in modeling sessions with stakeholders, but because of one or more scaling factors you need to capture your requirements models electronically.<br /><br />In January Theresa Kratschmer and I gave a webcast entitled <a href="https://www.ibm.com/services/forms/preLogin.do?lang=en_US&amp;source=dw-c-wcsdpr&amp;S_PKG=011509" target="_blank">Agile Requirements: Collaborative, Contextual, and Correct</a> which overviewed agile approaches to requirements elicitation and management, including requirements envisioning. We also showed how <a href="https://www.ibm.com/developerworks/downloads/r/rrc/?S_TACT=105AGX23&amp;S_CMP=ratemail" target="_blank">Rational Requirements Composer (RRC)</a> can be used to electronically capture critical requirements information, enabling you to address the needs of large and/or distributed agile teams, while still remaining lightweight and flexible. I suspect that you'll find the webcast to be very illuminating and RRC something that you want to take a look at (the link leads to a trial version). Of course RRC can be used in other situations as well, but that's not what I'm focused on right now.<br /><br />Teams which find themselves in regulatory environments will likely need to do more than just use RRC, as might very large teams. Regulatory compliance often requires more complex requirements documentation, which in turn requires more sophisticated tools such as DOORS or Requisite Pro, and I would consider using those tools in the types of situations that warrant it. One of the things that people often struggle to understand about agile approaches is that you need to tailor your strategy to reflect the situation at handle. One process size does not fit all, so you will end up using different tools and creating different artifacts to different extents in different situations. <a href="http://www.ibm.com/developerworks/blogs/page/ambler?tag=Repeatability" target="_blank">Repeatable results, not repeatable processes</a>, is the rule of the day. <br /><br /><br /><b>Further reading:</b><ul sizcache="25" sizset="130"><li sizcache="25" sizset="130"><a href="https://www.ibm.com/services/forms/preLogin.do?lang=en_US&amp;source=dw-c-wcsdpr&amp;S_PKG=011509" target="_blank">Agile Requirements: Collaborative, Contextual, and Correct Webcast </a></li><li sizcache="25" sizset="131"><a href="https://www.ibm.com/developerworks/downloads/r/rrc/?S_TACT=105AGX23&amp;S_CMP=ratemail" target="_blank">Rational Requirements Composer</a></li><li sizcache="25" sizset="132">Rational's <a href="http://www.ibm.com/rational/agile/" target="_blank">Agile Software Development</a> Home Page (for webcasts, whitepapers, ...)</li><li sizcache="25" sizset="133"><a href="http://www.agilemodeling.com/essays/agileRequirements.htm" target="_blank">Agile Requirements Modeling</a></li><li sizcache="25" sizset="134"><a href="http://www.agilemodeling.com/essays/initialRequirementsModeling.htm" target="_blank">Requirements Envisioning</a>: An Agile Best Practice</li><li sizcache="25" sizset="135">Examining the <a href="http://www.agilemodeling.com/essays/examiningBRUF.htm" target="_blank">Big Requirements Up Front (BRUF)</a> Approach</li><li sizcache="25" sizset="136"><a href="http://www.ambysoft.com/surveys/modelingDocumentation2008.html" target="_blank">DDJ's 2008 Modeling and Documentation Survey</a>, which found that agile teams are more likely to model than traditional teams</li></ul><br /><br /><br /><br /><br />Contrary to popular belief, agile development teams do in fact model and yes, they even do some up front requirements and architecture modeling. Two of the best practices of Agile Modeling are Requirements Envisioning and Architecture Envisioning where you...089687urn:lsid:ibm.com:blogs:entries-59010112-9143-447a-ba21-e36e0f009a6bAgility@Scale: Strategies for Scaling Agile Software Development2015-01-19T21:45:56-05:00urn:lsid:ibm.com:blogs:entry-cfa59792-6084-4694-b545-81a1c2ef1db3Agile Stakeholders at ScaleScottAmbler120000HESDactiveEntradas de comentariosapplication/atom+xml;type=entryGusta2007-12-10T23:38:05-05:002012-01-19T17:57:12-05:00The popular Agile literature can often seam naive when it comes to how Agilists work with project stakeholders:- Extreme Programming (XP) has a practice called On-Site Customer where one or more people work closely with your team to provide information and to make decisions in a timely manner.- Scrum has the role of Product Owner who is the one single person that the development team goes to for decisions about requirements. - Agile Modeling (AM) has the practice of Active Stakeholder Participation which extends On-Site Customer to get the stakeholder(s) actively involved with the modeling effort through the use of inclusive tools and techniques.<br/><br/>These are great strategies for small, co-located teams doing straightforward development, but they quickly fall apart at scale. This occurs for several reasons:1. Stakeholders are a diverse group. Your stakeholders include end users, business management, project funders, enterprise architects, operations staff, support staff, other system development teams, and many others. Different people have different, and often contradictory, requirements and they certainly have different priorities. It's questionable whether a single person, or a handful of persons, can adequately represent this diverse group.2. One person becomes a bottleneck. Even with a small co-located team this is a problem, let alone one that is geographically distributed or one that is very large. There's no way that a single person can be available 24/7 in a responsive manner to support distributed teams.3. It's a difficult role. The Product Owner/Customer (POC) is responsible for representing the business to the development team. They're making important decisions on a regular basis, decisions which they'll be held accountable for.4. One person becomes a serious project risk. Not only is it questionable whether a single person can fairly represent all stakeholders, even if they could what happens if you lose that person? They effectively become a single point of failure for your team.<br/><br/>To scale this role, consider the following strategies:1. Recognize the true scope of the POC role. Not only are they stakeholder proxies they also are a development team representative to the stakeholder community as a whole. As stakeholder proxies they'll make decisions and prioritize the work, they'll run requirements elicitation sessions, they'll negotiate priorities, and they'll put the development team in contact with stakeholders who have expertise in specific aspects of the domain. As team representatives they'll often demo the current version of the system to other stakeholders, communicate the status of the project to people, and respond to various requests for information from the stakeholders.2. Have multiple people in it. A single POC works well for small, co-located teams developing simple software. At scale you'll soon discover that you need multiple people in this role so that they don't become a bottleneck. For distributed teams it's common to see each subteam have one or more POCs who are managed by a primary/chief POC. The primary POC typically works on the coordinating team with the chief architect (I'll talk about this role in a future blog posting) and the program manager (also a topic for a future blog posting).3. Train them in business analysis skills. The person(s) in the POC role need good business analysis skills. If fact, it's common for people who were formerly BAs for traditional teams to step into the POC role, particularly with BAs who originally come from the business side of your organization. This strategy has its advantages and disadvantages. As a BA they've likely got solid business knowledge but their instincts may motivate them to take a documentation-driven approach to providing information to the development team instead of a collaboration-based approach. Be careful.4. Consider the full system development lifecycle. There's far more to the POC role than supporting the development team during Construction iterations. During "Iteration 0", the Inception phase for an Agile RUP project or the warm-up phase for an Eclipse Way project, the POC(s) will often lead the initial requirements envisioning efforts. The product backlog, or better yet your work item list, needs to come from somewhere after all. During the release iteration(s), the Transition phase for RUP or the End-Game phase for Eclipse Way, the POC(s) will focus on communicating the upcoming release to the stakeholder community, will be actively involved with any final user acceptance testing (UAT), and may even be involved with training end users. <br/><br/>In my January 2008 column in Dr Dobb's Journal, posted at http://www.ddj.com/architect/204801134 , I provide detailed advice about how to scale the way that you work with stakeholders on Agile projects by applying the practices of Agile Model Driven Development (AMDD). There's no magic solution, you just need to choose to organize yourself effectively. The good news is that you can easily work with stakeholders at scale.<div>The popular Agile literature can often seam naive when it comes to how Agilists work with project stakeholders:</div><ul><li>Extreme Programming (XP) has a practice called On-Site Customer where one or more people work closely with your team to provide information and to make decisions in a timely manner.</li><li><a href="http://www.ambysoft.com/essays/scrumTerminology.html">Scrum </a>has the role of <a href="http://www.agilemodeling.com/essays/productOwner.htm">Product Owner </a>who is the one single person that the development team goes to for decisions about requirements. </li><li><a href="http://agilemodeling.com/">Agile Modeling (AM) </a>has the practice of <a href="http://www.agilemodeling.com/essays/activeStakeholderParticipation.htm">Active Stakeholder Participation </a>which extends On-Site Customer to get the stakeholder(s) actively involved with the modeling effort through the use of <a href="http://www.agilemodeling.com/essays/inclusiveModels.htm">inclusive modeling </a>tools and techniques.<br /></li></ul><p>These are great strategies for small, co-located teams doing straightforward development, but they quickly fall apart at scale. This occurs for several reasons:</p><ol><li><strong>Stakeholders are a diverse group</strong>. Your stakeholders include end users, business management, project funders, enterprise architects, operations staff, support staff, other system development teams, and many others. Different people have different, and often contradictory, requirements and they certainly have different priorities. It's questionable whether a single person, or a handful of persons, can adequately represent this diverse group.</li><li><strong>One person becomes a bottleneck</strong>. Even with a small co-located team this is a problem, let alone one that is geographically distributed or one that is very large. There's no way that a single person can be available 24/7 in a responsive manner to support distributed teams.</li><li><strong>It's a difficult role</strong>. The Product Owner/Customer (POC) is responsible for representing the business to the development team. They're making important decisions on a regular basis, decisions which they'll be held accountable for.</li><li><strong>One person becomes a serious project risk</strong>. Not only is it questionable whether a single person can fairly represent all stakeholders, even if they could what happens if you lose that person? They effectively become a single point of failure for your team.<br /></li></ol><p>To scale this role, consider the following strategies:</p><ol><li><strong>Recognize the true scope of the POC role</strong>. Not only are they stakeholder proxies they also are a development team representative to the stakeholder community as a whole. As stakeholder proxies they'll make decisions and prioritize the work, they'll run requirements elicitation sessions, they'll negotiate priorities, and they'll put the development team in contact with stakeholders who have expertise in specific aspects of the domain. As team representatives they'll often demo the current version of the system to other stakeholders, communicate the status of the project to people, and respond to various requests for information from the stakeholders.</li><li><strong>Have multiple people in it</strong>. A single POC works well for small, co-located teams developing simple software. At scale you'll soon discover that you need multiple people in this role so that they don't become a bottleneck. For distributed teams it's common to see each subteam have one or more POCs who are managed by a primary/chief POC. The primary POC typically works on the coordinating team with the chief architect (I'll talk about this role in a future blog posting) and the program manager (also a topic for a future blog posting).</li><li><strong>Train them in </strong><a href="http://www.agilemodeling.com/essays/agileAnalysis.htm"><strong>agile business analysis </strong></a><strong>skills</strong>. The person(s) in the POC role need good business analysis skills. If fact, it's common for people who were formerly BAs for traditional teams to step into the POC role, particularly with BAs who originally come from the business side of your organization. This strategy has its advantages and disadvantages. As a BA they've likely got solid business knowledge but their instincts may motivate them to take a documentation-driven approach to providing information to the development team instead of a collaboration-based approach. Be careful.</li><li><strong>Consider the full system delivery lifecycle</strong>. There's far more to the POC role than supporting the development team during Construction iterations. During &quot;Iteration 0&quot;, the Inception phase for an <a href="http://www.disciplinedagiledelivery.com">Disciplined Agile Delivery (DAD) </a>project or the warm-up phase for an Eclipse Way project, the POC(s) will often lead the initial requirements envisioning efforts. The product backlog, or better yet your <a href="http://www.agilemodeling.com/essays/prioritizedRequirements.htm">work item list</a>, needs to come from somewhere after all. During the release iteration(s), the Transition phase for DAD or the End-Game phase for Eclipse Way, the POC(s) will focus on communicating the upcoming release to the stakeholder community, will be actively involved with any final user acceptance testing (UAT), and may even be involved with training end users. </li></ol><p>In my <a href="http://www.ddj.com/architect/204801134 ">January 2008 column in Dr Dobb's Journal</a>, I provide detailed advice about how to scale the way that you work with stakeholders on Agile projects by applying the practices of <a href="http://www.agilemodeling.com/essays/amdd.htm">Agile Model Driven Development (AMDD)</a>. There's no magic solution, you just need to choose to organize yourself effectively. The good news is that you can easily work with stakeholders at scale. </p><div>Furthermore, in <a href="http://www.disciplinedagiledelivery.com">Disciplined Agile Delivery (DAD)</a> we've adopted a more robust definition of stakeholder, the one promoted by Outside-In-Development (OID), and more realistic approach to the Product Owner role.</div>The popular Agile literature can often seam naive when it comes to how Agilists work with project stakeholders: Extreme Programming (XP) has a practice called On-Site Customer where one or more people work closely with your team to provide information and to...136886urn:lsid:ibm.com:blogs:entries-59010112-9143-447a-ba21-e36e0f009a6bAgility@Scale: Strategies for Scaling Agile Software Development2015-01-19T21:45:56-05:00