Donate using PayPal

CycleStreets blog

News from CycleStreets

Archive for June, 2015

Summer intern sought to help develop our codebase

Wednesday, June 3rd, 2015

CycleStreets is seeking a Cambridge (UK) -based intern over the summer, to help us improve our codebase quality.

Over many years we have built up a very large codebase, which runs our Journey planner and Photomap. There are also other sections, such as a collision data viewer, points of interest pages, a (somewhat out-of-date) help/about section, geocoder, user profile system, information pages, etc. This codebase primarily consists of over 225 PHP classes, averaging about 500 lines of code each. Interactive elements of the site are underpinned by a stable API.

We are in the middle of a major redesign (hence our quietness on this blog lately!) to solve various usability issues, modernise the look and feel of the site, add new facilities such as drag-routing/waypoints, and fundamentally unify the many sections of the site into a coherent whole. We have a powerful API under the hood, but we feel this is not reflected positively in our user interface.

We are sometimes slowed down in development by older code, pointing to the need for refactoring in several key areas. For instance, we want to complete our migration to a fully-templatised MVC structure. We want to deprecate our current mobile website by making the new design responsive while retaining the mobile site’s current innovations. We want to replace direct database calls with new API-based calls, so that the site effectively becomes a fairly independent consumer of its own API.

The two-month paid internship will be based in Cambridge (UK). We consider that regularly in-person discussions are likely so that the code can be understood properly before commencing with refactoring.

The intern will be hired as an proper salaried employee, and we understand that a going rate in the area for an internship is around £380/week; we will also come to a flexible arrangement regarding working locations and/or expenses for public area working to ensure that the successful employee is never out-of-pocket.

The position would be suitable for someone with:

  • A passion for refactoring, continual code quality improvement, and with an eye for detail;
  • Experience of writing good-quality object-orientated PHP code, based on traditional class structures, which runs without any notices/warnings;
  • Interest in user interface design, particularly with reference to mobile interfaces;
  • Some javascript knowledge would be helpful, as this needs some improvement, but this is lower priority than solid object-PHP skills;
  • A desire to promote practical cycling and support the cycle advocacy movement – we want someone who believes in what we’re doing, rather than just seeing this as a general coding job.

We are not expecting someone with many years of development experience, as such a person would be in a stable job, and the salary level is not intended to reflect this. What is more important to us is someone with the right mindset, a fast learner, who can work at a good rate. Being an internship, this will be a two-way arrangement, with us helping give the student knowledge of working in a large codebase and the challenges this brings – though we do want someone who is a self-starter that doesn’t need prodding constantly.

To apply, drop us a line via e-mail by the end of Wednesday 17th June 2015, explaining your interests, with your thoughts on our site (such as a critical analysis, maximum 2 pages at most), and point us to any code you have written (public code on Github is always a good sign).

(Edit on 6th June: We’ve extended the deadline slightly; previously 15th.)

Photo from a developer day, 2012

We welcome your feedback, especially to report bugs or give us route feedback.

My comments relate to: *






Your comments: *
URL of page: * https://www.cyclestreets.net/footer.html
How did you find out about CycleStreets?:
Your name:
Our ref: Please leave blank - anti-spam measure

* Items marked with an asterisk [*] are required fields and must be fully completed.