# _CoVSCode_: A Novel Real-Time Collaborative Programming Environment for Lightweight IDE
It is a well-known challenge for programmers to resolve conflicts in non-real-time collaboration while they concurrently edit and commit the same file. Secondly, in agile software development processes, programmers commonly work with frequent iterations to meet the changing requirements, and source code modules may not be well defined and isolated. Under such circumstances, programmers' tasks are strongly related and interdependent, which forces them to collaborate in a closely-coupled fashion. Thirdly, real-time collaborative programming is useful for supporting and enhancing pair programming, where two (or more) programmers, even geographically dispersed, can conduct pair programming work over the Internet. In addition, this emerging technique is also beneficial in supporting collaborative learning among students in a programming course, achieving collaborative diagnoses and troubleshooting between a support engineer at a customer's site and a senior engineer at the headquarter, and many other cases. Because of its wide application scenarios and benefits, real-time collaborative programming has attracted increasing interests from both academia and industry over the past decade [1; 3; 4; 5; 1; 15]. Lightweight integrated development environments (lightweight IDEs), such as _Sublime Text_[16], _Atom_[17] and _Visual Studio Code_[18], have rapidly grown in popularity in recent years. For example, it is notable that _Visual Studio Code_ was ranked as the most popular development environment in the _Stack Overflow_'s 2019 Developer Survey [19] only four years after its initial release in 2015. Lightweight IDEs are highly customizable, and can be significantly extended with a large number of available plugins to support various development tasks and programming languages. However, there is very limited support for real-time collaboration with lightweight IDEs. For example, even with the official real-time collaboration plugins for _Visual Studio Code_ and _Atom_, programmers can only collaborate in a specific pattern that does not support truly unconstrained real-time collaboration and has serious limitations. In Section 2.3, we analyze these problems and limitations in details. Given the increasing popularity of lightweight IDEs as well as our observation of the limitations of real-time collaboration support for them, we proposed, designed and implemented a novel real-time collaborative programming environment for _Visual Studio Code_, one of the most popular and widely used lightweight IDEs. The proposed environment met three design objectives: (i) preserving full compatibility with the existing lightweight IDE; (ii) supporting real-time collaborative programming with intuitive awareness; and (iii) achieving unconstrained and flexible real-time collaboration for programmers with equal roles. In this paper, we present the system architecture, workflow and functional design, major technical issues and solutions, prototype implementation, and a set of experimental evaluations. The approaches, techniques and solutions are generic, which can also be applied to building real-time collaborative programming environments for other lightweight IDEs. The rest of this paper is organized as follows. In Section 2, we review related studies and present problems and limitations of existing real-time collaboration support for lightweight IDEs. In Section 3, we present and explain three design objectives for the proposed environment. In Section 4, we propose the system architecture with design rationales, and present the design of workflow and functionalities from collaborating programmers' perspectives. In Section 5, we discuss major technical issues and solutions for system building. In Section 6, we demonstrate the implemented prototype system, and present experimental evaluations in detail. In Section 7, we discuss the generality of the proposed approaches and techniques, and compare this study with related work. Finally, in Section 8, we summarize this study and identify potential research issues for the future work.