January 16, 2025

"Intermittent Bugs": How to deal with it?

Introduction:

An intermittent bug refers to a bug that exists in the application but is difficult to reproduce. 
This means that if you execute the same task twice, the behavior may differ each time. 
It does not appear consistently, making debugging a herculean task. Any complex system or application, regardless of the underlying technology, may have intermittent bugs.

Techniques to troubleshoot th intermittent bugs:

1. Document the bug by recording detailed information such as steps to reproduce, expected vs. actual results, error messages, and environment details to assist in troubleshooting and future reference: 

Create a detailed bug report which should include the following details:
  • Title: Title of the bug should be short and self explanatory [What, When and Where].
  • Preconditions: Steps to get the environment ready for testing.
  • Description: A detailed description of the bug.
  • Application Details: Build number and environment details.
  • Devices: Mobile or other devices used for testing.
  • Repro: It should be represented as the ratio of the occurrence of the bug to the  total number of the times the issue was verified.
  • Steps: Proper steps to reproduce the bug.
  • Actual Result: What is the outcome of the steps?
  • Expected Result: What should happen?
  • Notes: Other insights related to bug behavior.
  • Bug Evidence: Clear video, image or screenshot.

2.  Reproduce the bug to analyze its behavior and identify the root cause:

The bug may have occurred due to various reasons, and identifying the cause is important. This could be due to environmental factors, browsers used, or devices involved. Intermittent bugs can occur because of any of these reasons; therefore, identifying the root cause is essential for effective analysis.
It is good to think from an end user perspective while testing.
 

3.  Isolate the problem to narrow down the potential causes and simplify the debugging process:

It is always beneficial to break down a complex system into smaller, more manageable parts, as this helps identify the root cause more effectively.

4.  Use debugging tools to analyze the issue and gather detailed information about the bug: 

Debugging tools like IDEs like Visual Studio, Eclipse, Standalone debuggers like GDB, Logging utilities etc. are available. These tools can help capture additional information about the bug.

5.  Check the test environment to ensure it matches the production setup and is free from configuration issues: 

Check for external factors such as network issues, system load, or third-party dependencies. External environmental factors, such as network issues, server load, or third-party service availability, can significantly impact the performance and behavior of the application and should be thoroughly assessed during troubleshooting

6.  Use version control to track changes in the code and ensure consistency across different environments:

Use the correct code version to eliminate any confusion. There should be no ambiguity between the development and production environments.

7.  Collaborate with team members to leverage their expertise, share insights, and collectively identify the root cause of the issue:

A collaborative approach always leads to better perspectives, which can help in identifying potential causes.

8. Conduct code reviews to ensure code quality, identify potential bugs, and improve overall system reliability through collaborative feedback:

The code should undergo a thorough review by experienced developers. This will be helpful in eliminating coding level issues.

9.  Perform regression testing to ensure that recent changes or fixes have not introduced new issues or affected existing functionality:

Make a regression plan for the modules, which should run automatically whenever any code changes are done. This would help us to catch any bug at early stage before they disappear or shows intermittent behavior.

10.  Implement monitoring and alerting systems to detect and notify you of any issues in real-time, ensuring timely resolution of problems:

We can implement a monitoring and alerting system in the production environment. This can provide valuable insights into the bug's frequency and the conditions under which it occurs.

11. Keep records of bugs, fixes, and test results to track progress, identify recurring issues, and maintain a history for future reference:

Each testing rounds should be recorded for future reference. Patterns in the bug's behavior might help to point out its cause.

12. Conduct periodic defect checks to regularly evaluate the system for potential issues, ensuring that new bugs are identified early and existing ones are resolved promptly: 

There should be a periodic cadence to revisit the application and test it thoroughly. The cadence for testing can be determined based on the interdependency between modules. The higher the interdependency, the shorter the gap between cadences.

13. Conduct Exploratory Testing: 

Everyday of at least 30 min of exploratory testing by experienced testers could be helpful to eliminate intermittent bug occurrence. Exploratory testing can help to determine edge-case scenarios and negative scenarios that may lead to intermittent bugs.

14. Determination and patience are essential in debugging, as solving complex issues often requires time, thorough investigation, and continuous effort:

Sometimes occurrence of intermittent bug might be a frustrating affair. So patience is the key.

Intermittent bugs may not occur consistently, but when they do, they can disrupt the normal functioning of the application. Resolving these bugs ensures a more robust system or application.


January 2, 2025

Navigating the Start of Projects: Choosing the Right Path and Estimating Success

A new project has arrived on the table. The client’s requirements are ambitious, and the stakes are high. The first crucial decision awaits: choosing the right approach to guide the project to success.

