Pergunta de entrevista da empresa Dotfive

The coding test is best shown as a copy and paste so you can appreciate the scope of it. Coding test This coding test is designed to show us your thought process and approach, as well as demonstrate your skills. How much effort you put into it is up to you, but typically we would expect two to three hours is reasonable. Some people choose to spend more - that’s fine, but not required. You are welcome to stop whenever you like. We are not expecting you to spend an insane amount of time on this. We feel that, using the right technologies, it is possible to achieve what the test asks for, in the timescale indicated. If you cannot achieve everything exactly as you would ideally like, let us know. Feel free to ask us questions if you need to. Technologies Use whatever languages, frameworks, etc. you feel are best, or are most comfortable with. This could be something spangly-new and cutting-edge, or old-school and boring - it’s your call. Points will not be won or lost based on this choice, providing it is fit for purpose for the requirements. The only technology requirement that we have is that it should be able to run on Linux - either a standard Linux VM, or using AWS systems. Beyond that, you are free to specify architecture and system dependencies as you see fit. Please choose an appropriate CSS framework or implement something so that what we review is pleasant to look at and shows some thought as to layout and interactivity. Requirements Create an application which will allow at least two users to log in simultaneously and manage items in categories. The categories should be in a hierarchy of potentially infinite depth. The items only require a label. The users should be able to perform standard CRUD (including moving items and categories around in the hierarchy), plus if one user makes a change, the other user should see the change (if appropriate) without manually refreshing their page. Your solution should follow best practice and be robust and scalable. User journeys Mark wants to keep track of his belongings. He logs in, and is presented with a list of categories, showing the different levels visually. He adds “Electronics”, and under that, “Televisions”. To this category he adds the items “49-inch LCD”, “40-inch plasma”, and “32-inch CRT”. Sandy logs in and creates “Gaming consoles”, and under this, the items “PS4 Pro”, “XBox One X”, and “Nintendo Switch”. Mark sees Sandy’s entries appear. He moves “Gaming consoles” to sit under “Electronics”. This change appears on Sandy’s screen as soon as he has done it. Bonus points The following areas are not required, but if you choose to include them we will count them as bonus points. ● Authorisation (user levels, permissions, ACLs, roles, etc.) in addition to authentication. For instance, allowing some users to edit, and some to view only. ● Appropriate and sensible tests. ● Any other dimensions on the data that might be useful, e.g. tagging. ● Responsive design techniques for different screen sizes, mobiles, etc. ● Any form of notifications - e.g. toast, element styling - to alert the user that something on their screen has changed.

Resposta da entrevista

Sigiloso

21 de fev. de 2018

When I first read the coding test I knew it was going to be longer than 3-4 hours and had a moment where I considered refusing and moving on but I figured maybe they just had a high cutting threshold. Lesson learned the hard way! I cloned a previous Laravel project of mine to serve as the basis since it had the main front-end framework in place and a full user management system. I then stripped out what was not required and went on to implement a JQuery nestable sortable list, real-time remote user interaction via the Pusher service and a clean stylish modified Bootstrap 3 interface. To put all this together took longer than 3-4 hours but I wanted to make a good impression. I sent a git archived version of the project to them and they came back asking for the .git directory to also be sent. They failed me with: "Oddly, he has started out with something called "[redacted - my previous project name]", which means he has not started in the right place for the test. He has gone above and beyond in some places, but he has not stuck to the brief. Rather than ask questions, he has put stuff in which is not necessarily needed. That loses points for accuracy. We can tell that he doesn't understand some of the stuff he is using - and that begs the question, why is he using this for a technical test?" I did mention in the docs I returned to them that I had tried to use Vue components for the nested list which I didn't have much experience with but after realising my mistake I backtracked and went with a JQuery method instead (Jonas von Andrian's sortable list). I initially went with Vue because a quick search showed a few nestable list solutions were available were as the few JQuery components I could find all had long lists of bugs on their github pages. My hope was that the Vue components would be easy to adapt but I spent too much time trying to get my head around the quibbles of integrating them with Laravel. All trace of the Vue components was removed and I worked out some fixes to make the JQuery component work how I wanted. The solution I sent them was 100% functional and met everything in their spec including 3/5 of their bonus list. Anyhow, clearly I am still choking on sour grapes so make of this what you will. I'm taking this as a lesson learned and the next time I am presented with such a test of this scale I will just refuse it and move on to the next.

1