Introduction
Job Reviews is a new BMJ product that will let doctors create reviews of medical jobs, posts, and rotations. It is designed as a mobile first responsive website and it is part of the BMJ Careers family of products.
In this article I will describe the reasons behind this project, how we implemented it and what is next.
Architecture
Job Reviews is a combination of two different modules (see Figure 1). As a result we have a small SOA (Service Oriented Architecture):
- Back-end: exposes the data and functionality as an API following the HAL specification [HALSpec].
- Front-end: user interface that communicates with the back-end through its API and renders the information in a responsive and user friendly way.
Figure 1. Overview of the Architecture of Job Reviews
There are many new technologies involved in both modules. Some of them were never used before at the BMJ, including the latest version of Node.js, 0.11.x at the current date.
These are the most relevant ones:
-
Back-end:
-
Node.js [Node]: platform built on Chrome’s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
* Co [Co]: Generator based flow-control goodness for Node.js and the browser, using thunks or promises, letting you write non-blocking code in a nice-ish way. * Koa [Koa]: Koa is a new web framework designed by the team behind Express, which aims to be a smaller, more expressive, and more robust foundation for web applications and APIs. Through leveraging generators Koa allows you to ditch callbacks and greatly increase error-handling.
-
-
Front-end:
- AngularJS [Angular]: AngularJS is an open-source web application framework, maintained by Google and community, that assists with creating single-page applications, one-page web applications that only require HTML, CSS, and JavaScript on the client side. We also used Gulp [Gulp] for building and Mocha[Mocha] and Protractor [Protractor] for testing the back-end and front-end respectively.
We created a Continuous Delivery [CD] pipeline that we used as part of our continuous integration and release strategies. This let us validate our code very often and put new features into production automatically very easily. Given that we built this product following a BDD/TDD approach, this was fundamental in order to achieve our quality goals.
In addition, we made use of Vagrant [Vagrant] to box up everything in a reusable Linux-based container.
Development process
Job Reviews was built up in our Co-Lab laboratory were a study was conducted in order to validate the need for the tool and the interest of the medical community. It was decided to tackle this project as a mobile first website in order to make the most of the new trends in usability and UX (User Experience).
Once this initial work was done, the project was handed to a Scrum team in the Technology department that followed an agile iterative approach to build the product.
The process began with an Impact Mapping [IMap] session to make sure everybody was on the same page.
“Impact mapping is a strategic planning technique that prevents organisations from getting lost while building products and delivering projects, by clearly communicating assumptions, helping teams align their activities with overall business objectives and make better roadmap decisions.”
Following the TDD principle “write the tests first” a high quality product was built and released to production through a Continuous Delivery pipeline created in a Jenkins CI (Continuous Integration) server.
BDD was used in the front-end module in order to collaborate with the product owner and other domain experts. As a result we all got a shared understanding of the domain model while creating a collection of feature descriptions to be used as both a development guide and as a suite of automated tests scripts.
The Scrum team coordinated with the Operations team to set up the load-balanced servers and the deployment scripts.
We used the GitFlow convention as our branching model [GitFlow].
MVP
After a few pre-releases, we finally released the first MVP (Minimum Viable Product) in beta [JR] (see Figure 2), which is accessible from the BMJ Careers site [Careers].
Figure 2. Evolution of the Job Reviews UI
This first version includes the following features:
- Search for Hospitals and LETBs: as the user types in the name of a hospital or LETB he will receive suggestions. If the input is not descriptive enough to narrow down the results to less than 10 items, the user will be given a “Show more” option to get to a results page in order to browse all the matching results.
- Inspect hospital details: once the user gets to the relevant hospital details page, information of that hospital will be displayed, such as address and contact details when available, and previous reviews and statistics.
- Submit a review: on the hospital details page, the user will be able to submit his own review. It will be posted anonymously. The user will need to verify his identity via a Facebook account or an email address.
What’s next
The next step in the roadmap is to let the users decide the future of this product. It will be available as a beta for a period of time, during which we will gather user feedback.
Some improvements we already have in mind include:
- Additional search criteria such as by location, by postcode or by score.
- Additional sign up mechanisms including Twitter or Google+. So the very next thing is spread the word and get as much feedback as possible.
References
- [HALSpec] HAL Specification
- [Node] Node.js official site
- [Co] Co repository in GitHub
- [Koa] Koa official site
- [Angular] AngularJS official site
- [Gulp] Gulp official site
- [Mocha] Mocha official site
- [Protractor] Protractor official site
- [CD] Blog about Continuos Delivery
- [Vagrant] Vagrant official site
- [IMap] Impact Mapping official site
- [GitFlow] Blog post about GitFlow
- [JR] BMJ Careers - Job Reviews
- [Careers] BMJ Careers site