Products == MessHow to avoid it?-By Suman Mukherjee
Is your product becoming like this? Courtesy - http://www.ﬂickr.com/photos/adamcathro/1035741023/sizes/m/in/photostream/
SymptomsTakes too long to ﬁx bugs?Takes too long to deploy bug ﬁxes?Takes too long to build features?Spend too much time doing QA?You completely depend on one developer for corefeatures in your app?Developers are more interested in working on newfeatures than modifying of existing ones?You are not aware of how to use certain features inyour app?
Stay on the same pageUnderstand your domainCapture the language of the domainFormulate a vocabularyManagement, marketing and tech team - all on thesame page
Specify specify specifyDo not jump into featuresInvest time to gather all information for a featureSpecify behavior of the systemUnspeciﬁed behavior leads to bugs
Lessons from speciﬁcationBehavior is too complicated to specify == Hard to useToo many preconditions == Hard to useToo many fail safes == Numerous bugsDon’t know what to specify == Take a nap & rethink
Core should be SOLIDSingle Responsibility - A class should have one andonly one reason to changeOpen Closed - Open for extension, closed formodiﬁcationLiskov substitution - Derived objects should be ableto substitute parent objectsInterface Segregation - Small interfaces that cater tospeciﬁc clientsDependency Inversion - Depend on abstractions notconcretions
Quick Code reviewClasses with single responsibilitiesSmall methodsMeaningful method and variable namesCommon classes reside in single namespaceMinimal use of global states and/or singletons
Code for humansAvoid super smart code that only you understandAvoid monkey patchesRaise meaningful errorsKeep things private unless needed publiclyDocument the code
Build like a framework developerIdentify common reusable behaviorsBuild libraries/interfaces to support themLeave callbacks for customizationsTest your libs thoroughlyUse your libs for customized app speciﬁc logic
Why so Anti YAGNI?Cause the product grows and complexities creep inCause you will always have good developers and notso good developers in your teamCause at some point of time you will have scalabilityissuesCause you might out source some of your workCause you might want to open source some stuff
Test test testDo not behave like a caveman and do manual QABe always ready to deployBe conﬁdent of what you buildHumans are more intelligent than machines, makethem do something usefulDo not rush features without tests cause they’ll comeback and bite you
Deploy deploy deployLet every one in your team deployLet everyone have access to the serversDeploy multiple times a day or at least once a dayDo not deploy right before the week end
Project managementUse a tool that you know wellFollow a school that you understandDo not get excited like a kid with every new toolDo not change workﬂow all of a sudden. Make slowand continuous changes
MetricsCollect metrics that matterData can be both quantitative and qualitativeDon’t collect and forget. Monitor and learn.
Successful technical teams deliver good qualitysoftware consistently.Successful entrepreneurs solve problems ofcustomers, not their own.
Thank You Follow me - @mukherjeesuman orEmail me - email@example.com