Scrum: Framework or Methodology?

Scrum framework or methodology. Agile methodology.

Scrum is a framework within which people can address complex adaptive problems, while productively and creatively delivering products of the highest possible value.

Why Scrum?

What is Scrum?

Scrum isn’t a fully-featured project management methodology. Rather, it describes an approach to Agile management with a focus on project teams, short “sprints” and daily stand-up meetings.

While it borrows the principles and processes from Agile, Scrum has its own specific methods and tactics for dealing with project management.

“Agile is the philosophy and Scrum the methodology. While Scrum is agile, agile isn’t scrum.”

The Scrum approach places the project team in front and center of the project. Often, there is no project manager. Instead, the team is expected to be self-organizing and self-managing. This makes it ideal for highly focused and skilled teams, but not so much for others.

Advantages of Scrum
  1. Scrum “sprints”: The Scrum approach is heavily focused on 30-day “sprints”. This is where the project team breaks down a wishlist of end-goals into small chunks, then works on them in 30-day sessions with daily stand-up meetings. This makes it easy to manage large and complex projects.
  2. Fast paced: The “sprint” approach with its 30-day limit and daily stand-up meetings promotes rapid iteration and development.
  3. Team-focused: Since the project team is expected to manage itself, Scrum teams have clear visibility into the project. It also means that project leaders can set their own priorities as per their own knowledge of their capabilities.

Besides these, it has all the benefits of Agile – rapid iteration and regular stakeholder feedback.

Disadvantages of Scrum
  1. Scope creep: Since there is no fixed end-date, nor a project manager for scheduling and budgeting, Scrum can easily lead to scope creep.
  2. Higher risk: Since the project team is self-managing, there is a higher risk of failure unless the team is highly disciplined and motivated. If the team doesn’t have enough experience, Scrum has a very high chance of failure.
  3. Lack of flexibility: The project-team focus means that any resource leaving the team in-between will hugely impact the net results. This approach is also not flexible enough for large teams.
Scrum is best for

The Scrum approach is best for highly experienced, disciplined and motivated project teams who can set their own priorities and understand project requirements clearly. It has all the flaws of Agile along with all its benefits. It works for large projects but fails if the project team itself is very large.

Scrum values

Below diagram depicts the core values of the Scrum framework.

 

Commitment
  1. This is not about the expectation that all scope will be delivered, no matter
  2. Commitment is about dedication and applies to actions, the effort, not the final result
  3. Maximum possible effort for achieving the goal and will be transparent
  4. Commitment towards –
    1. Quality
    2. Collaboration
    3. Learning
    4. Professionalism
    5. Excellence
    6. Self-organize
    7. Improvement
    8. Transparency
Focus
  1. Focus on what is most important now
  2. Future is highly uncertain, focus on YAGNI – “You aren’t gonna need it”
  3. Focus on the simplest thing
Openness
  1. Be transparent, inspect in order to make sensible adaptation
  2. Open about our work, progress, problems, and learnings
  3. Open for people and working with people
  4. Acknowledging people to be people, and not resources, robots or replaceable machinery
  5. Open to collaborate with stakeholders and wider environment
  6. Open in sharing feedback and learn from one another
  7. Open for change
Respect
  1. Respect for people, their experience and their personal background
  2. Respect different opinions, we might learn from it
  3. Respect for our sponsor by not building features that nobody will use
  4. Respect for users by fixing their problems and quality product
  5. Respect for wider environment by not behaving as an isolated island in the world
  6. Respect each other’s skills and expertise
Courage
  1. Courage to not build features that nobody wants
  2. Courage in admitting requirements will never be perfect
  3. Courage in admitting that no plan can capture reality and complexity
  4. Courage to not deliver undone features
  5. Courage to share risks and benefits
  6. Courage in sharing information that might help team and the organization
  7. Courage to change direction
Roles, Artifacts, and Events in the Scrum Framework

Below diagram depicts various roles and their correlation in the Scrum framework.

 

Roles

Various roles that comprise of scrum framework are:

Scrum Master

