My Internship Journey at Judge0: Flutter, AI, and Beyond

From July to September 2025, I worked as a Software Engineering Intern at Judge0. During this period, my fellow intern Dominik and I gained experience rare to encounter in most IT companies. We were exposed not only to hands-on technical work but to the financial and administrative tasks of the business: from scaling and evaluating the Judge0 infrastructure and working on new products, to witnessing specific issues encountered by the Judge0 system's clients, and observing specific financial and executive decisions.

Working on the Mobile App

While Dominik worked on the new website and blog, I was tasked with developing a new Flutter application designed to utilize the Judge0 system for code execution. I chose Flutter because I was already familiar with it and wanted to expand my knowledge and experience, and because it allowed for quick and stable multiplatform development. The goal was a simple IDE app supporting the 90+ Judge0 programming languages that would allow quick code execution and clearly demonstrate the power of the Judge0 system.

Introduction to Flutter

To prepare for the development, I completed a video course and read books to build a solid foundation in Flutter and prepare for potential application development challenges. Herman also arranged meetings with industry acquaintances. These sessions allowed us to discuss Flutter development, general IT challenges, exchange experiences, and establish new and valuable relationships.

Market Research

We started the design development with simple market research. We looked into what features were essential to the user and how to make the app look and feel simple yet possess complex capabilities. This phase influenced some key design decisions, such as the look of the custom keyboard strip for quick access to frequently used symbols.

Growing an App

The product development began with an MVP (Minimum Viable Product). This product was designed for later upgrades with more complex functionalities and a refined design. Developing this application was both fun and demanding, offering unique learning opportunities. The most demanding challenge was developing a modular app. We wanted a modular application that would allow general independence and extractability (e.g., implementing a strategy design pattern for easy IDE package switch, which required supporting multiple seemingly incompatible controllers and development of a general IDE interface scaffold).

Work on the Dart SDK

In the final phase of the internship, our focus shifted toward exploring new LLM (Large Language Model) technologies. The task was to develop a working Judge0 Dart SDK using only LLM agents. While it proved to be a challenge, it was, nevertheless, a fun task.

Working with AI Tools - Vibe-coding

I explored the AI agent market and opted for Cursor. The development of the SDK was quick and easy, but some issues with general AI development were becoming apparent. As the project grew, I noticed that I understood less and less what the code was about and how the code was structured. What I learned from that is that the use of AI agents should be managed under strict supervision, because that is when their capabilities truly shine. At the end of the internship, we also had a short presentation on how LLMs work so we could expand our knowledge and use them more efficiently.

Other Achieved Skills

While developing the Flutter application, I gained a greater understanding of the Git system and the critical importance and methods of proper version control. Version control allowed for the easy development of independent features and kept the history and the focus of the project moving forward.

Communication Skills

This was the part that was probably the scariest for me, as I knew I had a lot to work on and learn in this area. But Herman offered a lot of opportunities to practice. In the first half of the internship, we were in an office where we had daily small talk and could articulate our thought processes out loud. By participating in Herman's meetings with clients, I could observe and learn about efficient communication. Through in-person meetings with Herman's acquaintances, I could practice networking and sharing experiences. The second half of the internship was remote, where we had daily stand-ups and had to present our work to Herman. This is where I could practice this art and the endless learning process of communication. Through presenting our work to each other, we could share ideas and rethink actions we took throughout the day. While I still have much to learn and practice, I am thankful for the opportunities that arose, and I still maintain the position that good communication is half of the work done.

Infrastructure Design, Scaling, and Expansion

In the first few weeks of the internship, I witnessed Herman working on the Judge0 infrastructure. The infrastructure needed robust scaling to support the increased use of the system. Herman showed me how he handled the scaling of the infrastructure and passed on complex knowledge of the utilities and processes at play. He also showed me some financial and executive knowledge and decisions he was actively working on. I also learned how he handled clients' needs and introduced them into the Judge0 system.

Version Control and CI/CD

Crucially, I learned how to develop a CI/CD (Continuous Integration/Continuous Deployment) system. This implementation made the application's development and testing process much easier. Encouraged by this newfound knowledge, I successfully applied version control and CI/CD systems to my personal projects.

The Right Mentality

Herman's primary focus was not just the final project results of the internship; he aimed for us to emerge as better-formed individuals, enriched with new knowledge and experiences, and more proficient in the technologies we wanted to master. He guided our focus toward the most relevant tasks and problems. Herman was an exceptional mentor who effectively transferred his wealth of knowledge and hard-earned experience to us and created the right atmosphere to work efficiently.

Conclusion

I am grateful to Herman for this experience. It not only deepened my technical knowledge and abilities in software development but also broadened my understanding of non-technical areas like communication and the principles of high-quality, responsible, and focused work. These competencies are typically difficult to acquire through independent effort, but the environment at Judge0 was an ideal practice ground.