In each project, the developers go through different experiences… we learn, think, create and above all: we code. In this post, I’ll tell you a bit more about a project that was a real challenge for me and my entire team, let’s call it: "Project X".
Before beginning this story, it’s important to add that many of the support projects in the world arrive in an almost unknown and complex status for developers. At Tekton Labs, we take this as a challenge and as a great opportunity to learn and gain experience for the future.
"Project X" on iOS platform began as a legacy project. Our client brought us the project but due to the lack of documentation and knowledge base about it, my team and I started out like a “support team”.
During the first sprints, we reviewed the code in order to understand each change and its impact on the application. We also looked for areas where improvements were necessary.
Certainly, this wasn't the best way for us to start our way to a new world: disarmed and without information of what we’ll face there... but that was our case and we decided to take it under all risks to start making things really happen.
As we all expected, improvements were requested for "Project X". In order to start working on those, we had to understand the code first.
Doing code reviews to an enterprise application created by other people could be very complicated and frustrating. Mainly because you must try to understand what they were thinking at the moment they were developing the functionality in the first place. Best case scenario: they’ve commented the code and used verbose methods and variables names; in worst case: they didn't do any of this.
In other words, the less comments the code has, the more complex the project will be, and it will take longer to resolve bugs or implement new features. However, with time, patience and constant reviews, we got to smooth the process.
Obstacles in the way
In order to be able to add new features of functionality, we had to analyze the code, measure the impact, estimate how much time it would take (if it was possible) and what we would need to make it happen. For example:
We were once asked to include push notifications to the application, but this could only work in iOS 10 using UNUserNotificationCenter, which was not supported for previous versions. The question was: How could the code handle these two flows?
To solve this problem, we had to use UNUserNotificationCenter and UIUserNotificationSettings at the same time, using methods to recognize what iOS version we were using and refactoring the code to have no repetitions:
Also, since "Project X" had a similar (but not the same) app for each client, we had to figure out how the layout was going to be shown and what functionalities each specific app would have.
We used to have a branch for each app, but that made the process very complicated because when we wanted to merge a new feature, the different branches started causing several conflicts. We solved this by creating one target for each client and controlling UI and functionalities by code.
Those are two examples of day-to-day analysis that my team and other development teams made to deliver and get the best possible solution.
The Light in the Darkness
But not all was frustration. Reaching a solution for those problems was a satisfactory feeling for us, because through discussion, teamwork and research we’d always found a viable solution.
One of the most important things we learned during “Project X" was: New functionalities always bring innovation. Thanks to this, the team could keep learning and tracking new technologies that were created.
We also implemented CallKit, a framework announced in the last WWDC 2016 and covered in depth on Session 230 (https://developer.apple.com/videos/play/wwdc2016/230/). All the research made to solve this new problematics led us to web pages like Apple Developer Documentation, Ray Wenderlich, Medium, Stackoverflow, Stanford iOS classes (Youtube or iTunes); which are good sources of information for us, and surely could be for all the developers out there too.
In conclusion, this project brought us great and bad times like any other project. And like everything in life, we must be grateful for the good things that have been learned thanks to the bad ones.
We are still researching and discussing about the best new technologies and options while we work together for what is more important: The company and us as a team.
iOS Developer at Tekton Labs