Coderbunker white paper: audit for mobile startup in fashion domain
Executive summary
This case study shows how CoderBunker can help with engineering resources on demand, empowered existing team with necessary skills, discovered missed critical issues before launch and help with strategy that better fit client situation.
After analysed initial requirements to build local team here, balance pros & cons we transformed initial intent into a better way to help our client by providing code review to spot all missed issues before launch as time to market is a critical here.
By having higher level of expertise CoderBunker was able to spot critical issues in existing app with impact on UI\UX and performance. In total there were 40+ issues and 100+ change request in application codebase.
Discovered issues changed plans of our client and CoderBunker offered his expertise to come up with list of possible options and measure pros & cons each of them to help with strategy of app run and growth.
Finally, CoderBunker offered a set of steps to improve existing workflow and introduce people from their network who might be helpful for our customer.
About client
Our client is a woman community with existing co-working and co-living projects in China. Now they started another startup with a beautiful idea behind it: help each other to find new clothes and share their own.
Their intent to help people make their lives better and they believe their app will do this by letting people share clothes with each other instead of endlessly renew their wardrobe by buying new brands from shops.
Problem
Our client has a vendor who develop for them application and wants to move development to Shanghai from distributed team headed from Australia. They are happy with their work, management and progress so far, but want to have more control on development and more engaged employees for their project.
They faced with issues to find engineers as it is not easy here, especially when you would like to find someone for part time now and convert them full time later. Another issue is a budget which is quite limited for startups of this level without guarantee in future.
Possible options
There are several options how CoderBunker might help there:
CoderBunker can help to find and train engineers or transfer development to their team
consider empower existing team with new people from Shanghai office (hybrid team)
leave development to existing team with temporal help from CoderBunker experts
Considering budget there is no talents on local market who might have a good match with client needs. Also there is a risk to find not a right person on the market. Considering this and full satisfaction with work they have so far from current vendor, it would be good to continue work with existing team till the launch.
Client has agreement with vendor to deliver current project with fixed budget. It looks wise to continue work with existing team and don’t increase the cost where cash is limited. Especially when you are happy with results you got from the team work. The only concern we might have there is code quality and it reasonable to perform code review and look for options to improve existing process.
Implementation
Business goals in software development are delivered features, UI/UX experience and cost of development in short and in long run (demand by users or clients is out of scope here)
That’s why code quality metrics are chosen and ranged from by importance for the business:
Below is non exhaustive list of issues ranged by priority
- Crashes
- Verifying app stability on supported platforms
- Android smartphones since OS version 4.1, 5.0, 6.0, 7.0
- Architecture of the application
- Performance issues
- Smooth scroll and animation on all UI elements for maximum possible amount of items
- Reports with applied Strict mode rules (main thread work)
- Overdraw issues
- Memory consumption
- Memory leaks
- Reports from static analysis tools
In general, good design of application is design that allows faster implement new features or modify existing ones.
The process of audit has several steps.
Firstly, application is tested on emulators with variety of screen sizes, memory size and OS versions. It goes through all major scenarios with enabled/disabled network to check general stability of the application and UI/UX flaws.
Secondly, application is tested for performance issues. For this aim app is run with enabled StrictMode and UI overdraw feature on low budget device to spot flaws with UI/UX of the app. Optionally for list elements is tested with large amount of data to spot issues with scroll.
Thirdly, application is tested on memory leaks with applied tools like LeakCanary and MAT.
Later on github in special branch all commits since the beginning were reviewed. The general list of issues to look for is lack of this points:
- Properly chosen abstractions
- Properly separated layers and responsibilities of classes
- Readability of the code
- Well chosen names of classes and methods
- Short length of methods
- One line - one operation policy
- No more than two idetantation
- No hardcoded dimensions and adjusted dimensions to screen
- All strings moved to strings.xml and localised to supported languages
- Code covered with tests or written to support tests
Finally, app quality is verified with code static analysis tools like lint, FindBug, PMD and Checkstyle.
Benefits
Code review helped our client to discover:
- Few crashes on dev version
- UI/UX issues on devices out of scope existing app
- App has issues with localisation and wasn’t design with intent to support others languages
- Few memory leaks were spotted before run into productions
- Lack of tests and serious design issues in architecture which will increase cost of development in future
- Static analysers shows thousands of issues; not critical but still valuable for total app quality
- In total final report contains 40+ issues and 100+ request for changes in code
Audit helps to understand areas of improvement for application, discover business critical flaws to mitigate them before launch, prioritize backlog and budget for development. It is especially valuable when app has not finished yet and client have time to apply all new changes.
In business terms situation with project can be described likes this
Issue with UI/UX which our client wasn’t aware of due lack of tests on all model will miss user expectations and lead to lack of interest from their side.
Issue with high cost of maintenance caused by poor design where each new feature will take more time to implement and caused more bugs to fix in existing app.
After review situation with project state become clear and we came up with several options to go further:
- Apply all recommendation will solve existing issues, but it will take significant efforts from existing vendor team who works on this project as fixed price -- this option might face with reluctancy from vendor to work further
- Reduce the scope of features till the most valuable for the market and apply recommendations to this scope.
- Apply proposals to solve issue related to critical functions such as UI/UX and postpone with others
- Negotiate with vendor additional budget for the scope to cover refactoring if they found it as extra efforts
We go through this options, balance pros & cons in short and long run. For startups the top priority is to test idea and see feedback from the market, it is important to reduce time to market and validate assumptions. That’s why investment ahead in features which weren’t validated yet, might be not efficient way utilise existing resources. In case there is no way to apply all proposals, option to focus on UI/UX scope and postpone with scope of issues related to reducing the cost of maintenance is more beneficial approach.
After review and discussion our client becomes able to prioritise where they have to commit more efforts and how better utilise existing budget.
In addition to code review our client get nine proposals to improve their process with impact on issue management, code quality and preventing rising up of difficult issues in future.
Also we introduced our client to few persons who might be helpful for them in running their business by sharing their knowledge, contacts and expertise.
Prepared for our company blog