Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Tamagotchi Take-home test

Bring back the 90's.

You're lonely and bored. Your doritos are stale and no one is online, this loneliness you feel has a cure...A TAMAGOTCHI!

For those of you who have never heard of a Tamagotchi, here's a quick summary:

A tamagotchi is a virtual pet whose life you must sustain through various activities including eating, playing, making it sleep etc. Tamagotchi's go through several life cycles, most notably, egg/infant, teen, adult, elderly. Tamagotchi's can die from lack of attention (in the classic ones, half a day of neglect would kill it) and also from age. For more information check the wiki http://en.wikipedia.org/wiki/Tamagotchi

Your job is to create a tamagotchi via the command line. The goal is to see how you handle open ended design requirements.

Requirements

The tamagotchi must have at least the following requirements:

  1. Capable of being fed
  2. Capable of being put to bed
  3. Capable of going to sleep on its own, losing health from hunger and pooping on its own without prompting
  4. Capable of aging from birth through to death

In addition:

  • You should write this in either Scala or JavaScript (ES6)
  • Use Git for version control and submit your take home test by pushing to GitHub/BitBucket/GitLab.

These are the bare minimum requirements, feel free to get quirky and add weird stuff like diseases and love interests.

What we are looking for?

Treat it like production code. That is, develop your software in the same way that you would for any code that is intended to be deployed to production. These may be toy exercises, but we really would like to get an idea of how you build code on a day-to-day basis.

What does this mean? Tests, documentation and well written code.

Engineers at Image Intelligence

When we’re hiring engineers we look for candidates with the following qualities:

Strong computer science and software engineering fundamentals

We prefer engineers with a solid understanding of computer science fundamentals and strong opinions about the way software should be developed and tested.

Systematic debugging skills

A large fraction of engineering time is actually spent debugging and understanding what's going on inside complex systems. We prefer candidates with a methodical, scientific approach to debugging issues - formulating a hypothesis about what went wrong, and then figuring out the most efficient way or a minimal reproducible case to test it. Engineers also need be fluent in a wide range of tools to enable testing and test automation.

Fearlessness when working on unfamiliar systems

Software engineers at Image Intelligence often need to dive into large and unfamiliar codebases. The ability to quickly navigate large codebases and to hone in on the relevant portions is critical.

A pragmatic attitude toward decision-making

Pragmatism means knowing when to fight important battles, and when it's better to accept a decision even when you don't agree with it so that the team as a whole can make progress. We value quality and attention to detail, we also understand that being first to market sometimes requires compromise.

The ability to solve general problems at massive scale

The broader your skill set - even if it's just a minimal, working familiarity with a diverse set of skills - the fewer bottlenecks you'll find on your execution path. Engineers here need to be comfortable designing and implementing software solutions that scale to thousands of transactions a second.

Automation.

Don't spend time doing what a machine could do for you.

Team player

Here at Image Intelligence your success will largely decided by the success of your team. We favour engineers with the ability to communicate and work effectively with people from a broad range of disciplines (e.g. design, sales/marketing, management).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment