Porting and Rewriting
What is Porting and Rewriting?
Porting is when you take a project written for one platform and rewrite it for another. It’s especially common in the mobile development market these days, where you might target the iPhone for their initial product launch and later want to expand to other platforms like Android, iPad, Windows, or macOS. Among many possible permutations, when I port a project I might translate code and idioms from one Swift to Kotlin or from Java to C-Sharp. The goal is often to keep the features roughly the same as what they are on the original platform while extending the users that can access them.
Rewriting (sometimes called Refactoring) adheres to a similar concept: taking something you’ve already developed and doing something new with it. However, in this case, it’s not necessarily a matter of going from one platform to another so much as going from an early and perhaps fragile draft into a cleaner and more reasoned one. Rather than adding new features, this is often an effort to prepare an existing work for the future by improving modularity, clarity, maintainability, and stability.
When are Porting and Rewriting Helpful?
Porting presents itself as the necessary step when you’re application is ready to expand it’s user base. You’ve proven how people respond to it on one device – or maybe on the web – and now you want to give people more options. You have ideas for new features, but you’ve learned a lot on the way to where you are and have a sense that things are stable. You recognize that bringing in support for a new platform – with exactly the features you have now – will welcome in a whole new group of users. Porting code is how you make that happen.
Rewriting (refactoring) often comes at a point of crisis or pivot. Perhaps you’ve accumulated so much technical debt through an early rush to market that you realize the time has come to pay it. The quick, haphazard work of your original developer got your product out the door but you hear about new bugs and performance problems every time you open your email. You have features in mind for next quarter, but have been told by your developer that it just can’t be done because the code’s been painted into a corner. The only way forward seems to be to rewrite it from the ground up. The good news is that after the investment into rewriting, you often come away with something much more flexible and stable and much more attuned to your product’s future direction. All of the information you received about product-market fit and all of your product design notes can be considered as input into the new version. You may not be adding new features yet, but they’ll be much easier to add in the near future.
What’s Unique About Porting and Rewriting?
Porting and Rewriting are a special development task because they benefit directly from fluency in multiple languages and multiple platforms, and in translating between idioms. As someone who’s worked with all sorts of different platforms, technologies, and projects it’s easy for me to see what the original code was doing and how to represent it in a new language or with a most refined post hoc vision.
What Platforms Can You Port Between?
The most common ports these days are between the Apple Ecosystem and the Android Ecosystem, or between different kinds of products (mobile, tablet, TV, smart watch, desktop) in each ecosystem. They may also be to or from web platforms, or across desktop environments like Windows, Linux, and macOS. As noted in this page about my technical specialties, I have working fluency across all these technologies and can work in any direction among them.
How Much Does Porting and Rewriting Cost?
Obviously, it varies directly with the scope of the project and the timeline available. Larger and more complicated projects take longers, as do ports between more disparate platforms. However, we can sometimes mitigate the costs by allowing for a more relaxed timeline. It’s something I consider on a case by case basis.
If you have a project that needs to be ported or rewritten/refactored, do let me know!
You can reach me at firstname.lastname@example.org or 626-375-7084.