![]() ![]() ![]() ![]() If a feature is shipped and problems are encountered in production, it’s easy to roll back the change quickly without needing to ship an app update. We considered two other options: shipping the rewrite behind a feature flag, or shipping it incrementally across a series of releases.įeature flags are an attractive solution for this kind of problem because they minimize risk. From the beginning, we knew we didn’t want to unconditionally replace the entire implementation in a single release doing so would risk impacting the stability of a critical feature if we overlooked a serious bug. Once we’d decided to begin rewriting the feature, we needed to decide how to ship the new version to customers. Finally, as part of this effort we also took the time to adopt newer UIKit APIs, resulting in an overall more polished interface. In addition to making the user experience more consistent, this also allowed us to more easily audit the app for Core Data concurrency violations, eliminating another class of bugs and crashes. Our priority in this area was to improve our model layer so it could more easily be shared across different parts of the app which need access to the user’s files (e.g. At the same time, it gave us the opportunity to adopt more modern design patterns. First, migrating this feature to Swift would help eliminate a class of memory safety bugs, improving the overall stability of the app. There were a few technical factors which informed our decision to go ahead with this project despite the risk. ![]() As a result, undertaking a rewrite or code migration without strong motivating factors is frequently not worth the effort required to do it well. It’s easy to miss an important edge case when reimplementing functionality, and shipping such a large change to customers at scale can be risky. Often, rewriting a major feature creates more problems than it solves. As part of an ongoing effort to modernize the app, we recently migrated the codebase supporting this feature from a legacy Objective-C implementation to Swift. The files tab in the Fieldwire iOS app lets users view, search, and edit the collection of files they’ve uploaded to a project. ![]()
0 Comments
Leave a Reply. |