A Scrum Master is a team leader and facilitator who helps the team members to follow agile practices so that they can meet their commitments. The Scrum Master is responsible for ensuring Scrum is understood and enacted.

A Scrum Master serves the Scrum Team

  1. Lead by example. Be the first one to be vulnerable. Be a living demonstration of team assets and scrum values. Admit your missteps.
  2. Create an environment of safety. Encourage debate, support it and keep it productive. Use coaching techniques like open questions.
  3. Facilitate Consensus. Try to have key decisions made clear at the end of team discussions, making responsibility and deadlines clear.
  4. Learn to read the room. Be connected without being present.
  5. Show patience. Be okay with silence. Let the team take action.
  6. Restrain from solving. Reveal, not resolve. Be careful not to steer the team towards premature resolution of conflict to protect people. Help team members develop conflict resolution skills.
  7. Be comfortable with failure. Team decisions may not lead to the anticipated outcome. This is part of learning and growth.
  8. Care for people. Listen to them without judgement. Assume positive intent. Meet them where they are and help them find the next step.
  9. Show low tolerance for organizational impediments.

Below diagram depicts the misunderstood stances of a scrum master

 

Stances of a scrum master

 

Stances of a scrum master are:

  1. Servant Leader
  2. Coach
  3. Facilitator
  4. Teacher
  5. Mentor
  6. Manager
  7. Impediment Remover
  8. Change Agent
Scrum Master as a Servant Leader
  1. Setting up Scrum as a servant process, not a commanding process
  2. Guiding the Development Team towards self-organization
  3. Leading the team through healthy conflict and debate
  4. Shielding the team from disturbance and external threats
  5. Helping the team make visible, remove and prevent impediment
  6. Creating transparency by radiating information via Scrum events and artifacts
Scrum Master as a Coach
  1. Coaching the Individual in –
    1. Focusing on mindset and behavior
    2. Using Scrum well
    3. Taking next step in his/her Agile journey
  2. Coaching the Team in –
    1. Creating a learning culture
    2. Changing mindset for continuous improvement
    3. Problem solving and conflict resolution
  3. Coaching the organization in –
    1. Collaborating with the Scrum team
    2. Doing product management with a focus on business value
    3. Delivering high quality and valuable products
Scrum Master as a Facilitator
  1. Facilitate the Scrum process and the continuous improvement of the process
  2. Facilitate the integration of Scrum team into the wider organization
  3. Facilitates the Scrum events to be purposeful and effective
    1. Daily Scrum – an atmosphere where healthy peer pressure occurs on delivering quality, commitment and addressing impediments
    2. Sprint Planning – collaboration between the Development Team and the Product Owner, keeping a strong focus on delivering value
    3. Sprint Review – Scrum team, sponsors and stakeholders collaborate to work as One team with the same purpose
    4. Sprint Retrospective – a safe atmosphere in which “elephant in the room” is addressed
Scrum Master as a Teacher
  1. Teach Agile during the team start-up
  2. Teach the Scrum team about Empiricism
  3. Teach about Scrum to Scrum team and other stakeholders
  4. Teach the difference between Scrum the Best practices
  5. Teach the team about the self-organization
  6. Team the team about removing impediments
  7. Teach the team about the importance of the product vision
  8. Team the team about visualizing progress
  9. Teach the Product Owner about Backlog Management
  10. Teach the team to have fun
Scrum Master as a Mentor
  1. Shu – Follow the Rules
    1. Scrum Master acts as a teacher
    2. Shares knowledge and skills
    3. Provide instructions on “How to do”
  2. Ha – Break the Rules
    1. Offers new perspectives and possibilities
  3. Ri – Be the Rule
    1. Act as a counsellor
    2. Give advice whenever asked for it
Scrum Master as a Manager
  1. Manages impediments
  2. Manages the process
  3. Manages the boundaries of self-organization
  4. Manages the team’s health
  5. Manages the culture
Scrum Master as a Impediment Remover
  1. Respect the self-organizing capability of the development team
  2. Creating environment where Development Team feel safe to raise impediments
  3. Understand the meaning of “Impediment”
  4. Don’t wait until the Daily Scrum
  5. Improve transparency by using the Impediment board
  6. Be bold and creative in removing impediments
