{"id":24784,"date":"2024-04-29T22:34:59","date_gmt":"2024-04-29T17:04:59","guid":{"rendered":"https:\/\/blogrevamp.cashfree.com\/?p=24784"},"modified":"2024-04-30T08:26:28","modified_gmt":"2024-04-30T02:56:28","slug":"accelerated-software-development-life-cycle-part-1","status":"publish","type":"post","link":"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/","title":{"rendered":"How we accelerated our Software Development Life Cycle (SDLC) &#8211; Part 1"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_81 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #005c31;color:#005c31\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #005c31;color:#005c31\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/#Overview\" >Overview<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/#What_were_we_trying_to_achieve\" >What were we trying to achieve?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/#Why_did_we_need_a_better_branching_strategy\" >Why did we need a better branching strategy?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/#Using_an_effective_Branching_Strategy\" >Using an effective Branching Strategy<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/#What_criteria_did_we_assess_in_formulating_our_branching_strategy\" >What criteria did we assess in formulating our branching strategy?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/#Types_of_Strategies\" >Types of Strategies<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/#GitFlow\" >GitFlow<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/#GitLab_Flow\" >GitLab Flow<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/#Github_Flow\" >Github Flow<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/#Trunk-based_development\" >Trunk-based development<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/#How_did_we_decide_our_Branching_Strategy\" >How did we decide our Branching Strategy?<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/#Trunk-Based_Strategy_Enforcing_code_reviews\" >Trunk-Based Strategy (Enforcing code reviews)<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/#Summary\" >Summary<\/a><\/li><\/ul><\/nav><\/div>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Overview\"><\/span><strong>Overview<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">At Cashfree Payments, we wanted a system where teams could seamlessly develop new features, test, and go live. This includes being able to work on multiple services, test the feature independently without interrupting or conflicting with other developers, have visibility and control over deployments, and hassle-free rollbacks.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_were_we_trying_to_achieve\"><\/span><strong>What were we trying to achieve?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Using an effective Branching Strategy<\/li>\n\n\n\n<li>Increasing visibility and control over the deployments<\/li>\n\n\n\n<li>Standardizing infrastructure components across environments<\/li>\n\n\n\n<li>Automation of new environment creation<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_did_we_need_a_better_branching_strategy\"><\/span><strong>Why did we need a better branching strategy?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We have over 100 microservices with close to 100 prod deployments every day. Often multiple developers work in the same service on different features. As our release timelines are shorter, we needed faster and more frequent deployments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We used to have dedicated branches for non-production environments. One of the major issues with this approach was a scenario where one developer merged the changes in the non-prod branch (say beta), and after testing some bugs were detected. There are 2 options here:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Keep the code in beta and fix the bugs, which means all other devs have to wait till all the bugs are fixed, and no one else can use the beta branch till then.<\/li>\n\n\n\n<li>Revert the code in beta, this is another pain point as in case of conflicts, code revert is not straightforward. Sometimes we have to revert by cherry-picking, and we all know how much of a headache it can be.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Hence, using dedicated branches per env was not a viable option. We needed to use a strategy that could resolve the above issues.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s deep dive into how we did that and improved our Software Development Life Cycle at Cashfree Payments. Read on for Part 1.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Using_an_effective_Branching_Strategy\"><\/span><strong>Using an effective Branching Strategy<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Branching Strategy helps developers to propagate the changes in their independent branches through a set of environments (Test, Stage, Sandbox, Production).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Every software development team needs a strategy when they use a version control system for managing the codebase. As the name suggests, the strategy focuses on how branches are used in the development process.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_criteria_did_we_assess_in_formulating_our_branching_strategy\"><\/span><strong>What criteria did we assess in formulating our branching strategy?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">An effective strategy is dependent on several factors such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Organisation\u2019s handling of the codebase\n<ul class=\"wp-block-list\">\n<li>At Cashfree Payments, we have 100+ microservices that have clear ownership across teams.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Number of developers &amp; frequency of deployments\n<ul class=\"wp-block-list\">\n<li>Every team has multiple developers often working in the same service on separate features simultaneously which means a high number of deployments per day, so extreme collaboration is needed while releasing individual features.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Environments used\n<ul class=\"wp-block-list\">\n<li>We have requirements for separate environments for Automation, Manual, and Stress testing.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Quality of Code\n<ul class=\"wp-block-list\">\n<li>Most features are developed independently, code changes are never merged without code reviews, and all the builds must go through quality checks.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Types_of_Strategies\"><\/span><strong>Types of Strategies<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The following are 4 most popular industry standards strategies:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"GitFlow\"><\/span><strong>GitFlow<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">GitFlow is a robust branching strategy that works well for large projects with long release cycles, but it can be complicated to set up and maintain. It also requires strict discipline around feature branch creation and merging the PRs.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/pUseq4B49h1aP6ZnPFTOuqG_gft3dI23OcTVJfEw6-kqAXiOuojSqZTkKjEJ7cUfTHc7ft-sihUAVdFFmaHvVWTfGyMws9RSYn1Qpe-dhNOzXh8l_wk4NuVv5QtEE1hxVIzbxPUvuiinDQj2vaOjG6s\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This strategy has dedicated branches per environment which doesn\u2019t fulfil our use case.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"GitLab_Flow\"><\/span><strong>GitLab Flow<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">GitLab Flow is preferred when we want to maintain multiple environments, have a separate branch, and thus separate builds for each environment. The code changes propagate through the environments synchronously and whenever the main branch is ready to be deployed, we can merge back into the production branch and release it.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/Ga-YfOWU8727ZPgS2Q-3rvdBiMXIU_bja-cjZ2V5Ke0oQKicChfFl6IXh7sD7ouILABLZZm4wfzaRo2X5zwYY-_qG9-Ysh22-sphWxPMEDLHDi3fkJVdoB5Ll1TUODf_0dgogeM0audMpin8dF7NP9E\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This strategy again has dedicated branches so we face the same limitation as GitFlow.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Github_Flow\"><\/span><strong>Github Flow<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">In this flow, we start with the master branch then developers create feature branches from it to isolate their work which are then merged back into the main. This strategy treats the steps of Deployment and Code Merge as an atomic operation that enables quick and complete rollback.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/JNFEPgJRCV-tr1NpP3U-Zebd9D73x7GCzvj_X8pfkVPvzbbE15A1yAQQNH56FwTnUWDaEMpq8Tr_aCMJ0X9qOEtH4TSpOy6XhGv_hx1VfbhdtbDsPCd3kUf8sZDyC6RP9N5OFHgki0PmQGbpfhnXYhs\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This strategy can be used but there are no steps to ensure that only reviewed and approved code is deployed.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Trunk-based_development\"><\/span><strong>Trunk-based development<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">This strategy is based on the concept of developers working on a shared trunk by creating feature branches similar to the GitHub Flow, but the major difference is that the code changes are merged before production deployment.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/JPQhTZJ2YRAXmvMzbO0EERGTrz-KCg1e043k4ooogMcxcSsVTsXb85ib1Nt7dmV8vmSh_pDJBLSSRzB86EeiPqsVAvU7JQhQOiUC1yd7cLBxBoJmMiDUaU4YcntEik2sPq8BrNg-ECL3LAGtYhsoXBc\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This strategy has the same limitations as Github Flow.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_did_we_decide_our_Branching_Strategy\"><\/span><strong>How did we decide our Branching Strategy?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As seen above, we knew one thing for certain we couldn\u2019t use a strategy that uses dedicated branches for each environment. It doesn\u2019t just create bottlenecks in parallel development but increases maintenance too.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No strategy fulfills all of our requirements but Github flow and Trunk-Based are the most suitable ones. So, we decided to follow the trunk-based strategy with a few enhancements of our own.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Trunk-Based_Strategy_Enforcing_code_reviews\"><\/span><strong>Trunk-Based Strategy (Enforcing code reviews)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">This strategy allows developers to deploy their builds in any non-production environment from separate feature branches. Let\u2019s see how it works.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/2rGCXIgr9lV7Le4CkrU8SVhJOz3WHclE7p4JFCC8X3rwfRCKDUM8aKsR6q9e-V3IAJ7Sp9yC_Kv7zXyMtLAUbFW8Z-ofgD2hOU24jVjTXoldKKMh5i_tzoWCbpMNLMBY9VIHcCGX8sCka5F47ge8av8\" alt=\"\"\/><\/figure>\n\n\n\n<ol class=\"wp-block-list\">\n<li>For a new task, a feature branch is created from the master branch.<\/li>\n\n\n\n<li>Developers create a dev branch from the feature branch where they can directly push all their changes.<\/li>\n\n\n\n<li>After completing dev testing, they raise a Pull Request (PR) against the feature branch.<\/li>\n\n\n\n<li>Once the PR is approved and merged, a new PR is raised from the feature branch to the master.<\/li>\n\n\n\n<li>This triggers a pipeline that takes care of creating a new build and config which gets deployed to the QA, Stage, and Sandbox environments.<\/li>\n\n\n\n<li>Once the sanity, feature, and regression testing are completed, the master branch is locked and the feature branch is merged into the master branch.<\/li>\n\n\n\n<li>The build is then deployed to Prod-Integration and Production environments, and the master branch is released. This locking feature was added to avoid any conflicts between parallel pipelines running on separate feature branches.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pros:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Code review checks &#8211; Every single change has to be merged in the feature branches through a pull request which must be reviewed and approved by the peers.<\/li>\n\n\n\n<li>Build Stability across Environments &#8211; The build is created only once from the feature branch and then propagated through the environments.<\/li>\n\n\n\n<li>Non-blocking testing &#8211; If a feature branch is deployed in a test environment but can\u2019t be moved ahead due to a blocker, another feature can be deployed and tested independently.<\/li>\n\n\n\n<li>Quick hotfixes &#8211; Urgent prod issues can be moved quickly via hotfix branches with automated tests.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cons:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>As we have completely automated our strategy via the CI\/CD pipeline, incremental changes have to go through the same process and thus take the same amount of release time as the larger features unless a hotfix branch is used.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For hotfixes, we follow a similar strategy but we skip the deployments to QA\/Stage environments.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Summary\"><\/span><strong>Summary<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We have multiple developers working on multiple features parallelly, often in the same repos. Bugs can be detected during testing and can take time to get fixed which can block others. To handle all these pain points, we finalized the above as our branching strategy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We even created a pipeline that implicitly follows this strategy and greatly reduces manual effort. Developers can simply raise PRs, sit back and the pipeline takes care of everything from code quality checks, image building, and deployments as well as merging the PRs to the master branch. We\u2019ll be talking about this more in Part 2 of this blog (Increasing visibility and control over the deployments).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This strategy has helped us increase automation and accelerate our development lifecycle.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Many other parameters can decide the efficiency of the SDLC such as the ease of creating new environments, visibility and control over each deployment, and creating templates for infrastructure resources to avoid repeated or duplicate efforts.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now, you must be wondering how we tackled those other parameters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Stay tuned for Part 2 of this blog post. Coming soon!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Did this post intrigue you? If so, get in touch with us.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We have some exciting opportunities in store for excellent engineers just like you!<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/Cab-ZId7vxofzBOa4UQfi_aWwAkXEHEZKtUjrdbIweWfDWgBfcsrB1UpqO_2C7OgHv6JHdR0WPoTpfZZ3KQxt0HdAeLHIgpqz09UWcaPG1ocysjw1tBFEPpvIg0_C79NtR3XUoXBb2y0RvsjU6sYs5U\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.cashfree.com\/careers\/\"><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Overview At Cashfree Payments, we wanted a system where teams could seamlessly develop new features, test, and go live. This includes being able to work on multiple services, test the feature independently without interrupting or conflicting with other developers, have visibility and control over deployments, and hassle-free rollbacks. What were we trying to achieve? Why<\/p>\n","protected":false},"author":107,"featured_media":24788,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"_themeisle_gutenberg_block_has_review":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1497],"tags":[],"class_list":["post-24784","post","type-post","status-publish","format-standard","has-post-thumbnail","category-engineering"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How Cashfree Payments accelerated their software development life cycle<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.cashfree.com\/blog\/accelerated-software-development-life-cycle-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How Cashfree Payments accelerated their software development life cycle\" \/>\n<meta property=\"og:description\" content=\"Overview At Cashfree Payments, we wanted a system where teams could seamlessly develop new features, test, and go live. This includes being able to work on multiple services, test the feature independently without interrupting or conflicting with other developers, have visibility and control over deployments, and hassle-free rollbacks. What were we trying to achieve? Why\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cashfree.com\/blog\/accelerated-software-development-life-cycle-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Cashfree Payments Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-04-29T17:04:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T02:56:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2024\/04\/SDL_Cycle_E_Blog_Tn_V3.png?fit=1203%2C810&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1203\" \/>\n\t<meta property=\"og:image:height\" content=\"810\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Dhiraj Sittu\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dhiraj Sittu\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How Cashfree Payments accelerated their software development life cycle","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.cashfree.com\/blog\/accelerated-software-development-life-cycle-part-1\/","og_locale":"en_US","og_type":"article","og_title":"How Cashfree Payments accelerated their software development life cycle","og_description":"Overview At Cashfree Payments, we wanted a system where teams could seamlessly develop new features, test, and go live. This includes being able to work on multiple services, test the feature independently without interrupting or conflicting with other developers, have visibility and control over deployments, and hassle-free rollbacks. What were we trying to achieve? Why","og_url":"https:\/\/www.cashfree.com\/blog\/accelerated-software-development-life-cycle-part-1\/","og_site_name":"Cashfree Payments Blog","article_published_time":"2024-04-29T17:04:59+00:00","article_modified_time":"2024-04-30T02:56:28+00:00","og_image":[{"width":1203,"height":810,"url":"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2024\/04\/SDL_Cycle_E_Blog_Tn_V3.png?fit=1203%2C810&ssl=1","type":"image\/png"}],"author":"Dhiraj Sittu","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Dhiraj Sittu","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.cashfree.com\/blog\/accelerated-software-development-life-cycle-part-1\/#article","isPartOf":{"@id":"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/"},"author":{"name":"Dhiraj Sittu","@id":"https:\/\/blogrevamp.cashfree.com\/#\/schema\/person\/a54d61c2e4cedd71d1c6ab9da7570087"},"headline":"How we accelerated our Software Development Life Cycle (SDLC) &#8211; Part 1","datePublished":"2024-04-29T17:04:59+00:00","dateModified":"2024-04-30T02:56:28+00:00","mainEntityOfPage":{"@id":"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/"},"wordCount":1326,"commentCount":0,"image":{"@id":"https:\/\/www.cashfree.com\/blog\/accelerated-software-development-life-cycle-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2024\/04\/SDL_Cycle_E_Blog_Tn_V3.png?fit=1203%2C810&ssl=1","articleSection":["Engineering"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.cashfree.com\/blog\/accelerated-software-development-life-cycle-part-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogrevamp.cashfree.com\/accelerated-software-development-life-cycle-part-1\/","url":"https:\/\/www.cashfree.com\/blog\/accelerated-software-development-life-cycle-part-1\/","name":"How Cashfree Payments accelerated their software development life cycle","isPartOf":{"@id":"https:\/\/blogrevamp.cashfree.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.cashfree.com\/blog\/accelerated-software-development-life-cycle-part-1\/#primaryimage"},"image":{"@id":"https:\/\/www.cashfree.com\/blog\/accelerated-software-development-life-cycle-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2024\/04\/SDL_Cycle_E_Blog_Tn_V3.png?fit=1203%2C810&ssl=1","datePublished":"2024-04-29T17:04:59+00:00","dateModified":"2024-04-30T02:56:28+00:00","author":{"@id":"https:\/\/blogrevamp.cashfree.com\/#\/schema\/person\/a54d61c2e4cedd71d1c6ab9da7570087"},"breadcrumb":{"@id":"https:\/\/www.cashfree.com\/blog\/accelerated-software-development-life-cycle-part-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.cashfree.com\/blog\/accelerated-software-development-life-cycle-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.cashfree.com\/blog\/accelerated-software-development-life-cycle-part-1\/#primaryimage","url":"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2024\/04\/SDL_Cycle_E_Blog_Tn_V3.png?fit=1203%2C810&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2024\/04\/SDL_Cycle_E_Blog_Tn_V3.png?fit=1203%2C810&ssl=1","width":1203,"height":810},{"@type":"BreadcrumbList","@id":"https:\/\/www.cashfree.com\/blog\/accelerated-software-development-life-cycle-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogrevamp.cashfree.com\/"},{"@type":"ListItem","position":2,"name":"Engineering","item":"https:\/\/blogrevamp.cashfree.com\/category\/engineering\/"},{"@type":"ListItem","position":3,"name":"How we accelerated our Software Development Life Cycle (SDLC) &#8211; Part 1"}]},{"@type":"WebSite","@id":"https:\/\/blogrevamp.cashfree.com\/#website","url":"https:\/\/blogrevamp.cashfree.com\/","name":"Cashfree Payments Blog","description":"Cashfree Payments- Payment Gateway for India","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogrevamp.cashfree.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blogrevamp.cashfree.com\/#\/schema\/person\/a54d61c2e4cedd71d1c6ab9da7570087","name":"Dhiraj Sittu","url":"https:\/\/blogrevamp.cashfree.com\/author\/dhiraj-sittu\/"}]}},"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9MjXo-6rK","jetpack_likes_enabled":false,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blogrevamp.cashfree.com\/wp-content\/uploads\/2024\/04\/SDL_Cycle_E_Blog_Tn_V3.png?fit=1203%2C810&ssl=1","_links":{"self":[{"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/posts\/24784","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/users\/107"}],"replies":[{"embeddable":true,"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/comments?post=24784"}],"version-history":[{"count":4,"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/posts\/24784\/revisions"}],"predecessor-version":[{"id":24802,"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/posts\/24784\/revisions\/24802"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/media\/24788"}],"wp:attachment":[{"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/media?parent=24784"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/categories?post=24784"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogrevamp.cashfree.com\/wp-json\/wp\/v2\/tags?post=24784"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}