Deleting 50k Lines of Code in 3 Days
aakashns.com
aakashns.com
I don't know about the author's application, but a data driven approach is not going to give good results. In my podcast hosting software, the "delete podcast" button is used maybe once every other week (by the numbers). But if I got rid of it, I'd be fielding support requests for every user who wants to delete a show. And that's a highly manual cleanup process to do by hand.
Which is to say, features don't need to be a high percentage of traffic to be important.
Never the less, my favorite thing to do with code is running over it with the delete key. Just be careful about what gets it ;-)
And this is why the users are the ultimate deciders - or at least should be - what features ought to be removed, rather than the developers.
The 0.1% and 99.9% are not complements!
"Data driven" development is so much BS since so many devs don't care to think properly about sampling and statistics.
It's possible that the author did take this into consideration and glossed over the details, but it's not something that I as a reader take for granted. And it's not something that I as a coworker would take someone's word for, especially if they didn't list at least some examples of the things being removed.
Not trying to pile on the author. Trimming the fat on a codebase is great, and for sure a worthwhile exercise that not enough organizations pay mind to.
> web application that serves hundreds of thousands of requests every day
So in this case, that's at least hundreds of requests per day. I mean, it's not small.
I agree completely with this comment, and another comment saying that "which percent contains the value of the product", because that might be the most important 0.1%.
For instance, I didn't delete the "Account Settings" page. Features don't need a high percentage of traffic to be important, but less important features generally account for a very low percentage of traffic.
No it doesn't, these are different metrics, same user that does those 99.9% visits could once in a blue moon want to visit a very important page, and be negatively affected. And this could (in theory) be the case for every single user
The Word screenshot is another illustration of the misplaced nature of this criticism: you wouldn't enable all of those toolbars in reality to obscure everything! If you wanted something, the beauty is you could just drag a needed button from a toolbar to a more condensed version
Or enable a toolbar for when you needed it, and then disable it
Like reset password... or account cancellation ... stuff like that.
Why do the passwords expire if they're not used? "best practice"
"A lot of software developers are seduced by the old ‘80/20’ rule. It seems to make a lot of sense: 80% of the people use 20% of the features. So you convince yourself that you only need to implement 20% of the features, and you can still sell 80% as many copies."
“Unfortunately, it’s never the same 20%. Everybody uses a different set of features."
Isn't this exactly why, feature creep? It's not a fair argument, no more fair than 'it's only used by 0.1% of pageviews'. Neither is the full story.
If there's another way to accomplish the same thing, remove the more complex one. If the feature is part of a process that can be done another way, remove it. If the feature is used by an actual 0.1% of users, the impact of removing it is small.
Anyway, I had a friend in the bad old days, had a bulletin board (a bank of phones connected to modems that connected to a bank of computers) that hosted around 300 games. Folks would log in, play a game or two, log out.
He checked; only 10 games ever got played, pretty much. So he started removing most of the rest.
Callers declined 80% in the first week. Disaster; they paid by the minute.
See, folks were browsing his games, the most on any bulletin board! That's why they came to him, to see all that.
Then, sure, they'd play the same popular games nearly every time. But they had to see the other ones there to feel like it was the right place to go.
Sometimes, it's not about the feature being used. It's about the user's confidence they won't get stuck (I can always back out this change! Oh! The backout button is gone?! Panic), or feel the product is supported adequately, or even, it's a checkbox on a purchase requirements list.
Remove features at your peril!
https://www.joelonsoftware.com/2001/03/23/strategy-letter-iv...
> A lot of software developers are seduced by the old “80/20” rule. It seems to make a lot of sense: 80% of the people use 20% of the features. So you convince yourself that you only need to implement 20% of the features, and you can still sell 80% as many copies.
> Unfortunately, it’s never the same 20%. Everybody uses a different set of features. In the last 10 years I have probably heard of dozens of companies who, determined not to learn from each other, tried to release “lite” word processors that only implement 20% of the features. This story is as old as the PC. Most of the time, what happens is that they give their program to a journalist to review, and the journalist reviews it by writing their review using the new word processor, and then the journalist tries to find the “word count” feature which they need because most journalists have precise word count requirements, and it’s not there, because it’s in the “80% that nobody uses,” and the journalist ends up writing a story that attempts to claim simultaneously that lite programs are good, bloat is bad, and I can’t use this damn thing ’cause it won’t count my words. If I had a dollar for every time this has happened I would be very happy.
Users might seldom use something but really need it.
Pretty much every OS update and new A/B tested web page out there...
A/B testing is really close to the same as this ... except one of A or B may stay in the product.
You mean it's an abusive relationship between the developer and the users?
This may not exactly be gaslighting, since they may not have the intent of making you question your memory but ...
A lot of website projects I have worked on in the past included composer or node dependencies in the repository. It really slows down the whole git system.
You do not compile your dependencies
Sounds awesome!
For example, you've been handed a bug. The customer is important and is running a version of your code from three years ago. You have source control, so you check it out and try to build it. What stuff might you expect?
1/ It uses docker and the image isn't online any more. I've had this one.
2/ One library dependency you used to use has been deleted from the internet. Also had this.
3/ Another dependency is still available, but it uses a dependency which isn't. Not yet.
4/ You managed to gather all the code and it refuses to compile with a modern toolchain
5/ As above, but this time the modern toolchain makes a different program to last time
6/ Another dep has dubious ideas of semver and the current copy doesn't behave like the old
7/ Actually anything using semver is considered deeply suspicious in itself
That's off the top of my head. I think there's probably a long list of variants on the source tree isn't sufficient information to recreate old versions. The reliance on old compiler bugs feels particularly realistic to me, but then C++ people mostly check in our dependencies. I've definitely checked out npm projects from a few months earlier and discovered they don't run any more.
Compare to the silly, paranoid, I've-checked-in-gcc-and-linux alternative. You check out code from N revisions ago and it all builds and runs, exactly like it used to, provided you can find hardware which looks adequately the same as it used to. I've heard rumours of warehouses of new-in-box sun workstations waiting for their time to replace the current ones too.
On balance, I reckon the industry best practice of grabbing whatever code some server gives back with an associated version number is a nonsense and obsessively committing the entire dev and run state into source control is the right thing. But I'm clearly in a minority.
Python, C, Cpp.. it all goes in!
Their approach is quite reasonable as a starting point. Make non breaking product change and see what happens. You may be amazed what (doesn't) happen.
We have a data export form on our website (which is a requirement under GDPR and several other similar regulations) that has been used by under 0.01% of users throughout its existence. If a new hire decided to "clean it up" without approval and then bragged about how many lines of code they were able to reduce...
After a couple of years the feature set has mostly returned.
I cancelled my subscription and mostly moved to other apps. I still utterly despise everybody at Evernote.
It still hurts a little every time I think about it. I really liked that product.