Lot of companies prefer take home assignments for mobile software engineers. I have been taking couple of those. I would like to know what are the points to consider while doing those and what is the safest and cleanest architecture for such assignments. I have tried both mvvm and viper. I have seen feedbacks coming viper is over do and other feedback as well. I appreciate a good discussion and feedbacks. It would be great if any github projects that is good example for reference. @iosengineer @takehomeprojects #ios #takehome #mobileengineer #iosengineer #iosdeveloper
Use the one you think is right for the project. You should be able to explain why you prefer one over alternatives in that particular case. Don’t use architectural patterns just to demonstrate that you can. Have your own genuine good approach to designing apps. Most of the assignments are the same in nature and do have a presentation layer of moderate complexity that can be handled by MVC as well as VIPER, and you can never go wrong with MVVM. A good team won’t discriminate based on the choice of the architecture. What really matters is your ability to be consistent with your approach across the entire app. It’s more important to have good architecture below presentation layer. That’s where there aren’t as many dominating trends and it’s what actually demonstrates your ability to design applications well. Highlight all trade-offs and todos in the code to show that you can deliver features fast without bloating the scope while keeping in mind the direction of potential future work.
Thank you. Good points to note. 1. Suggest any good sample project 2. list of things u feel see in any such project from interviewer perspective. 3. For single or 2 views project do you suggest have ui component logic separated out. Like say table view having a centralised liaison table view to use
Viper, MVVM, MVC, MVP, Clean, really doesn’t matter if the stuff inside is shit. That isn’t system design, it’s a pattern that can eventually be followed by anyone. System design tells me you can see the best approaches then you can implement in those. I want to know your decisions. For iOS, did you use storyboard, swiftui, or UIKit in code, and why? Can you defend why you force unwrapped this? Why did you use a stack view over system of constraints? Why is your setup in viewDidLoad vs willAppear vs didLayoutSubviews? Is your api layer abstracted out enough or too much? What powers your offline mode and not (CD, SQLite, Realm, UserDefaults)? Idc if you did all that in MVVM because that is a mobile architecture and I’m hiring you for iOS. Honestly, if they are all in on one architecture and you have to know it eg cant learn it when there, I would stay away. Tech changes and could impact architecture and inflexibility is a red flag. Presenter/Controller might not be the move when SwiftUI picks up steam, and being stuck trying to force it into that box is a detriment with serious mental tax and overhead.
Thank you. Good points to note. 1. Suggest any good sample project 2. list of things u will see in any such project from interviewer perspective.like a checklist you see in the code 3. For single or 2 views project do you suggest have ui component logic separated out. Like say table view having a centralised liaison table view to use
1. Sean Allen has a good course but essentially has you touch on the github followers apis (https://developer.github.com/v3/users/followers/). Could do filtering not tabbed views, networking/api calls, and offline mode. 2. It really depends on how the project is done. Like if you pick programmatic UI, I want to know where you customize it and why there, did you still use constraints or frame based and why. Or if you did storyboards/nibs, I want to see your constraint system and how it works, how you customize it (maybe even ask you to change something to see how well you move around in IB). Your architecture pattern does matter (not which, but you justifying). So if you picked MVVM, I’ll judge you on how you separated out your logic into the VC and VM and Model classes. Like I should never see the model have a ref back to the VM directly which I have seen tons of times. It really is a more case based thing. 3. Depends. If you mean more like scenes, I could have 1 scene with a 3 way segmented control that powers 3 tables. So in that case, what should be the best pick? Maybe have 3 different data source/delegates and swap out and reload based on which is picked? Or have 3 separate and hide accordingly? Those are decisions I consider important.
Add unit and UI tests. Most candidates don’t bother and you will stand out.
Only if you perfected the rest. I’d say it’s not as important depending where you go. We have a team of QA engineers who write tests for us.
They give you a test and say you can take up to a week. Write unit tests documentation good architecture and at the eod they want you to do it in 2 days and have all of the above that is why I always ask do you want a barebones implementation or a complete one because a complete one with good amount of work can take up to 4-5 days 8-10 hours considering 2 hours per work day. I have done take homes from small to big Companies and I have passed mostly barebones. I still managed to get interviews now but now I only consider fang because of this one reason.
if you can’t do leetcode you need to pick companies who give home assignments that’s the main idea
I agree. But at the same time many company doesn't give options and there will be cases we had to do. So my question here is more how to succeed in such cases. What is a best ways to do those.