Goal of test isn't to "gotcha" you and your rails knowledge.
It's to give a microcosm of our general app and an idea of the space we work in, while also providing you and us an opportunity to see what it's like to work together. Technical screens are hard to get right. There is a great deal of bias in them that generally hedges on the wrong things. We'd rather provide the candidate an opportunity to see if they like us and vice versa.
Bear with us, this will always be an evolving process! Long term goal is one test, but we're in the middle of the transition:)
Some pre-knowledge!
- We're going to be looking at Messages. They are at the core of our product. While this does not match our actual implementation, it is meant to be a much simpler version of it (something you might see as a first draft).
- This app has most of this implemented already! Worth checking out and exploring in advance, although it should not be entirely necessary. Public View Only Miro Board
The exercise is two parts. Let's add some (hopefully) simple functionality, test it, and then have a conversation to see what it would take to extend messages long term.
It is also important to give you space to ask questions around the culture and identity of Liscio as a company.
Format:
- 20 Minutes pairing
- 20 Minutes discussion
- 10 minutes of questions (these can also be peppered into your pairing session, by all means use the time to get to know us!)
- Please ensure that you use an IDE that you are most comfortable with. We can also drive or provide an alternative if necessary
- Ensure that screen sharing with Google Meet works, we can also use zoom if that is more comfortable
Theoretically bin/setup
will get you most of the way there assuming you're using a machine currently configured with
Rails/Ruby. However, to get completely setup you might need a few things:
- Install homebrew by running this command, this also installs xcode command line tools:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
** Note the instructions to add the brew shell env to your profile, this is very useful, don’t skip that.
- Use Homebrew to install your Ruby Version manager (if you don't already have one)
We use asdf, but some members use rbenv
and rvm
.
asdf:
brew install asdf
Ensure the plugin for asdf is installed
asdf plugin add ruby
Then install Ruby 3.1.6
asdf install ruby 3.1.6
asdf global ruby 3.1.6
- Get ready to install postgres
brew install \
libyaml \
openssl@3 \
gmp
- Use Brew to install Postgres
You’ve got some options with Postgres. If you want an all inclusive package, do the following:
brew install --cask postgres-unofficial
sudo mkdir -p /etc/paths.d && \
echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp
brew install libpq postgresql@15
brew services start postgresql@15
# add libpq to your path for ZSH - sometimes it is required in a different bash profile
echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc
# make sure Postgres is running
pg_isready
- If you haven't already, clone this repo into a folder of your choice
- Run the setup from the repo directory
bin/setup
- Run rails (Hopefully this has been painless!)
rails s
If you get stuck with any of the above, feel free to reach out! It's a side note but if there are major issues (sometimes there are!) bring them to the interview. A worthwhile exercise might just be troubleshooting your issues since this is supposed to mimic a dev experience :)
Feel free to play around! But the thing we mostly want to see working as a good test is creating a message with recipients.
Use whatever IDE/etc you're most comfortable with, but here's a sample cURL command for viewing all messages:
curl -v \
-H "Accept: application/json" \
-H "Content-type: application/json" \
http://localhost:3000/messages
Sample Command for creating a message:
curl -v \
-H "Accept: application/json" \
-H "Content-type: application/json" \
-X POST \
-d '{ "text":"this!","sender_id":"2", "message_recipients": "[3,4,5]"}' \
http://localhost:3000/messages
While we recognize AI tools such as ChatGPT are becoming more ubiquitous with people's day to day and there is a solid argument to be made that using AI can be part of a normal workflow and should be allowed since that is what we are trying to emulate - for the purposes of this interview we ask that it not be used to generate code outside of basic IDE auto-fills. What we're testing is your ability to think through and understand a problem. Thanks for your understanding.
Ruby Version Manager
- We currently use asdf but feel free to use whatever you're comfortable with. Even if that's good ol'
ruby
Serializers:
Annotation: Annotate Gem
Various Rails/Dev Resources
-
Undoing some of the installing you have done:
- Ruby version
- 3.1.6
- Postgres Version
- 1.5.6