What I expect from employees
I have to be frank, most people don’t care about learning and don’t have a growth mindset.
That is fine, but then I prefer not working with you. And you would probably prefer to not work with me.
I will list some things I expect from employees, and in general people I want to collaborate with.
Personal
- You should not smoke or do drugs.
- You should not drink alcohol
- You should exercise regularly
A healthy human is a better human. Have respect for your own body and mind.
General tech skills & hygiene
- Basics shortcuts in your operating system of choice
- Use AI’s like chatGPT.com and claude.ai to help you with your work
- Use a password manager, the one built into Chrome, passwords.google.com is fine
- Know Gmail shortcuts, and your inbox should always be empty at the end of the day, archive what has been answered Delete emails that have no historical value
- Know how to do screen recordings and screenshots efficiently, loom is a good tool
- Know what compression is, imageoptim on mac, or optimize.photos are good tools
- Know the basics of HTML, CSS, and Javascript.
- Know the basics of python programming
- Naming is important, always have good filenames
- Basics about how a computer and networks work
- How systems communicate with each other, APIs
- How to install extensions in your browser, for example adblockers
Systems and software we use
- Shopify: E-commerce platform
- Airtable: For simple no-code databases
- We have our custom made AI app that integrates with Gmail for customer support
- Business.facebook.com - for insta and facebook messages/comments etc.
- Slack/whatsapp for communication
- Pycharm/Intellij for coding
- Gsuite, meaning Gmail, Google Drive, Google Calendar, Google Meet etc.
- Pio/Autostore: Warehouse management system, cube storage with robots
Company introduction & showing how to do some of the tests
Company “culture”
Note that even for a customer support role at our company, we expect people to be able to code a bit. We really value automation and people who are interested and able to learn new things.
Take a look at our automated warehouse here. I have an ambition to fully automate the warehouse, meaning robots for the last part of the picking process.
General tests before being hired
Before we hire anyone, they need to prove via some loom screen recordings that they have the above skills.
This is the minimum set of skills we expect from anyone working with us.
You can combine all tests into one loom, or make separate looms for each test.
test 1
make a loom and show 15 different operating system shortcuts
test 2
make a loom and show how you would use chatGPT to write a blog post about a topic you know well
test 3
make a loom and show how you would use Airtable to manage a list of contacts, using sorting, filtering, and grouping. And making different views for different purposes, for example filter on “status” or grouping on country or company
Show a few Airtable shortcuts and explain and show the difference between a grid view and gallery view.
Also create a form and show how forms can be use to submit data into a table.
Also setup one automation in Airtable, for example, when a new row is added, send an email to a specific email address.
test 4
Make a loom where you show 5 Gmail shortcuts in practice, and show how you can find all shortcuts in Gmail
test 5
Make a loom and show how you would compress an image, and show the difference in file size before and after
test 6
Make a loom and show how you would use the python programming language to write a script that reads a CSV file and prints out the content
You can use AI’s like chatGPT to help you with writing all the code.
Test out the program on your local machine with a test csv file.
test 7
Read THIS ARTICLE I WROTE about SEO/SEM
and afterwards make a loom and show examples of good and bad filenames. Also do “inspect” in google chrome on a random webpage and show an image with an alt tag, explain in the video what it is.
Also try to explain the structure we see when doing inspect on a webpage (HTML).
What are the different tags and what do they do?
test 8
Make a loom and show how to use “inspect” in google chrome and see all images loaded via the network tab. Also show that you can filter on different type of resources being loaded, for example, only show images. This can also be used to download images from a webpage, demonstrate this in the loom.
test 9
Add the adblocker “ublock origin” to your browser, and show how you can use it to block ads, turning it on and off on a webpage as needed. Also use the google translate extension to translate parts of the text on a webpage, without leaving the page.
Submitting the tests
Send the looms to me, and I will review them.
Conclusion
If you can do all the above, you are probably a good fit for us :)
You can use AI to help you with all the tasks, but you need to understand what the AI is doing.
Back-end developer tests
We have a Kotlin back-end, and we use Postgres as our database. Keyword summary:
- Framework: Spring Boot
- Integrations: Gmail API, Shopify API, Airtable API, Webshipper API, OpenAI API
- HTMX & Thymeleaf+Shoelace (web components) for front-end
- For Shopify front-end it is useful to know Liquid templating language, though this is not part of the Kotlin backend we have, but still a useful skill to have.
The main task is to improve the customer AI app we have built. Which we also aim to be a competitor to systems like Zendesk.
This is the biggest project we have, it does not only include an integration with Gmail, Shopify, OpenAI (AI models) etc. to auto-answer customers (with human in loop), but also returns, complaints and more.
Then we have other smaller tasks like improve the custom review app we’ve built and making new @Scheduled tasks/jobs to automate business processes.
In addition some coding on our Shopify theme, mostly liquid templating+CSS/HTML/JS will be needed.
Note that only I have been working on the codebase so far. All code is written by me. You will be working directly with me and not some legacy project where none of the original developers are around.
One of the things I am a big fan of is deleting code. I think the best code is no code. I “aggressively” delete code that is not needed, so the codebase is pretty small and hopefully easier to understand due to my OCD.
Tests introduction
Test - simple frontend + Backend integration
To pass this test, make a loom showing and explaining all the code and the working web app in action.
Must use frameworks & libraries:
- Spring Boot
- Postgres
- HTMX
- Thymeleaf for templating / server side rendering
- Shoelace, web components library, to make the UI look nice
- Flyway
- For retrieving and inserting from DB, use the new JdbcClient - not Hibernate or JPA
- For the scheduled job, use the
@Scheduled
annotation
Make a spring boot app that on /test
returns a list of products from a Postgres database that has been populated
with a scheduled job that fetches products details from https://famme.no/products.json
and saves them in the database.
Use flyway for database migrations (initial table setup). Limit number of products you save to 10.
Note that one product can have multiple variants, so the json response from that endpoint does not necessarily translate cleanly to one database table, if you decide to solve that with JSONB or multiple tables with foreign keys is up to you. You also don’t need to save all the fields from the json response, only the ones you think is most relevant
For example you could simply use Scheduled with initialDelay of 0, to get the table populated at startup.
The list of products should be nicely formatted in a table, Shoelace should be used for “styling”/components and HTMX for the table to be updated without a page reload. Use Thymeleaf for templating.
So the website would be something like:
- header
- button to reload products
- table with products
and when clicking the button an ajax request is performed(by htmx) to swap the table with the new products.
Finally, make a form on the same page either above or under the main table, where a new product can be submitted. When submitting the form, the product should be saved in the database and the table should be updated with the new product. Again, using HTMX to update the table without a full page reload.
Test - code understanding
You will get access to the code and make a loom to review it:
- Look over the dependencies and explain the role of each dependency, also show examples for each dependency where it is used in the code (if possible).
- Go over 3-5 the TODOs in the code and explain what you would do to fix/analyze them, if fixable Some TODOs are more like reminder to investigate further rather than a bug needing fixing.
- Explain the main things you would do to improve the codebase
You have to use Intellij while reviewing the code in the looms. If you’re a Kotlin/Java developer not using Intellij, you’re doing it wrong :)
Test - Use of AI
NB! When I write “context”, it is context from the repository you will get access to. The test is not only about being able to give an OK prompt to the LLM isolated, but also to choose context from the existing repo which is most relevant to solve the task. That means the code generated by the AI should work with the existing code base
Currently, Claude.ai is the best AI for code generation at the moment, beating chatGPT.
Make a loom where you give where you show:
- Use of Claude.ai and ChatGPT to generate a “new scheduled job to capitalize all Shopify product titles” assess the output of the AI - you should be able to see if the output is somewhat correct or off the mark.
- Use of Claude.ai and ChatGPT to generate a “new scheduled job to send an email to all customers who all customers with orders where a line item has sku X” For this second scheduled job, how do you avoid sending the same email multiple times to the same customer? Assess the output.
Show that you copy paste the code into the codebase and that it compiles, fix any compilation errors if needed, either manually, or by re-prompting the AI.
For both of these scheduled jobs, which context should you give to the AI and why? Context length is not large enough for the whole codebase, so you have to be selective.
Developers who don’t use AI to give themselves “superpowers” are wasting their time 🥸
Shopify Front-end developer tests
These tests are for a potential “Shopify front-end developer” role.
Make 1 loom for all the tests, or make separate looms for each test. The easiest is probably to just use one file to show all the tests below and do it in 1 loom.
test 1
Make a loom showing how to: use
shopify theme pull --store=...
, shopify theme dev --store=...
, shopify theme push --store=...
to develop on a shopify theme locally.
test 2
Make a loom showing how you make a script in your favorite language that reads the products from:
https://famme.no/products.json and prints out the product sku:price, for all the skus and prices in the json file.
test 3
Make a loom demonstrating your understanding of css grid and flexbox in practice on a real theme
test 4
Make a loom showing how to render a metafield in a shopify theme, and how to add a new metafield to a product
test 5
Make a loom showing how to render information conditionally on domain, tip: request.host
which is relevant for country domain
test 6
Make a loom showing how to use media queries to render different content based on screen size, for example a separate mobile image and desktop image