A Proposal for an iOS Coding Challenge
During an interview process I was asked to do a coding challenge a while ago. The employer had an app with API calls and good stuff. However, the coding challenge asked only to calculate the Fibonacci sequence and display it in a table view.
What was interesting was that I’ve got for some years an app in the AppStore that calculate Fibonacci and Pisano Period.
The other rare requirement was the delivery process. They asked the candidates to fork the coding challenge project in GutHub. So, at the end, all the candidates were able to check others code. Fail.
During a face-to-face interview I asked them about that. And they agree that they need an improvement in the process.
Sometimes because the company is too small. Sometimes because they do not have the knowledge. Sometimes because they don’t know how to do it.
Here we go!
So, I’m proposing a coding challenge. The idea behind is to use the Stackoverflow API. If you do not have resources in your company to build a fake API, use Stackoverflow API! You can also check the Coding Challenge Proposal on GitHub
This is the proposal:
- You will need to connect to Stackoverflow Users API Endpoint and retrieve the first page of data. FULL API documentation
- Display the retrieved data through a TableView.
- We expect from you to display at least username, badges and gravatar for every user.
- While the gravatar is being downloaded, the UI should show a loading animation.
- Each of the photos should be downloaded only once and stored for offline usage.
- The UI should always be responsive.
- Language: Objective-C
- iPhone 5/5s/6/6+/6s/6s+
- You care about the user experience.
- You create elegant, clean and maintainable code.
- You develop in a way that has clearly defined areas of responsibility.
- You develop in a scalable manner.
- You pay attention to details.
- You know how to keep the UI responsive.
- Push the code to an online repository and send us the link.
- Update your project README file with any relevant information.
- We expect from you a complete Xcode project.
- The app must run as is.
- You are free to use any third-party library
There are some recommendations on the coding challenge. But we cannot put everything there or it will be too easy for the developer.
- The project meets all the criteria? The most important one!
- Is the developer using prefixes in the project? Remember.
- Are the classes grouped in folders. Managers, Networking, Categories, Views, ViewControllers, Model, etc.
- Is the code clean? No code commented, no unnecessary extra lines, always the same criteria.
- Is the code documented?
- Are the classes as small as possible? Or everything is in the ViewController?.
- Is the project using small managers / services to avoid repeated code?
- Networking calls properly organized / centralized through an APIManager?
- Probably Core Data in the best way to persist the data.
- Is parsing the data in the main thread? Or in a background thread?
- Is really storing the images? Where? How?
- GrandCentralDispatch or NSOperation for background jobs. You can ask him why is using one or the other one. NSOperation is higher level so sounds better.
- It is using a FetchResultController to update the TableView?
- AFNetworking to retrieve data from the server? 1.0 or 2.0? Really 1.0?
- Where is parsing the data? In a separate class, right?
- CocoaPods to import third-party libraries?
- Do the project have tests?
- Do the project uses Continuous Integration?
Please, if you are evaluating a Coding Challenge, send background to the developer. It will make the developer happy. Also it will give the developer the opportunity to improve or maybe even send you a second version and surprise you.surprise you.