The first problem might look like a warm-up, but it’s a bit more complicated than it seems. 🙂
Johnny runs a successful company. One of his biggest challenges is figuring out how much to pay his employees. Johnny is sure you can design a system that can automatically determine this.
PayBot is a system that crunches data from all sort of software the company uses, gathering information about employee activity. Based on this PayBot, Johnny is able to output the optimum salary per employee.
Since his company is so successful, Johnny expects to bring in many new employees, so PayBot should be designed with scalability in mind. PayBot should give relevant results for a company with 2 employees as well as for one with 100,000 employees.
Johnny is very picky, he wants PayBot:
- to integrate with the tools the company already uses and to be able to adapt to new tools.
- to be able to detect any attempt to trick the score.
Johnny knows that the solution is limited to gathering feedback based on the software that the company uses, but he is already working on the requirements for version two.
What You Should Do
Meanwhile, you must design version one:
- Describe PayBot’s architecture and sketch the object model.
- Point out the information PayBot needs in order to perform its job (interfacing with the software company uses like CRM, Wikis, Bug Trackers etc).
- Describe in detail the metrics used, the algorithm that outputs the salary based on the gathered data. Use your imagination!
- Explain how PayBot scales with the number of employees.
Consider the following tips when you build your example:
- Make sure you consider the easy integration with third-party software. There will be more and more tools thecompany will use!
- Take a look at the APIs of the software some companies use. For example, many IT companies use JIRA for tracking software engineering activity.
- Consider dynamic metrics that adjust over time (Bitcoin might be interesting to research).
- Large fluctuations in salary have a negative impact. Try to smoothen them.
- The details are vague enough to allow for a lot of design flexibility. Take advantage of it.
Coding is not necessary, but some kind of pseudo-code might help you explain the idea and algorithms! We wish you a very hot weekend and if you have any questions, do not hesitate to comment on this article!