As we begin the evaluation, it becomes clear that the initial choice between methodologies will set the tone for the project’s journey. Should we follow a predictive, structured framework with meticulously planned milestones? Or is an adaptive approach more suitable, allowing flexibility and evolution with changing requirements? Let’s explore these choices and how they influence the process of estimation.


The Crossroads: Predictive vs. Adaptive

The Predictive Path (Waterfall): Charting a Clear Course

If we imagine embarking on a journey where every step is preplanned, the predictive approach - often referred to as the waterfall model - relies on thorough upfront planning, clearly defined requirements, and a step-by-step execution process. It’s like navigating with a detailed map, where the destination is known, and the path is fixed. This method works well for projects with:

  • Stable and well-defined requirements.
  • Minimal likelihood of changes.

For example, if we were developing a payroll management system for an organization with fixed requirements and regulatory compliance, a predictive approach could ensure accurate delivery within defined timelines.

The Adaptive Route (Agile): Navigating the Unknown

Now, if we consider the adaptive approach, it’s like using a dynamic GPS that adjusts the route based on factors such as traffic conditions, unexpected roadblocks, or even a change in destination. Agile methodologies - Scrum, Kanban, or Lean - allow us to adapt swiftly to new information, priorities, and challenges. Instead of detailed blueprints, the focus is on iterative progress and incremental value delivery. This method is a good fit for:

  • Projects with evolving goals.
  • Uncertain or volatile environments.
  • Continuous user feedback shaping the end product.

For instance, if we were building a Generative AI-powered Content Creation Platform, where user needs for personalized writing styles, support for new languages, and integration with evolving tools like image or video generation are continuously changing, an adaptive approach would allow iterative enhancements based on real-time feedback and emerging AI advancements.

When to Choose What?

Scenario Predictive Adaptive
Requirements are well-defined
Requirements are evolving
Stakeholders need fixed timelines
Stakeholders expect collaboration
Innovation and uncertainty exist


Estimation Challenges in Both Paths

Both predictive and adaptive approaches come with unique estimation challenges:

In Predictive Projects

  • Initial Precision: Every phase’s cost, time, and resource requirements need to be estimated upfront. Inaccurate estimates can lead to delays and budget overruns.
  • Risk Assessment: Anticipating potential obstacles and including contingencies in the plan can be vital.


In Adaptive Projects

  • Dynamic Planning: Estimates evolve with each iteration, requiring continuous recalibration.
  • Measuring Velocity: Tracking the team’s pace of work helps refine future estimations.


Exploring Estimation Techniques

For Predictive Projects

  • Bottom-Up Estimation: This method involves breaking the project into smaller tasks, estimating each one, and aggregating the totals. It is highly accurate but can be time-intensive, making it a great option for detailed planning phases.
  • Analogous Estimation: This technique relies on historical data from similar projects to make predictions. For instance, if a previous project with similar scope and complexity took six months to complete, it can serve as a reference point. While quick and efficient, this approach may lack precision, making it more suitable for early-stage planning.
  • Other Techniques: There are additional approaches, such as:
    • Parametric Estimating: Uses statistical models based on variables, like cost per line of code, for predictions.
    • Single-Point Estimating: Provides one fixed estimate, which might oversimplify and add risks.
    • Three-Point Estimating: Considers optimistic, pessimistic, and most likely scenarios to create a balanced estimate. This can help in managing uncertainties.


For Adaptive Projects

  • Affinity Estimating (Story Points): Tasks are grouped based on complexity or effort and assigned relative points. This collaborative approach allows for quick estimation while leveraging team consensus.
  • T-Shirt Sizing: Tasks are classified into sizes such as XS, S, M, L, and XL based on their complexity. This method is helpful in the early stages when tasks need broad categorization for planning.
  • Planning Poker: A gamified method where team members simultaneously share their estimates using cards. This fosters collaboration and helps refine discrepancies, often leading to more accurate estimates.


Conclusion

Starting a project often involves navigating through a range of decisions, and choosing the right methodology is one of the most critical steps. Both predictive and adaptive approaches have their merits, and sometimes a blend of both can address specific project needs effectively.

Ultimately, the key for us is to align the methodology with the project’s characteristics and use the right estimation techniques to set realistic expectations. With thoughtful consideration and collaboration, a project can move closer to its goals, step by step.

If you have any questions you can reach out our SharePoint Consulting team here.

December 26, 2024

Setting Up Approvals in SharePoint Lists: A step-by-step Guide

Introduction:
SharePoint offers a robust out-of-the-box approval workflow for its lists, enabling efficient and controlled document and task management. This blog post will guide you through the process of setting up and utilizing this powerful feature.

Setting Up List Approvals:

1. Create a New List:
          a. Navigate to your SharePoint site's "Site Contents" page.

          b. Click "Add a list" and select "Blank List".
         

          c. Give your list a suitable name (e.g. "Approval List").

          d. Create necessary columns (e.g. "Leave Type", "Description", "Start Date", "End Date").
          

2. Enable Approvals

        a. In the list ribbon, click "Automate" and then "Configure Approvals".
        

        b. Toggle the "Enable Approvals" switch on and click on "Apply".
        

        c. This action automatically adds an Approval Status column to your list, tracking the stage of                            each approval.
        

Creating a New Item to Test the Approval Request:

1. Create a New Item: 

        a. Click on "New" to add a new item to your list.

        b. Fill in the required details (e.g. leave type, description).
        

        c. The "Approval Status" will automatically be set to "Not Submitted".
        

2. Submit for Approval Request: 

        a. Click on the "Not Submitted" Status.

        b. In the pop-up, select the Approver's Name(s) using the People picker and Add any additional                           comments or details, then click "Submit" to send the item for approval.
         

3. Monitor Approval Status:  

        a. After a few minutes, the Approval Status will be changed from Not Submitted to Requested.
        

        b. You can check the status of the approval at any time from the list.

4. Enable Approval Notifications in Microsoft Teams:  

        a. To receive approval notifications in Teams, add the Approvals app.

        b. Open Teams, click on the three dots(...) search for Approvals, and click Add.
        

        c. This integration enables you to receive real-time notification for approval actions in Teams. 

5. Understanding Approval Actions:  

        a. When an item is submitted, the status changes to Requested. At this stage, approvers can view                    the item's approval history and choose from several actions:

        b. Approval using SharePoint:
        

        c. Approval Process using Teams:
      

                i. Approve: Click he "Approve" button to approve the request.

               ii. Rejected: Declines the request, updating the Approval Status to Rejected.

              iii. Cancel Request: Withdraws the request, resetting the Approval Status to No Submitted.

              iv. Follow Up: Click the "Follow Up" button to send a reminder or query to the requester.

               v. Reassign: Transfer the approval responsibility to another person, ensuring approvals are                                                        handled even if the original approver is unavailable. 

6. Checking Approval History:  

        a. Each item in the list retains a history of actions, which includes who approved, rejected, or                                  reassigned the item.
        

7. Save Approval History as PDF: 

        a. Once a request is completed, you can save the approval record as a PDF for documentation                                purposes.
        


8. Additional Submissions:

        a. You can submit new requests or resubmit previously canceled requests, creating a flexible                                 approval process where items can be reassigned or resubmitted as needed.

Understanding the Approval Process:

        - Initial Status: "Not Submitted"

        - Pending Approval: "Requested"

        - Approved: "Approved"

        - Rejected: "Rejected"

        - Canceled: "Not Submitted"

Pros and Cons of SharePoint List Approvals:

Pros:

        - Simplified Workflow: Simplifies the approval procedure.

        - Easy Setup: No complex setup or external tools are required; the entire process is available                                        within SharePoint's Automate menu.

        - Enhanced Control: Centralized management of approvals.

        - Improved Visibility and Tracking: Real-time tracking of approval status. The Approval Status                                   column and history racking make it easy to monitor the status of each request.

        - Efficient Collaboration: Facilities timely decision-making.

        - Enhanced Security: Ensures authorized access and control.

        - Reassign and Follow-up Options: These features increase flexibility, ensuring requests are not                                 left unattended.
Cons:

        - Limited Customization: Basic approval workflow may not suit complex scenarios.

        - Dependency on SharePoint: Requires SharePoint access for approval management.

        - Approval Logic: There's limited support for custom approval logic, such as multi-level or                                             conditional approvals.

        - Notification Delays: There may be delays in notifications for approval actions in Teams,                                                impacting immediate responses.

        - Steeper Learning Curve: Initial setup and configuration can be time-consuming.


Additional Tips:

        - Clear and Concise Descriptions: Provide detailed explanations for approval requests.

        - Timely Responses: Promptly review and respond to approval requests.

        - Effective Communication: Use clear and concise language in comments and notifications.

        - Leverage Teams Integration: Utilize Teams for real-time collaboration and notifications.

        - Customize Approval Workflows: For more complex scenarios, consider using Power Automate                                to create custom workflows.


Conclusion

SharePoint's out-of-the-box list approval process is a practical solution for straightforward approval needs, particularly for organizations already using SharePoint and Microsoft Teams. While it lacks the customization of more advanced workflow solutions, it is efficient and well-integrated within Microsoft 365, providing essential functionality to streamline approvals.


By following these steps and leveraging the pros of SharePoint List Approvals, you can significantly improve your organization's efficiency and productivity.


If you have any questions you can reach out our SharePoint Consulting team here.