Scrum Master as a Change Agent
  1. Creating an environment that allows the spirit of Scrum to thrive
  2. Leading and coaching the organization in its Scrum adoption
  3. Helping employees and stakeholders understand and enact Scrum development
  4. Causing change that increases the productivity of Scrum Team
  5. Working with other Scrum Masters to increase the effectiveness of Scrum in the organization
  6. Planning Scrum implementation within the organization
Scrum Master Service to the Product Owner
  1. Finding techniques for effective Product Backlog management.
  2. Helping the Scrum Team understand the need for clear and concise Product Backlog items.
  3. Understanding product planning in an empirical environment.
  4. Ensuring the Product Owner knows how to arrange the Product Backlog to maximize value.
  5. Understanding and practicing agility.
  6. Facilitating Scrum events as requested or needed.
Scrum Master Service to the Development Team
  1. Coaching the Development Team in self-organization and cross-functionality.
  2. Helping the Development Team to create high-value products.
  3. Removing impediments to the Development Team’s progress.
  4. Facilitating Scrum events as requested or needed.
  5. Coaching the Development Team in organizational environments in which Scrum is not yet fully adopted and understood.
Scrum Master Service to the Organization
  1. Leading and coaching the organization in its Scrum adoption.
  2. Planning Scrum implementations within the organization.
  3. Helping employees and stakeholders understand and enact Scrum and empirical product development.
  4. Causing change that increases the productivity of the Scrum Team.
  5. Working with other Scrum Masters to increase the effectiveness of the application of Scrum in the organization.
Scrum Team

It is the team which works for SDLC of the application. This team includes developers, testers, technical lead, product owner and scrum master. Scrum Teams deliver products iteratively and incrementally, maximizing opportunities for feedback. 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.

  1. They are self-organizing. No one (not even the Scrum Master) tells the Development Team how to turn Product Backlog into Increments of potentially releasable functionality;
  2. Development Teams are cross-functional, with the skills as a team necessary to create a product Increment;
  3. Scrum recognizes no titles for Development Team members other than Developer, regardless of the work being performed by the person; there are no exceptions to this rule;
  4. Scrum recognizes no sub-teams in the Development Team, regardless of domains that need to be addressed like testing or business analysis; there are no exceptions to this rule.
  5. Individual Development Team members may have specialized skills and areas of focus, but accountability belongs to the Development Team as a whole.
Product Owner

A Product Owner drives the product from business perspective and is the one who decides and defines requirements, prioritize their values and release dates. Product owner is also involved in iteration planning and release planning meetings.

  1. Clearly expressing Product Backlog items;
  2. Ordering the items in the Product Backlog to best achieve goals and missions;
  3. Optimizing the value of the work the Development Team performs;
  4. Ensuring that the Product Backlog is visible, transparent, and clear to all, and shows what the Scrum Team will work on next;
Artefacts
Sprint Backlog
  1. Sprint backlog consists of the selected product backlog items and a plan to deliver them.
  2. Selected Product Backlog items are often decomposed.
  3. Work for the Sprint emerges.
  4. Development team members sign up for work, they aren’t assigned.
  5. Development team members may modify the Sprint Backlog anytime, as they see fit.
Product Backlog

The product backlog is a list of all the product features generally defined by “user stories”. User stories define everything potential users want to do on the site. There are many tools to keep track of your project backlog, both analogue and digital options.
After all user stories are created, they are ranked based on the priority and grouping on the stories. Grouping is done based on the inter-dependencies of the stories

Events
Sprint

Agile projects are broken down into small, consistent time intervals. These intervals are referred to as sprints.
Sprints are time-boxed iterations that serve iterative-incremental development.

  1. All development is done within a sprint
  2. A Sprint contains the time-boxed scrum events
  3. A Sprint is one month or less, and it is best to have a consistent duration
    1. Sprint length is determined by acceptable planning horizon
  4. Scrum known no phases, only Sprints
    1. No testing, hardening, release, analysis Sprints
The entire point of Scrum is to create a Done increment

