About Hike
Hike Messenger, also referred to as Hike Sticker Chat, was an all-in-one Indian application known for its instant messaging (IM) and Voice over IP (VoIP) services. Launched on December 11, 2012, by Kavin Bharti Mittal, it is currently owned by Hike Private Limited. Hike operated offline through SMS and employed a standard one-time password (OTP) authentication process for user registration. With over 100 million registered users, Hike was valued at approximately $1.4 billion.
Objective
Our collaboration with Hike was driven by a set of well-defined objectives aimed at enhancing various facets of their software development process.
- Increasing Developer Productivity: We aimed to help developers work faster and better.
- Reducing Delivery Time: Our goal was to finish projects more quickly.
- Increased and Enhanced Feedback Loop to Developer Team: We wanted to make it easier for developers to get feedback and learn from it.
- Reduce Cost of Development: We looked for ways to save money in the development process.
- Improve the Quality of Product: We aimed to deliver higher-quality software.
By aligning our efforts with these objectives, we were able to not only meet but exceed the expectations of the team, delivering tangible results and driving significant improvements across various aspects of their software development lifecycle.
Challenges
As we began with our deliverables, several challenges emerged, each requiring strategic navigation for successful outcomes
- Cultural Shift: We encountered the necessity to develop a cultural shift within the tech environment, transitioning from conventional methodologies to a ‘shift left’ approach. This required concerted efforts to change mindsets and practices across the organization.
- Cost: Initially, the prospect of additional costs loomed due to the heightened efforts required for implementation. However, we recognized that these investments were essential for driving long-term improvements in productivity and efficiency, ultimately leading to cost savings in the future.
- Tech Stack Overhaul: A significant challenge involved the overhaul of the existing tech stack to ensure it was modern, automated, and streamlined. This demanded intensive work to revamp processes and infrastructure, aiming for optimization and enhanced performance across the board.
Testing Strategy
Introducing the Concept of Test Pyramid
- Tests at lower layers are cheaper to write, easy to maintain, and provide faster feedback to developers
- Tests at the upper Layer are expensive to write and maintain and provide slower feedback to developers
- Encourage Exploratory testing since most of the functionality is automated
- Helps in avoiding disconnected development and QA environment and teams.
The test pyramid, indeed, is a concept in software testing that illustrates the ideal distribution of different types of tests in a pyramid shape, with the most fundamental and broad tests at the base, and more specialized and narrower tests at the top
Tabular explanation:
0
Type | Tool | Who | Level | Objective |
Unit | Xunit, Roboelectric, XCTest, Mockito | Developers | classic | Each Class function works perfectly in Isolation UI logic can also be tested here. |
Biz Logic Acceptance Test | Roboelectric , Espresso | Developers + Testers | Feature Business Specific Tests | From Business Logic Point of View Feature is implemented correctly and works in isolation with other Components |
Integration | xUnit , Roboelectric , XCtest | Developers + Testers | Between components | 2 components can communicate with each other correctly best suited for negative path testing |
Workflow | Espresso, Mockito | Developers + Testers | Between Multiple components | A feature workflow works completely end-end with all upstream and downstream dependencies Mocked |
E2E | Espresso , XCUI | Testers | End-End Trade flows | Ensure a Business Operation can go through all steps successfully, |
Snapshot/ Visual Testing | Sikuli , Applitools | Testers | Screen Comparison | Verify Screen display on devices, check for pixelation and out of screen issues. Verify the app visually |
Continuous Integration
Continuous Integration (CI) is a development practice where developers regularly integrate their code changes into a shared repository, often multiple times a day.
CI is essential because it:
- Detects issues early.
- Improves code quality.
- Provides fast feedback.
- Facilitates collaboration.
- Enables continuous delivery.
At hike, we achieved this by:
- Developing a centralized Build Server.
- Introducing Inverted Test Pyramid
This is how it looked in real-life implementation:
Static Code Analysis (SCA)
Introducing Static Code Analysis enabled us to:
- Detect Areas for Refactoring and Simplification: By analyzing the codebase statically, we could identify areas that needed refactoring and simplification, allowing us to improve code maintainability and readability.
- Identify Code Smells: Static Code Analysis helps us pinpoint code smells, such as duplicated code, overly complex logic, or potential bugs, enabling us to address them proactively and maintain high-quality code standards.
- Maintain High-Quality Code: We were able to uphold high standards of code quality throughout our development process, ensuring the reliability, scalability, and maintainability of our software products
Continuous Delivery
Continuous Delivery (CD) is a software development practice that automates the process of delivering code changes to production environments. It involves automating build, test, and deployment processes to enable frequent and reliable releases.
Automated Monitoring
Implemented Automated Monitoring for the application, which involved tracking various key metrics to ensure the app’s performance and user experience remained optimal. These metrics included:
- Application Crash Alert: Formulated a method to incorporate the number of users, crashes, and sessions to detect and alert on application crashes promptly.
- Play Store and Social Media Sentiment Analysis: Conducting sentiment analysis on feedback received from the Play Store and social media platforms for each release, providing insights into user sentiment and satisfaction.
- Key User Engagement Metrics: Monitoring key user engagement metrics to gauge user interaction and satisfaction with the app.
App Performance Metrics: Tracking app performance metrics such as app launch time, activity loading time, and end-to-end latencies to ensure smooth and responsive user experiences.
Overcoming Challenges:
To address the challenges faced during the implementation of Automated Monitoring, we devised strategic solutions tailored to each obstacle:
- Cost: We saved CI resources by prioritizing tests based on their criticality and impact on application functionality, along with implementing a streamlined CI strategy to optimize resource utilization.
- CI Execution Time: We significantly reduced CI execution time by leveraging powerful tools such as Firebase, Sauce Labs, Robustest, and AWS. These tools allowed for parallel testing, distributed testing, and efficient resource management, resulting in faster feedback cycles.
- Device Selection: To ensure comprehensive device coverage while minimizing costs, we established an in-house device lab and supplemented it with services like Robustest. This approach enabled us to test across a wide range of devices and platforms while maintaining control over testing environments and reducing dependency on external resources.
Our work with Hike has led to great results, like making developers more efficient, introducing automated monitoring and continuous delivery, and other relevant optimizations. Even though we faced challenges, we stayed focused on being innovative and excellent.