# Code assessment MVP challenge by Shankar ## Collabera MVP-1-2-3 challenge + Innovation ### Ratings: (1.1/5.0) | Category | Score out of 5 | | ------------------------------------------------------- | -------- | | Adherence to business requirements & UX Design (MVP3) | 1.5 | | Adherence to DSG, platform standards & best practices | 1.5 | | Overall quality of technical design, architecture | 1.5 | | Adequate and thorough unit test coverage| 0 | ### SWOT Analysis | Strength | Weakness | Opportunity | Threat | | -------- | -------- | -------- | -------- | | Swift. manual decoding strategy. MVVM architecture | App Crashes. Open variables. Caching data content. No Unit Tests. Innovation project uses UiKit and does not use existing SwiftUI projects | APIService class is singleton and does not support Unit testing. CommonFunctions.swift. Fonts folder. Code Refacotring. Make Reusable code. Coding Best practices. APIService, ContentView, Country details view/CountryOverviewView, Font Extenstion, ViewState, UserDefault used to save api response object for caching purpose, CountryMapView, No reusable code to make api calls in APIService class for multiple api’s calls, APIService - No generic decoding strategy used to decode api’s response, Font’s could be under resouce folder insted utility folder, ViewState enum case names does not follow naming standards as per apple recommendations, Functions are returning view’s, Text Component - No reusable common modifier created and used, Constants baked in view’s directly insted extracting under constant file for easy maintance, CountryMapView is just hard coded textview. nothing baked it, A lot of code duplications, like Async image downloader could have created reusable compoment etc, | Code duplication, not following standards and best practices, Constants url are open variables, singleton objects used a lot, Most of Models are generated using 3rd party tool http://www.json4swift.com, Error building innovation project, Most of the places force unwrapping used which cause app to crash in APIService to throw errors, for caching api response, data gets decoded first and then passed to caller and encoded again to cache in userDefault. this is overkill, Duplicate codes in If else statement just only difference is foreground color between if/else block code. below is one example | ## Deff Method MVP-2 Challenge ### Ratings: (3.2/5.0) | Category | Score out of 5 | | ------------------------------------------------------- | -------- | | Adherence to business requirements & UX Design (MVP3) | 3.0 | | Adherence to DSG, platform standards & best practices | 3.0 | | Overall quality of technical design, architecture | 3.0 | | Adequate and thorough unit test coverage| 3.5 | ### SWOT Analysis | Strength | Weakness | Opportunity | Threat | | -------- | -------- | -------- | -------- | | SWiftUI, Follows MVVM pattern, Includes Unit tests which tests business logic, Good folder structure, ViewModifier used nice refactoring, Constants are pretty well done in constant file, Style is baked very well, Code follows standards and practices well, Overall unit test coverage: 34.5%, Business logic test coverage: 66% and above. | Not matching Figma design for few screens. | No previews for any of view's at all, Few view's has environment object, No UI unit tests, Service layer could have been generic to avaoid Code duplication | Bookmark coutry functionality is missing completely, Current location map missing, Extra UI component on contry overview, Back button/title missing on county overview, No caching at all, No way to go back to country list | ## Globant MVP-3 Challenge ### Ratings: (3.7/5.0) | Category | Score out of 5 | | ------------------------------------------------------- | -------- | | Adherence to business requirements & UX Design (MVP3) | 4.0 | | Adherence to DSG, platform standards & best practices | 4.0 | | Overall quality of technical design, architecture | 4.0 | | Adequate and thorough unit test coverage| 3.0 | ### SWOT Analysis | Strength | Weakness | Opportunity | Threat | | -------- | -------- | -------- | -------- | | Nice animation around list images, core data used for data caching and DataManager responsible to save and delete records. This is nice segregation, MVVM/POP pattern, Folder structure looks good, Nice use of CoreData fetch request in View, View are nicely extracted and looks clean, SwiftUI, All View's preview loads without any hiccupes, Modifiers created for reuse, CacheAsyncImage component, Nice Dependency injection for services in viewModel to fetch api data. | No UI unit tests, Innovation part | Added Unit tests for viewModel. Only 1 unit test. Overall coverage: 30% and CountryViewModel 87%, Almofire Pod library, DataManager injected as environment object, could have been avoided by using dependency injection. | CountryModel contains location logic, API Error handling, Save tab misses search UI component and search functionality | ## TCS MVP-3 Challenge + Innovation ### Ratings: (4.3/5.0) | Category | Score out of 5 | | ------------------------------------------------------- | -------- | | Adherence to business requirements & UX Design (MVP3) | 5.0 | | Adherence to DSG, platform standards & best practices | 4.5 | | Overall quality of technical design, architecture | 4.5 | | Adequate and thorough unit test coverage| 3.5 | ### SWOT Analysis | Strength | Weakness | Opportunity | Threat | | -------- | -------- | -------- | -------- | | Nice folder structure - feature/page wise seperations view/viewModel/model, SwiftUI/Reusable extracted small view's, Code looks Clean and neat, MVVM/POP pattern, SwiftUI, Nice dependency injections for all View models, reusable small view's, Core Database used for caching and all reading/updating/deleting database operations baked into viewModel. I liked the idea, Unit test written for viewModel’s business logic and data mocking is also done. Very nice pattern used. Unit tests(test covarage 45% and ViewModel’s test covarage 70+), UI tests also added. +point for that as well, Nicely POP pattern baked in viewModel to make more testable, Reusable network layer and made testable using POP pattern. Nice work and implementation, Persistant manager for database operation which is good strategy and kept seperate layer for db operations, Constants are kept in constant file, Extensions are kept unde extention folder. Which is good, Innovation project is based on MVP project. Runs successfully and it has speech search and search by image. Nice innovation project. +1 for this one, Unit test written for viewModel's business logic and data mocking is also done. Very nice pattern used, LocationManager for location functionality also nicely layered and made it single responsible, Constants are kept in constant file. Maintance wise good, Nice use of Speech framework for innovation project, follows good coding standards/practices and functionlaity works as per the MVP3 challenge. | | On app launch, asks user permissions, that could be asked when it needed like on map tab where actually need current location, Shimmer components are overkilled and made more complex | |