2. Is your product becoming like this?
Courtesy - http://www.flickr.com/photos/
adamcathro/1035741023/sizes/m/in/photostream/
3. Symptoms
Takes too long to fix bugs?
Takes too long to deploy bug fixes?
Takes too long to build features?
Spend too much time doing QA?
You completely depend on one developer for core
features in your app?
Developers are more interested in working on new
features than modifying of existing ones?
You are not aware of how to use certain features in
your app?
4. Stay on the same page
Understand your domain
Capture the language of the domain
Formulate a vocabulary
Management, marketing and tech team - all on the
same page
5. Specify specify specify
Do not jump into features
Invest time to gather all information for a feature
Specify behavior of the system
Unspecified behavior leads to bugs
6. Lessons from specification
Behavior is too complicated to specify == Hard to use
Too many preconditions == Hard to use
Too many fail safes == Numerous bugs
Don’t know what to specify == Take a nap & rethink
7. Core should be SOLID
Single Responsibility - A class should have one and
only one reason to change
Open Closed - Open for extension, closed for
modification
Liskov substitution - Derived objects should be able
to substitute parent objects
Interface Segregation - Small interfaces that cater to
specific clients
Dependency Inversion - Depend on abstractions not
concretions
8. Quick Code review
Classes with single responsibilities
Small methods
Meaningful method and variable names
Common classes reside in single namespace
Minimal use of global states and/or singletons
9. Code for humans
Avoid super smart code that only you understand
Avoid monkey patches
Raise meaningful errors
Keep things private unless needed publicly
Document the code
10. Build like a framework developer
Identify common reusable behaviors
Build libraries/interfaces to support them
Leave callbacks for customizations
Test your libs thoroughly
Use your libs for customized app specific logic
11. Why so Anti YAGNI?
Cause the product grows and complexities creep in
Cause you will always have good developers and not
so good developers in your team
Cause at some point of time you will have scalability
issues
Cause you might out source some of your work
Cause you might want to open source some stuff
12. Test test test
Do not behave like a caveman and do manual QA
Be always ready to deploy
Be confident of what you build
Humans are more intelligent than machines, make
them do something useful
Do not rush features without tests cause they’ll come
back and bite you
13. Deploy deploy deploy
Let every one in your team deploy
Let everyone have access to the servers
Deploy multiple times a day or at least once a day
Do not deploy right before the week end
14. Project management
Use a tool that you know well
Follow a school that you understand
Do not get excited like a kid with every new tool
Do not change workflow all of a sudden. Make slow
and continuous changes
15. Metrics
Collect metrics that matter
Data can be both quantitative and qualitative
Don’t collect and forget. Monitor and learn.
16. Successful technical teams deliver good quality
software consistently.
Successful entrepreneurs solve problems of
customers, not their own.
17. Thank You
Follow me - @mukherjeesuman
or
Email me - sumanmukherjee03@gmail.com