## 1 Introduction  
In the previous decade, humanity faced one of the greatest periods in its existence in terms of technological evolution in all its forms and applied fields. Software engineering is one of the major pillars of evolution that made such a tight linkage between humankind and technology possible. The estimates were that, at the beginning of the decade, approximately 50 billion devices have access to the Internet [1] and through them, the users utilize digital products and services that help them work, learn, grow, invest, evolve, consume, and communicate with others. Humans, by their nature, have worked collaboratively from the beginning of their existence. In technology, the concept of collaborative work stays the same as in the real world and represents the ability to gather a series of users together to work towards a common goal. This one can be anything from education, investment, and healthcare to industrial engineering or science. Document collaboration represents such a goal: having a series of users that work together on the same text document in a near-real-time way, just like the process occurs naturally in the physical world. A well-known example of such an implementation is Google Docs [2]. The concept of collaborative work is a core component in other fields that utilize the Internet and various technology solutions to achieve their goal. To name a few: medicine (a series of surgeons using a robot's controller over the network to perform surgeries [3; 4]), construction site machinery operators (technicians working on sites around the world using collaborative technologies [5; 6]), various corporate processes (planning tasks, project management, HR [7; 8]) and many others. Regardless of the final goal, all those activities share the same core concept: having a series of individuals working together in near-real time on a common goal. This capability raises a lot of technical challenges that need to be overcome to deliver a stable, available, and scalable user experience. This paper will treat the aspect of availability as critical because the core concept of a collaborative system can be used in applications where failure is not an option. (e.g., the medical field). Besides the actual application design and implementation, this paper aims to examine the major pillars a modern software system should deliver in terms of availability, scalability, elasticity, and disaster recovery. For the context proposed, those pillars have the following definitions:  
* Availability: being able to deliver the promised document collaboration experience to users when required [9; 10; 11]. * Scalability: having the option to scale the system to accommodate more users [9; 10; 12]. * Elasticity: the system can automatically scale up/down or in/out to utilize the available resources in the optimal way possible [9; 10; 13]. * Disaster recovery: the system architecture must be able to handle exceptional cases or major disasters reliably [9; 10; 14]. After going through this research paper, the reader will understand the functionality of collaborative text-editing software and gain deep knowledge of how dependable systems work at scale and how event messaging architecture and stateless microservices architecture can facilitate conflict-free text resource sharing between multiple peers. The reader will understand the inner workings of high-scale systems and what software tools, software architectures, and technologies can support such a system. In terms of functionality, the reader will be able to develop a simple text-editing software capable of supporting multiple concurrent users in collaboration sessions in which one has the option to control what peers can access the document and ultimately perform CRUD operations on the document record and its actual content. This research will focus on these individual critical aspects and implementations:  
* Application description and requirements: we will examine the overall application features and the functional requirements of the system.