This summer, we had the privilege of working with a number of interns at Very Good Ventures. Through our internship program, we strive to provide opportunities to learn about and build production-quality Flutter applications, scalable architecture, testing, and everything else that goes into app development.
Our interns have completed an impressive amount of work over the summer — from contributing to open source packages to building on real world apps with clients. We asked the interns to reflect upon their experiences and write about some of the things they’ve learned over the course of the summer. Here is what they said (responses edited for length and clarity).
Interning at VGV greatly improved upon my previous experiences working with native iOS development. I learned how to build scalable applications by layering applications, automate workflow with CI/CD, write unit and widget tests, and much more.
I spent the first week familiarizing myself with Flutter and bloc. I soon joined a client team, where I added new features to their app and wrote unit and widget tests. It was incredibly rewarding, allowing me to make contributions to a significant product. I have my mentor, Bartosz Selwesiuk, to thank for the learning experience.
I wrapped up my internship working with Felix Angelov on the Very Good Ventures Open Source team. There, I addressed GitHub issues for open source packages, fully tested a VGV product, and even had the opportunity to write a blog about top open source packages. I’m grateful for all that VGV has taught me this summer.
My internship at VGV was a game-changing experience for me. At VGV, I learned what it meant to write truly scalable and maintainable software and how to effectively collaborate in teams. I also learned the importance of layering applications (in general, not just Flutter applications) and decoupling business logic from other application concerns.
I spent my entire internship working on the open source team with Felix Angelov. I was able to work on developing bloc tooling, working on Very Good Start, resolving issues/creating tests for Felix’s open source packages, and strengthening Very Good Start functionality. Overall, working and learning from Felix was a great experience and I feel that this internship has helped me grow to become a better software developer and designer.
One of my favorite parts about my internship at VGV was being able to try on multiple hats at the company. I began the first week learning the basics of Flutter and bloc, running through several tutorials and updating some of our blogs. Next, I had the opportunity to hop on some prospective client calls, do some business outreach, and upgrade some internal management software. Meanwhile, I was working with the open source team to improve the Very Good Start codebase, working on a variety of tasks.
A month into the internship, I joined a client project to help rebuild their mobile app. I learned how to work in a professional development environment, write production-level code, and work with scalable architecture.
In the last leg of my time at VGV, I focused a lot of my time working on the bloc library with Felix Angelov. Along with addressing GitHub issues, I also updated the documentation and added a few tutorials for new bloc and Flutter updates.
I am very happy to have had such a diverse internship experience, and I would like to thank my amazing mentors — Felix, Oscar, Matt, and Megan for their patience and support.
One of the first and most important things I learned at VGV was the importance of layered architecture. I spent my first few weeks refactoring a personal project that I had created prior to the internship. My original code did not separate the app logic from the UI components so bugs were much harder to track down and the code was difficult for others to understand. I worked closely with my mentor to untangle the app’s logic and UI dependencies by creating a business logic layer that used blocs instead of notifiers. With my code separated into several layers, I was able to easily add a new feature to change my app’s color theme by building it incrementally up through the layers. I was able to implement this feature in a day whereas in my original project, it would have likely taken me several days and been a lot more frustrating. A good foundation and consistent architecture practices can really make a world of a difference in a Flutter project.
I spent the remainder of the internship working on a client project. For me, this was the most valuable work because it exposed me to a production-scale project and team. I primarily worked on adding integration tests for existing features and migrating the codebase over to null-safe Dart. I had written widget tests in the past, so getting to write integration tests that followed a feature/flow from its first screen to completion expanded my testing skill set. Migrating to null safety required me to make logical decisions about whether a value should be nullable or not which deepened my knowledge of the codebase and Dart’s null safety.
I was fortunate to join an afternoon retreat during my first few weeks at VGV. There, I was treated to a spirited discussion of VGV's rationale for extensive test coverage. A few explanations were offered up: the importance of testing in demonstrating the efficacy of software for clients, or the utility of tests in helping software engineers think about the requirements and complexities of the systems they create.
Then, another engineer challenged and expanded the role I saw for testing: "Tests are also a gift to every future developer for the project, whether that be you or someone else who's picking up the project. Tests serve as documentation, and as a confidence-building measure for developers, helping them evaluate the relationship of changes they're making to the project as a whole."
That moment encapsulates what I have found to be my greatest reward from working at VGV — looking beyond just a project's immediate requirements and learning how to lay out the best ecosystem for us and for our clients. Coming from the world of one-off computer science homework assignments and personal projects, my mentors at VGV opened my eyes to the importance of creating maintainable, scalable, high-quality projects — not just as abstract values but in specific practices which I have been taught to analyze and implement by some of the best in the field.
Like most of my fellow interns, my main goal for this summer was to learn as much as possible about Flutter, mobile development, and working with a professional team, and I’m so happy to say that this summer has taught me more than my first year at Penn. This summer, I worked on two separate client projects. My first client project had a large existing code base so my main responsibilities included adding smaller features or fixes including facilitating part of the login process, making new error pages, and designing new buttons and widgets for call screens (while of course testing every feature). It was a valuable learning experience in terms of understanding the architecture of a large-scale application and adapting to a curated workflow.
My next client project was just beginning. Most of the features were not yet implemented and the team was much smaller, so it was a completely different experience than the other client project. With the project being in a newer state, I had more responsibilities in terms of writing new features from scratch including new profile pages, adding and selecting markers based on device locations, and more. I took more care in the way I approached different issues and sometimes tried out multiple solutions for a feature before submitting my code.
However, none of these features would have been possible without all of the help from mentors in both projects. The VGV engineers on my team were always happy to help or jump on a quick Google Meet to get through blockers. Overall, through this internship, I am much more confident in my coding abilities and value the process of writing scalable code and testing every aspect of it.