A sprint has a time duration of 1 – 3 weeks depending on the extent of the overall project. Before each sprint, there is a sprint planning meeting. This meeting determines what the goals are for that sprint. Based on the team velocity, a set of features are pulled from the top of the backlog. During the sprint, no features are added, and the sprint goals don’t change

Sprint Planning

This is the first meeting of every sprint and the amount of work which can be achieved in the sprint is decided in this meeting depending on the team velocity. User stories are assigned to the dedicated team as per the requirement and analysis.

 

Daily Scrum

Every morning of the sprint the project team gets together for a short (under 15 minute) meeting. This meeting takes place at the same time every day and includes everyone on the project.

  1. 15-minute time-box daily event.
  2. Consistent place and time.
  3. Development team inspects their progress toward the Sprint goal
  4. Development team creates a plan for the next 24 hours.
  5. Not a problem-solving meeting.
  6. Not a status meeting.

Each person on the team is tasked to answer 3 simple questions:

  • What did you do yesterday?
  • What you are going to do today?
  • Any blockers or dependencies in your way?
Sprint Review/ Retrospective Meeting

At the end of every sprint, A Sprint Retrospective meeting takes place with a functional demo of the user stories that has been completed during the sprint. The sprint review meeting brings together the project team and other project stakeholders like the client to present the work that was completed.

  1. Scrum Team inspects how the last sprint went
    1. People, relationships, process, tools
    2. Definition of “Done”
  2. Scrum team selects actionable improvements for implementation in next Sprint.
Scrum events quick reference

Event

Inspection Adaptation Who Attends

Time-box for 1 Month

Sprint Planning Product Backlog Sprint Goal, Forecast, Sprint Backlog Scrum Team 8 hours
Daily Scrum Progress toward sprint goal Sprint Backlog

Development Team

15-minutes (always)
Sprint Review Increment, Sprint, Product Backlog Product Backlog Scrum Team Stakeholders 4 hours
Sprint Retrospective Sprint Actionable and committed improvements Scrum Team

3 hours

 

Sling Dynamic Include (SDI): Dynamically Include Page Components

Sling Dynamics Include in AEM

In CQ or AEM, most of the pages remain static. Hence, caching of the pages is very useful with dispatchers or any other available AEM plugins/connectors. Imagine a scenario where homepage of news agency must show the hot news which is different for different regions, however, because of caching it is displaying the same news in all the regions. Strange! To rescue from these, live scenarios, the application may require certain elements/components of the page to be dynamically included. In AEM, Sling Dynamic Include (SDI) provides this functionality.

 

Let’s elaborate SDI integration with AEM 6.4, Dynamic Include 3.0.0 and Dispatcher 2.4.

 

Please note that Step 1 and Step 2 need to be performed on publish instance.

 

Step 1:

 

Install Sling Dynamic Include Bundle using the following steps:

  1. Download the Dynamic Include bundle.
  2. Open the bundles using http://<host>:<port>/system/console/bundles
  3. Click on install/update button in the right corner of the screen

      4. Check the Start Bundle checkbox and browse the location where the bundle is downloaded and Click on install/update button

Once the installation of the bundle is completed, verify it by searching Dynamic Include. It should be in an active state.

Step 2:

 

After installation of the SDI bundle, the next step is to configure the component to be dynamically included.

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0"xmlns:cq="http://www.day.com/jcr/cq/1.0"
    xmlns:jcr="http://www.jcp.org/jcr/1.0"xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
    jcr:primaryType="sling:OsgiConfig"
    include-filter.config.enabled="{Boolean}true"
    include-filter.config.path="/content"
    include-filter.config.resource-types="[my-app/components/content/dynamic_included_component]"
    include-filter.config.include-type="SSI"
    include-filter.config.add_comment="{Boolean}false"
    include-filter.config.selector="nocache"
    include-filter.config.ttl=""
    include-filter.config.required_header="Server-Agent=Communique-Dispatcher"
    include-filter.config.ignoreUrlParams="[]"
    include-filter.config.rewrite="{Boolean}true"
/>

