Dropbox does some rewriting
Rewrite dl.google.com in Go.
- Replace existing Cpp service with modern Go code.
- Rebuild the binary to meet existing unit tests
- Send traffic to both old and new services.
- Re-architect the system, collapse two different services into one.
- cleaner maintainable code,
- new service is faster as it can be concurrent and use more CPU cores.
- It can use newer APIs of the dependent services -> e.g. file storage API
- Don’t lock yourself to a line by line rewrite.
- Try to keep improving the architecture.
Slack Rebuilds the deskop client
Clients do not notice any different between clients. The interface is not defined in a spec, but still exists.
- Still, software codebases have life spans
- Rewrite to get away from legacy technologies - jQuery and dom manipulation.
- New technology pardigm (React) came along which was a step function improvement.
- Older app assumed a single app within a single process, that assumption was no longer true as lot of people are signed into multiple slack teams at any given point of time.
- Create a “modern” section of the codebase that would be future-proof.
- Rebuild the app piece by piece, have a way to use modern pieces in the existing app, so that you can get feedback on a smaller surface area.
- Conventional wisdom states that rewrites are best avoided, but sometimes the benefits are too great to ignore.
- Much easy to new use new technology like Service workers from the new codebase.