How we improved the process of Code and Functional Reviews

Code reviews are important to deliver quality and well-crafted software. But what if the PR lingers in the review queue waiting for reviewers for an extended period? We faced a similar issue in one of our team where few stories were delayed due to pending reviews from the members. In this article, I would like to share about how we improved the Code and Functional Review process resulting in high quality and happiness. *This process was identified and implemented for one of the projects and every project could have minor customization based on the nature and requirement of the project.

Server-Side Rendering : Summarized

In Web Development, one of the core decisions developers have to make is to decide where to implement rendering in their application. The two most common rendering techniques are Client-Side Rendering: renders web page on the browser Server-Side Rendering: renders web page on the server Let's understand both the techniques in detail. Server Side Rendering VS Client Side Rendering: Before understanding both the techniques, let's get familiar with the following two important Performance Metrics: First Contentful Paint (FCP): This metric measures the time from when the page starts loading to the time when any part of the page's content is

An issue we resolved with UiAutomator to locate UI elements in Appium for Android apps

Automation testing is an integral part of any successful product development. We also discussed it in our previous blog on Jenkins. While architecting, developing, and scaling a large USA based SaaS product, having multiple apps (both web & mobile), we automated testing for one of the mobile application using Appium too. In this article, I would like to share a specific challenge we faced with Appium and UiAutomator and how we resolved it. Setup with Appium v1.15.1, Emulator v30.0.5 & UiAutomator 1We installed required software, i.e. Appium, sdkmanager command line tool, Emulator, etc. Appium -

Scrum & OKR - The Fraternal Twins

What Traditional goal-setting is to the Performance Management System, Waterfall methodology is to the SDLC (Software Development Life Cycle). Well, these are passé! Today all IT professionals swear by the Agile methodology because it highlights the most important phenomenon of life i.e. ADAPTABILITY TO CHANGE. Agile & Agile Goal Setting 🔁Agile software development is the oxygen to disciplined product development & project management, it revolves around the idea of ‘Iterative development’. Where the focus is on People over Process, Cross-functional team over Specialists, Priority over Plan, Collaboration over Centralization. Ever thought about grabbing the components of Agile and placing

Speed up time-sensitive database process in Rails applications using a Connection pool, Threads, and Arel

Sometimes dealing with DB processes in a Rails application consume a lot of time. Often there are a bunch of small and simple DB queries that go endless. For example, bulk insertions or bulk updates in tables. Dividing it into various background jobs is an idle solution. In a few scenarios, we can't prefer background jobs e.g. the change you apply, makes the existing data invalid. In this article, we will see how to complete a large set of DB queries under minutes which would otherwise take hours if not optimized. It's a better practice to create a rake

How to implement CI/CD for Android apps using Azure Pipeline

Continuous Integration(CI) and Continuous Deployment(CD) play an essential role, especially when working in a team. In our project, we are following Agile methodology & we do multiple releases during the week. To ensure that the build is generated without any error, CI/CD proves advantageous. "There should be two tasks for a human being to perform to deploy software into a development, test, or production environment: to pick the version and environment and to press the “deploy” button." David Farley For every feature, we create a separate pull request. Every time on commit, CI automatically triggers

Adding Two-Factor Authentication(2FA) to ActiveAdmin auth in a Ruby on Rails web application

To enhance the security of a web application having a user authentication workflow, we use a security method called 2FA. It is also known as Two Factor Authentication(type of Multi-Factor Authentication). In this blog post, we will see how to implement email-based 2FA in ActiveAdmin auth of a Ruby on Rails application. In the email-based 2FA approach, when logging in with an email and password, an OTP will be sent on a registered email address. Upon entering the OTP, it will successfully authenticate and the session will be started. Also, we will see the following additional functionality and customizations

Identifying and avoiding Tautological tests in Ruby on Rails applications

Writing unit tests is more of an art than a skill, and understanding what to test for comes with experience and/or mistakes. We look for the percentage of test coverage for examining the health of an application. However, the "coverage percentage" might be misused or overlooked. In particular, it falls victim to Goodhart’s law, which says: “When a measure becomes a target, it ceases to be a good measure”. Whenever we start writing test cases for the sake of improving the code coverage, we miss the whole point of testing and rather introduce Tautological Tests - poorly designed

What inspires me at work? A candid chat with Karan Valecha.

Karan Valecha believes that the secret of great work, is the love you have for your work. In this chat, Karan shares about his experiences, learning and culture at Kiprosh.

Ruby's Global Scope is Not Really Global

Ruby does not have any entry point to the code it is executing. Compare that to other languages like C, C++, Java, etc., which has a main() method in some way. And this main() is the entry point to the code. But in Ruby, we can open a file with a .rb extension and write our code at the top-level like: foo = 'Great Scott!' puts foo # => Great Scott!... and Ruby will execute the file for us. You'll get introduced to this top-level scope as global scope throughout most tutorials. Even though the intention is correct, the terminology as