You're probably here because we've been discussing a possible role at The Fresh working on Leadflo. If that's the case, congrats!
To move forward, we need to understand how you work and, crucially, how we work together. As such, this project includes a set of take-home challenges that you can choose from, which you should spend no more than 4 hours on.
We will then use your work to kickstart a discussion on how you work, how we work and how we could possibly work together. Regardless of outcome, you will always have the opportunity for feedback (ghosting is not ok!)
Hiring is hard. And we know that take-home exercises are up there with whiteboarding.
As such, we hope our informal contract to you makes this process easier and reduces the risk to you:
- We respect your time and insist you spend no more than 4 hours on it. Show us your skills but we're looking for scope management skills just as much as technical chops
- We don't want you to rush or go overboard. Work at your own pace, don't rush or be a perfectionist. We understand scope can force certain decisions - take those decisions and explain why
- We don't expect you to complete everything too. As above, we want you to show us where you draw the line on dropping standards to get things over the line
- We will give you something relevant to our domain. We're not going to ask you to rotate a binary tree or implement A* path finding. These exercises are things you could work on in an interation
- We are fully remote so synchronous pair programming is impractical, without me looking over your shoulder. This is how we work day to day
- We have provided a working development environment, using docker, kitted out with stack we use on the Leadflo project day to day
- We will always give honest, constructive feedback no matter the outcome. Ghosting is a serious problem in recruitment and you always deserve to know where you stand, no matter what
- We don't want a free lunch. Although these tasks are relevant to what you will be working on, we don't expect you to work for free and we will not use any of your code from these exercises
You will need these installed to use the provided development environment:
- Docker for Desktop (or equivalent if Linux)
- Node
- Yarn
- PHP 8.0+
What to do:
- Choose an exercise
- Create a new private repository for your work and add James Dunne as a private collaborator
- Complete as much of the exercise in 4 hours or less using the provided development environment
- Be sure to:
- Replace this README.md with screenshots and useful instructions
- Write a ROADMAP.md with suggestions on what you would add/change
- Include automated tests
- Leverage the respective type systems in both projects
- Document your code inline (lightly, don't go overboard)
- Use Git - a commit history is valuable
- Let us know when you're done (email james@thefreshuk.com)
- Wait and hear back from us - usually this will be the same day or next working day (we don't work weekends!)
Using the development environment:
- Use
docker-compose up --detach
to boot the API and infrastructure - Run the following to start the UI:
cd projects/ui
yarn start
Choose a single task and:
- Understand the user stories
- Look at the mockup
- Implement the UI (inclue a rudimentary save button)
- Design and implement the API
- Both the read and write
- Design and implement the persistence schema
- Implement reading and writing to persistence
Leadflo targets the private dentistry niche. Naturally, dental practices have opening and closing times. We can use this information to tailor certain automated communications so leads know when to expect a response.
As a practice owner, I want to...
- View the currently configured business hours
- Adjust the times for a certain day
- Close the practice on a certain day
Given that we will only read opening hours and not depend on it (e.g with foreign keys), this may provide opportunities to simplify persistence. Deleting all opening hours and re-inserting them is a viable option.
Don't worry about tenancy here. Pretend we're using a single database per tenant.
As part of their business, private dental practices sell treatments to patients. This is what provides value as a business. We can use this information to calculate the total value of patients, the total value of the pipeline and each stage within it and eventually a customer lifetime value.
As a practice owner, I want to...
- View the list of treatments offered by my practice
- Adjust the price range of existing treatments
- Add a new treatment offered by my practice
Given that this will be depended on in other parts of the application, we must careful how we persist treatments. Deleting them all and re-inserting them is not an option here.
Don't worry about tenancy here. Pretend we're using a single database per tenant.