DEV Community

Cover image for Identifying and Mitigating the Ninety-Ninety Rule in Software Development

Identifying and Mitigating the Ninety-Ninety Rule in Software Development

Ben Halpern on November 12, 2018

Eleven days ago, we were about 90 percent finished building the initial version of the DEV iOS app. And then I had a realization: We still had anot...
Collapse
 
n13 profile image
Nik

"What was less obvious was how simple it was to throw out a lot of work and start rewriting the whole app in one night."

WOW. If only more people knew this. It's mind-blowing you guys were able to pull this off. I mean I guess it helps to be run by developers... still. You have no idea how many times I've tried and failed to make this point to clients:

  • If your code base is bad it's not an asset, it's a liability. Yes you paid X thousands for a liability.
  • The value of your bad code base is the learning experience of the developers (and everyone else involved). These devs can write you a way better version much faster than they can keep fixing the old version. And it'll be more fun.

Throwing out work is mentally very difficult. Kudos! I hope the word spreads!

Collapse
 
ben profile image
Ben Halpern

Collapse
 
jessachandler profile image
Jess Chandler

Great story - inspiring approach. Aside: I love swift. I've been trying to shift gears on an app to build in flutter and have ios and android on the same codebase, but it is killing me.

Collapse
 
rhymes profile image
rhymes

Can you elaborate? It's so interesting, because Flutter seems great in theory but I keep hearing different opinions on it. Not being a mobile developer I'm absorbing such views from people more expert than I am

Collapse
 
jessachandler profile image
Jess Chandler

I think the challenge with flutter is that you have to learn yet another language and approach. For me, someone who sorta slid sideways into development and doesn't spend much time on it, that is just a struggle. I have web applications in javascript, and mobile applications in swift. With both, once I sit down and figure out the requirements, I can logically build the thing that I want to make.

However, Flutter requires you to think differently. Each thing is in a container, and it might not be straightforward to add it.

For example, the other day, I wanted to add a tab bar at the bottom of a mobile application in Flutter. You can't just do that. In swift for iOS, I'd create a tab bar and tell it about the tabs inside of it and all is fine. In Flutter, I had to create a new theme item and nest a bar in it as a child. That is not at all logical. Some things are much easier, though - if you want to add a floating button, that is a big "pain in the constraints" in swift, but it is as easy as adding a floating button to the scaffold in Flutter.

I want to keep trying Flutter because I love the idea. And, developing in Flutter is nice because of the hot reload features. However, the little incongruities really trip me up. I have a feeling that it might be easier for folks coming from a react background.

Thread Thread
 
rhymes profile image
rhymes

Thanks Jess, I wonder if Flutter were to be easier for a person that comes from neither React nor a previous mobile experience, such as me :D I still haven't dedicated enough time to it to develop a conscious opinion.

Thread Thread
 
jessachandler profile image
Jess Chandler

Get started and make an app! There are some great apps you can start playing with here: github.com/Solido/awesome-flutter

Collapse
 
rhymes profile image
rhymes

Love the idea to release it early. "rip off the bandaid" as you called it :-)

Congrats! The feedback has been good so far!

About the final approach: a not so hidden plus of having a native shell wrapped around the web app is that improving the web app will improve the native app(s) as well.

This adds a lot of value, "for free".

Collapse
 
ben profile image
Ben Halpern

About the final approach: a not so hidden plus of having a native shell wrapped around the web app is that improving the web app will improve the native app(s) as well.

Exactlyyyyy. I really want to be spending time pouring resources into one great application, which grows in complexity vertically instead of horizontal complexity where we have to reimplement everything over and over again. Over time we will learn the right patterns of sending appropriate messages between web and native.

I actually feel now like we are sort of a browser maker in a sense. We kind of get to think in terms of "what would the ideal single-purpose mobile browser be"? I don't think it's set in stone that you can only benefit from one web browser. We get to build the browser of our dreams to support a web-based experience.

Collapse
 
derekjhopper profile image
Derek Hopper

This makes me really happy. I used to think native was the way to go, but the web has come so far in those years. It's possible to build a great mobile app without much native code. Normal users won't even notice.

I'm convinced the approach you chose is the approach most companies should choose by default. Even for a company with no iOS expertise, you can spin up an app with minimal Swift, a shared web view to manage a session, and all of your existing web assets.

FWIW, I've had success using Rails, turbolinks-ios, and Stimulus. Happy for you all! I think you have a great foundation here.

Collapse
 
ben profile image
Ben Halpern

Thanks!

Collapse
 
themainframech profile image
The Mainframe

What do you think is it that causes the ninety-ninety rule to prove to be true in almost every situation? Is it due to the fact that developers usually handle what they know how to do really well first and leave the rest for 'later'?

That being said, I'm not aware of many professional developers that go by the mentality I suggested there, so what is the root cause of the 90-90 rule? (in your opinion)

Collapse
 
gene profile image
Gene

I just installed the app and for an experimental release it’s already nice. That 10% should be just 10%

Collapse
 
treevs profile image
Treevs

Release at the first 90%, slap on an Early Release/Alpha tag and call it a day. ;)

I may have done something similar...

Collapse
 
gmartigny profile image
Guillaume Martigny

I knew this principle under the name Pareto. Where 80% take 20% of the effort and the 20% remaining eat all 80% time left.