Crossover Interview 2017 vs. 2019
I have worked as a Java Chief Software Architect for Crossover since June 2017. Last December I asked to be moved to the marketplace to find another company there which was not a part of ESW Capital because I became tired of unproductive work at Redknee (Optiva). When I was moved to the marketplace a guy from Crossover informed me on the phone that I did not have enough scores and I needed to go through the whole interview process again to appear in the marketplace 😲. I instantly remembered the interview in 2017…
Interview for Java Chief Software Architect position at Crossover in 2017
I do not remember all the details already but the process looked so:
The first step was some simple test that I do not remember already.
As for the second step I received a document that stated:
The overall goal of this trial is for you to review existing code and design, fix tests, and evolve an already existing application. The source code package of the application can be downloaded from here.
I needed to deliver the following (and I only had 1 day for it):
- Demonstration Video
- Database scripts
- Readme Document
- Review Documents
- Source Code
An archive with my completed task is here. For convenience, I have published the source code on GitHub and this is my demo.
The third step was to prepare another demo answering 5 questions:
- Provide 5 bad coding practices examples and describe why they are considered as bad practices.
- Create a diagram to describe continuous integration and delivery process end to end. In 3 bullet points provide 3 tools you will use in your process and describe why they are the right choices.
- Describe one hard technical problem you faced in your last major project. Add a section to your slide that describes the problem, a section describing the solution, and a section describing what you learned from this problem that you will reuse in your future projects.
- List and describe 3 real use cases you will select NoSQL databases and 3 real use cases you will select relational databases. Explain your decisions.
- List 5 techniques you suggest to use to ensure high quality and maintainable code. Select one technique and describe how you will apply to your daily routines and activities.
The fourth and final step was a technical interview with a Crossover employee of 30–60 minutes. I had to answer there a lot of technical questions and I remember only one of them: how would I implement Instagram? In fact, the interview took around 15 minutes.
There was one more call with HR but it was only needed to confirm some points by voice.
I started that process on 04.06.2017, appeared on the marketplace on 15.06.2017, and got an offer on 26.06.2017. It’s not worth mentioning that most of the things I showed in the interview were not needed during the work.
Interview for Java Chief Software Architect position at Crossover in 2019
This time the process was completely different!
This time the first step (technical screen) consisted of 3 sub-steps:
- A simple questionnaire with questions about past experience
- An audio recording (2–5 minutes of length) in English answering the following questions:
- What you believe are your top 3 skills (from your previous work experience) that will help you the most in this new position.
- What professional achievement are you most proud of?
- What mistake have you recently made and what have you learned from it?
- What assumptions do you no longer make?
- What is the biggest risk you have ever taken?
- A technical questionnaire consisting of 55 questions where the final step was coding
The second step of the interview was a task like it was in 2017 😶. See the code here. Besides, I needed to answer the following questions (NO IMPLEMENTATION WAS REQUIRED IN THESE QUESTIONS):
- Product Owner asked you to implement a new feature to send SMS notification on every completed transaction. SMS notification is a rest based service and is only available on a staging server. You are provided with detailed API specifications for SMS notification service. How will you start development and test your code without access to actual rest API?
- After launching the users of the CrossLibrary application grows and database size grows exponentially. As a consequence, this API of CrossLibrary sharing users /api/member/top-member becomes very slow. Keeping in mind the current structure of database tables, propose three different possible solutions/improvements to increase the response time of this API?
- How will you create the CI/CD process for this application? Propose the tools, technologies required to achieve CI/CD in general.
- After 1 year of launch, transactions increased a lot resulting in a lot of insertion requests to the database. Consider there is no room to further increase the size of the server and changing database is not an option. How would you solve the massive slow insertion of each transaction request?
My answers to the above questions:
- Any mock rest service can be used for that:
- Possible solutions:
— MySQL 5.6+ does not have materialized views (https://dev.mysql.com/doc/refman/5.6/en/faqs-views.html#faq-mysql-have-materialized-views) that’s why we can create an additional table keeping top members and update it each time using a trigger when the Transaction table is updated. The API could use data from this new table to decrease the response time.
— The API can respond asynchronously using Apache Kafka or Apache ActiveMQ and the clients can get responses from there when they are ready.
— Spring 3.2+ supports the async features of Servlet 3.0 (https://spring.io/blog/2012/05/10/spring-mvc-3-2-preview-making-a-controller-method-asynchronous/). This feature can be used by API to respond asynchronously.
- CI: In-premise Jenkins CI (https://jenkins.io/) or https://travis-ci.com/ to handle GitHub repos for instance
CD: Jenkins Pipeline (https://jenkins.io/doc/book/pipeline/) or Ansible (https://www.ansible.com/)
In general, there are a lot of tools to build, verify and deliver/deploy the code automatically:
— CruiseControl: http://cruisecontrol.sourceforge.net/
— JetBrains TeamCity: https://www.jetbrains.com/teamcity/specials/teamcity/teamcity.html
— ThoughtWorks Go: https://www.thoughtworks.com/continuous-integration / https://www.gocd.org/
— Drone: https://drone.io/
— GCP: https://cloud.google.com/solutions/continuous-delivery/
- A possible solution is to apply MySQL LIST Partitions (https://dev.mysql.com/doc/refman/5.6/en/partitioning-management-range-list.html). Each issue date’s month should have its own partition. If possible the partitions should be stored physically on different disks.
And the final part of that step was Criteria Cognitive Aptitude Test (CCAT). I answered only 31 of 50 questions and it seemed to be a failure because the expectation was the following:
You will not be able to find it anywhere because the company does not show its expectations. Weird!
I applied for the Java Chief Software Architect position on 04.01.2019 and submitted all the things on 10.01.2019. The result is expected this week. Let’s see! 🤞
P. S. I published this article because videos like this and descriptions like this do not give the full picture. Be prepared and good luck there!
P. P. S. Of course, I do not pretend to be the best programmer ever and my answers may have mistakes. One of my core values is transparency, that is the only reason why I shared all this stuff including my answers.