Please find below the brief description of each OSGI config used above:

  • enabled – set it to true to enable SDI.
  • path – SDI configuration will be enabled only for this path.
  • resource-types – which components should be replaced with tags
  • include-type – type of include tag (Apache SSI, ESI or Javascript)
  • Apache SSI – Apache Server Side Includes

Apache HTTP Server is set up as a caching proxy in front of the AEM. This means that the include will be done by the http server and not by the sling engine.

  • ESI – Edge Site Includes

Edge Site Includes can be used as an alternative to SSI, it is evaluated by CDN. ESI has to have some proxy that is able to process its tags and often made available as part of CDN.

  • JavaScript – Ajax

Using JSI will replace dynamic components with ajax tags, so they are loaded by the browser. If included component has some JS code, it may not work properly, as it won’t be initialized immediately after a page is loaded.

  • Add comment – adds debug comment: <!– SDI include (path: %s, resourceType: %s) –> to every replaced component.
  • Filter selector – selector added to HTTP request for particular component and is used to get actual content.
  • TTL – time to live in seconds, set for rendered component. This property is supported for dispatcher version 4.1.11+
  • Required header – SDI will be enabled only if the configured header is present in the request. By default it’s Server-Agent=Communique-Dispatcher header, added by the AEM dispatcher. You may enter just the header name only or the name and the value split with =.
  • Ignore URL params – SDI normally skips requests containing any GET parameters. This option allows to set a list of parameters that should be ignored.
  • Include path rewriting — enable rewriting link (according to sling mappings) that is used for dynamic content including.

 

Step 3:

 

After completion of Step 1 and Step 2 on publishing instance, Dispatcher configurations need to be updated as explained below:

1. Include(If already present, make sure uncommented) the mod_include module in Apache Web server’s httpd.conf file:

LoadModule include_module modules/mod_include.so

2. Update virtual host configuration file

a. Find the following lines in the dispatcher.conf file

<IfModule dispatcher_module>
	SetHandler dispatcher-handler
</IfModule>

modify as below

<IfModule dispatcher_module>
	SetHandler dispatcher-handler
</IfModule>
SetOutputFilter INCLUDES

b. Add Includes to Options directive:

<VirtualHost *:80>
...
<Directory />
				...
Options FollowSymLinks Includes  
AllowOverride None
...
		<Directory>
		...
</VirtualHost>

3.  Update the httpd.conf to enable SDI.

a. Add “Includes” to Options directive to enable SSI includes used by Sling Dynamic Include

b. Specify what file types are to be processed by Includes filter.

   <Directory /mnt/var/www/html>	
      ...
      Options Indexes FollowSymLinks Includes  
	... 
      AddOutputFilter INCLUDES .html 
	AddOutputFilterByType INCLUDES text/plain text/html
      ...
   </Directory>

4. Update rules.any or dispatcher.any depending where the cache rules are defined for the publish instance.

/0008 {
    		/glob "*.nocache.html*"
    		/type "deny"
  	}

Make sure the selector ‘nocache’ used here is same as defined in OSGI config (include-filter.config.selector = ‘nocache’) explained in Step 2.

5. Restart the server using any of the below commands:

sudo apachectl restart OR sudo service httpd restart

 

Verification

After setting up the SDI, it’s time to verify the changes. Follow the below steps:

 

  1. Right click and open the page source on the webpage where the component is dynamically included.
  2. In the page source, search for SDI includes tag.
  3. A component configured for SDI will be replaced with SDI tags as shown below:

Permission Sensitive Caching (PSC)

Permission Sensitive Caching

In AEM, we have both secured pages as well as public pages. Dispatcher provides the capability to cache all the pages but dispatcher doesn’t know about secured or un-secured pages, so it serves all the pages to an Anonymous user. To get rid of this problem, dispatcher needs to know whether a page is to be served to a particular user. In AEM, Permission Sensitive Caching(PSC) provides this functionality which enables you to cache secured pages. Dispatcher checks user’s access permissions for a page before displaying the cached page.

So, when any request comes to the dispatcher, it hits an AEM servlet to check the user permission.

 

