Big Challenge — Resilient Development: A Guide for Tech Teams & Companies

Andrew Gubskiy
5 min readDec 8, 2023

This article originally published at The Recursive.

In the face of war and challenging times, IT companies working in Ukraine show how to keep going and do well. Ukrainian engineers have continued working and maintained high levels of productivity under these difficult conditions. This article aims to share the valuable lessons learned by technology companies and teams in Ukraine over the past almost two years. We’ll delve into the importance of flexibility and efficiency in business, offering actionable, universally applicable insights — whether you’re operating in times of stability or facing disruptions.

Being ready for quick changes and challenges is crucial in the tech world. Tips from Ukraine’s tech industry show how to stay strong even in tough situations like war. If you’re an owner of a tech company, manager, or developer, you’ll find helpful advice here for making your team and projects more resilient. Strategies include improving how your team works together, preparing for unexpected issues, and making your tech setup more reliable.

Team Collaboration

Good teamwork helps make quick choices and solve problems, helping the company adjust to new situations fast.

  • Knowledge sharing between all team members: Promote a culture where team members actively share knowledge and expertise to enhance overall performance.
  • Decentralized teams: Distribute team members across different locations to minimize the impact of localized disruptions.
  • Have a few channels for communication: Use multiple, secure communication platforms to ensure reliable and confidential team interactions.

Contingency Planning

Having a backup plan means the business can keep going even when unexpected things happen.

  • Provide reserve power and internet for employees: Supply backup power options like portable chargers and network devices (like Starlink) to help employees stay productive during power outages and internet issues.
  • Have a backup plan: Maintain a robust backup strategy for code and data to ensure quick recovery in case of data loss.
  • Replace long-term plans with short-term steps: Break down your long-term plan into shorter, more manageable steps, each of which should deliver value. For example, begin by creating a working prototype, and as you progress through each step, refine and expand upon it to reach your goal.

Personal Insight: Replace long-term plans with short-term steps

In 2022, before the entrance campaign to universities started, I consulted the state enterprise “Info Resource” which developed the digital system for the Ministry of Education of Ukraine. That system should allow university applicants to receive up-to-date information about admission conditions and get support on different related questions. Since the developers were working on projects during wartime, I advised using an approach in which the development process should be iterative, and on each iteration, partial functionality of the product should be ready to be used by users. The proposed development process helped launch the project on time despite wartime challenges. Some functionality was not completed by the release date, but only non-critical system features were completed in the next few weeks. If the team had used a classical approach to development as originally planned, there was a huge chance of not releasing the product at all.

Development Practices

Following simple and clear development practices makes it easier to manage tasks and fix issues, reducing the chance of running into bigger problems later.

  • Atomic mini releases: Deploy minor, incremental updates to reduce risk and simplify troubleshooting. Multiple developed features should be distinct from one another.
  • Commit often: Make frequent commits to your code repository to keep everyone’s work up-to-date and easier to manage.
  • Use widely adopted technologies: opt for widely used technologies in your project. It ensures that you can easily find specialists to expand your team and facilitates knowledge sharing within the entire team.

Personal Insight: Atomic mini releases

As a software architect in Outbrain, I faced different challenges during wartime. One of the challenges was that our team was widely distributed geographically after the war began. Also, some team members had unstable internet connections and couldn’t be online during the working day. We started to have situations where the developers were blocking each other. I initiated the switching of the developing process to atomic mini-releases. It allowed us to unblock the development process and make it more flexible. Also, we started an active knowledge transfer process between members of the Kyiv office. It allowed us to make all team members interchangeable and help each other in critical situations. All these steps significantly improved the efficiency and autonomy of our Ukrainian team. I can even say that we are more productive now than before.

Infrastructure & Deployment

Having a strong but flexible infrastructure keeps your company and products running even if local equipment fails.

  • Use cloud platforms and multi-zone deployments: Leverage cloud services and deploy your infrastructure across multiple geographical zones. This approach enhances the resilience and availability of your system, ensuring it remains accessible even in adverse situations.
  • Use infrastructure as code: Implement infrastructure as code (IAC) practices to automate and manage your infrastructure. This approach allows you to define and provide for your infrastructure using code, ensuring consistency, scalability, and efficient management throughout your project’s lifecycle.
  • Have a backup: just have a backup.

Personal Insight: Infrastructure

In the winter of 2022, during one of the most challenging periods of the full-scale war in Ukraine, I launched moving to the AWS cloud, the critical infrastructure of the Igor Sikorsky Kyiv Polytechnic Institute — the largest Ukrainian technical university. Transferring a critical part of the university infrastructure allowed us to maintain the functioning of the whole KPI university. It provides uninterrupted access to university resources within Ukraine for students and staff who have left the country. Using infrastructure as a code resource prepares the infrastructure for rapid deployment and reduces the required deployment time ten times. It allowed engineers to save time and resources.

People

Taking care of your team’s well-being and earning their trust makes for a strong team that can handle tough situations better.

  • Minimize Stress: It’s crucial to create a stress-free environment. While the team may experience stress, the company and its leaders must maintain clarity and straightforwardness.
  • Risk Awareness: Employees should constantly be reminded of the risks associated with their work. Whether in peace or upheaval, a keen understanding of potential risks helps make informed decisions.
  • Loyalty Matters: During difficult and crisis periods, it’s essential to recognize that even the hardest and challenging times will eventually end, but the loyalty of your people will remain. Building this loyalty is an investment that pays dividends long after the conflict ends. A strong, united team will remain an asset to your company despite adversity.

By incorporating these principles into your company’s ethos, you enhance your resilience during turbulent times and strengthen the bonds that hold your team together. These aren’t just ideas; they’ve been tested under challenging conditions. By applying these tips now, your team can be better prepared and united for challenges.

--

--

Andrew Gubskiy

Software Architect, Ph.D., Microsoft MVP in Developer Technologies.