(no title)
jef_leppard | 3 years ago
1) There is almost never a case for a total ground up rewrite of your core product. Just don’t do it.
2) Don’t abandon the users who made you successful in the first place. They’re the ones who advocate for you and get your foot in the door.
3) real time google docs style collaborative editing is table stakes for this software category. Build your V1 with it in mind. Otherwise you’ll have to do a rewrite later. See 1.
seti0Cha|3 years ago
I think a better #3 would be: decide whether your audience is individuals or businesses, then build for that.
btown|3 years ago
jef_leppard|3 years ago
dkarl|3 years ago
chillfox|3 years ago
Collaborative editing makes sense for business users (taking meeting notes) and not much for individuals. That said, the tech that enables collaborative editing is kinda the same that allows solid sync and picking up your note taking session on a different device seconds after you put down another, which is something individuals do benefit from.
I like being able to go between my laptop and desktop very fast. Currently with Obsidian and using git for sync it kinda sucks a bit as if I am not careful I get merge conflicts.
SergeAx|3 years ago
lucideer|3 years ago
I've espoused this before, but I've come around to moderating my take on this.
"Almost never" is an exaggeration. I agree that they "almost never" work, but that's not the same as there being no case (there's a difference between "should not have done" and "should have done differently".
After many years of seeing both play out (rewrites and decided-not-to-rewrites) I'd edit this adage to: "there is almost never a case to rewrite yourself" (for the individual) or "there is almost never a case to get the same team to rewrite" (for management).
I'm not saying that engineers can't learn from their own mistakes but if you wrote the software & you think it needs a scratch rewrite rather than a refactor, you're unlikely to have learnt enough within that gap of time to make the rewrite significantly better than a refactor.
The other reason for failure outside of the original architect repeating their same mistakes 2nd time around is outsourcing the rewrite. Wholesale outsourcing is an unbelievably inefficient & failure-prone way to build in-house software.
hinkley|3 years ago
Relentless Refactoring replaces the ship piece by piece while it's under way. If you are effective at it, you can effectively (both definitions) rewrite the entire app with few people being any the wiser.
If you are not good at decomposing a problem into digestible, coherent steps, then you are also lousy at Relentless Refactoring. If you can't decompose the problem, your top-down rewrite is statistically guaranteed to fail. Someone somewhere will get lucky, accidentally beating 1:4 odds over and over for 50 failure points, but that person will probably not be you.
The people who can Relentlessly Refactor don't need to ask for a top-down rewrite. They just get down to doing it. Therefore most of the people who ask for one are incapable of taking advantage of such permission.
Ultimately, the only people who ask for a top-down rewrite are the people who don't deserve it. They believe in do-overs instead of doing the hard work of removing obstacles. They believe in the Second System (without the attendant Syndrome), not in observing and adapting to new information as it becomes available. They have, in essence, trained themselves to continue to misbehave in the face of new wisdom. They will repeat that behavior during the rewrite.
ska|3 years ago
There is an important caveat here - sometimes the original is rough not because you didn't know how to do it better, but because you were emphasizing speed and flexibility e.g. very early stage startup and you don't really understand the product here.
[see also, ship the prototype problem]
lazyasciiart|3 years ago
runlevel1|3 years ago
hn_throwaway_99|3 years ago
1. Don't write code that's such a spaghetti mess in the first place that you feel the need to throw your hands up and say "nothing can be done except a rewrite".
2. If you do need to do a major rewrite, make sure you have the ability to staff two teams - one doing the rewrite and another maintaining and adding new features to the existing product.
3. Kinda related to number one, but if you have well-organized code to begin with I find it's much easier to do a major rewrite in "sections" (though there are obviously difficulties with this approach).
asdajksah2123|3 years ago
I think that's different from a user facing rewrite. I suspect while Google did its infrastructure rewrites, users didn't notice a difference. Additionally, Google probably had the resources to continue delivering features to users while the infrastructure was being developed.
The problem with a front end rewrite is (a) things might break and users will notice, and (b) it's hard to deliver new features to users while the front end app itself is being rewritten.
tomjen3|3 years ago
It was not that you couldn't rewrite part of the product here and there over time, and end up with something that is only the same as the original product in the way the greek ship was.
bighi|3 years ago
5. If you're releasing a broken product missing core features, don't take many YEARS after release to un-brake your product and build some of the missing features again.
johnxie|3 years ago
We started with OT [1] in mind for V1 of Taskade [2] with the intention to make our editor collaborative, but it was still a bumpy road before we were able to iterate on the product and speed up our dev cycle,. It continues to be a challenge to support the various use cases and customers, as improvements for offline editing, cross-device syncing, and recovery never ends.
This problem isn't fully solved and there are no perfect out of box solutions.
[1] https://en.wikipedia.org/wiki/Operational_transformation
[2] https://www.taskade.com
etempleton|3 years ago
cooperadymas|3 years ago
bighi|3 years ago
It's been what? 3 years since they released their javascript app, and they still didn't rewrite some important old features. Just last week we got back the option to start writing a note in the title instead of the body.
3 years!
I could write an entire Evernote competitor from scratch in 3 years, as a single developer (as a javascript app, not as multiple native apps).
And they STILL don't have reliable note-synching.
It took them too long, and their app is too crappy. But a GOOD rewrite would have worked just fine.
goto11|3 years ago
underwater|3 years ago
You need to worry about deciding what functionality to preserve, what to change, and what to throw away. Most rebuilds either fail because they skip this step and the result is inadequate for the job, or they do this step and get bogged down in the minutiae of locking down requirements, digging into edge cases, and stakeholder management.
pqs|3 years ago
tqi|3 years ago
kevin_thibedeau|3 years ago
mizzao|3 years ago
(e.g. when simultaneously editing, text will randomly disappear from one or both writers)
matchagaucho|3 years ago
I adopted Evernote for its ability to synchronize my checklists and notes across all devices. Collaborating with others was not an initial feature IIRC (?)