Let’s elaborate PSC integration with AEM 6.4 and Dispatcher 2.4.

Step 1: Dispatcher configurations need to be updated as explained below:

a. Add this code in publish-farm :

/auth_checker
  {
  # request is sent to this URL with '?uri=<page>' appended
  /url "/content.pagePermission.getPermission"    
  # only the requested pages matching the filter section below are checked, all other pages get delivered unchecked
  /filter
    {
    /0000
      {
      /glob "*"
      /type "deny"
      }
    /0001
      {
      /glob "/content/we-retail/secure-pages/*.html"
      /type "allow"
      }
    }
  # any header line returned from the auth_checker's HEAD request matching the section below will be returned as well
  /headers
    {
    /0000
      {
      /glob "*"
      /type "deny"
      }
    /0001
      {
      /glob "Set-Cookie:*"
      /type "allow"
      }
    }
  }

Brief description about dispatcher configuration:

  • URL: The URL of the servlet that performs the security check.
  • filter: To specify specific folders on which permission sensitive caching is applied.
  • headers: Specifies the HTTP headers that the Authorization Servlet includes in the response.

b. Also, make sure allow Authorized is set to 1 under the cache configuration.

/cache
{
 ...
 allowAuthorized “1”   
 ...
}	

Note: Any page path which matches the PSC filters, the dispatcher will hit AEM servlet before serving the page from cache, so wisely define filters because network calls increase on each page hit.

 

Step 2: Now we must create a servlet in AEM which will check if the resource or page is authorized or not for the user who requests the web content and sends response Header.

Below is the Java Servlet to which dispatcher sends HEAD request :

import java.security.AccessControlException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
/**
* This servlet will validate that the requested page uri is accessible or not and then accordingly set the response header.
*
*/
@Component( service = Servlet.class,
property = { sling.servlet.methods= "HEAD", sling.servlet.resourceTypes = "sling/servlet/default” sling.servlet.selectors = {"pagePermission"}, sling.servlet.extensions = {"getPermission"})
public class AuthcheckerServlet extends SlingSafeMethodsServlet {
 
  /** The Constant LOGGER. */
  private static final Logger logger = LoggerFactory.getLogger(AuthcheckerServlet.class);
 
  /**
   * Method to handle the HEAD request for the servlet.
   * 
   * @param request - The request object.
   * @param response - The response object.
   *
   */
  @Override
  public void doHead(SlingHttpServletRequest request, SlingHttpServletResponse response) {
      logger.debug("Start of doHead Method");
      // retrieve the requested URL
      String uri = request.getParameter("uri");
      uri = uri.replace(HTML, EMPTY);
      // obtain the session from the request
      Session session = request.getResourceResolver().adaptTo(javax.jcr.Session.class);
      if (session != null) {
        try {
     // perform the permissions check
        session.checkPermission(uri, Session.ACTION_READ);
        response.setStatus(SlingHttpServletResponse.SC_OK);
      } catch (AccessControlException | RepositoryException e) {
          response.setStatus(SlingHttpServletResponse.SC_FORBIDDEN);
        }
      }
      else {
        response.setStatus(SlingHttpServletResponse.SC_FORBIDDEN);
      }
      logger.debug("End of doHead Method"); 
  }
}

 

Step 3: Restart the dispatcher and you are all set up.

 

Verification

To check if the Permission sensitive caching is working or not, goto dispatcher.log file, this message must be present there:

AuthChecker: initialized with URL ‘configured_url‘.

 

To Check the AuthChecker Servlet response, hit the following curl command:

  1. Without Authentication

curl –head http://publishserver:port/content.pagePermission.getPermission?uri=/content/we-retail/secure-pages/pageName.html

Response:

HTTP/1.1 403 Forbidden
Date: Tue, 04 Sep 2018 09:38:31 GMT
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Content-Length: 0

2. With Authentication

curl –head http://publishserver:port/content.pagePermission.getPermission?uri=/content/we-retail/secure-pages/pageName.html –user username: password

Response:

HTTP/1.1 200 OK
Date: Tue, 04 Sep 2018 09:42:19 GMT
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Content-Length: 0