Position: Junior Mid Developer at Funding Circle

Building the platform Funding Circle is a peer to peer finance application. My role was focussed around the development and maintenance of Funding Circle's online platform.

Experiences

Agile workflow This was my first real exposure to agile methodologies on a large scale. We began working scrum style, we looked at tooling like mingle, but that process continually evolved and moved away from scrum and ultimately we used physical boards and cards.
Implementing the continuous integration Implemented Jenkins CI on a local linux machine. We decided quite early on on a git merge strategy that would best suit us all and enable multiple features to be developed in parallel.
Scaling backend reports. Extracted existing HTML & CSV reports that were naively implemented and not scalable, rewrote them in Ruby using cron based periodic tasks to defer the generation of large datasets. Designed an OO interface that would allow different legacy reports to be ported quickly to this architecture.
Rebuilding the sign up. Worked in a small team using Cucumber & RSpec to drive features. We took the existing Symfony app and rewrote the sign up forms using Rails. We implemented shared sessions by exposing the Symfony session to Rails via a json endpoint. We used the client_side_validations gem to quickly generate model based validations for forms. We redirected urls using a combination of url rewrites ( Nginx ) and PHP Symfony filters in order to integrate the Rails code into the existing Symfony app. Styled using Bootstrap CSS framework.
Implementing the new stylesheet. On the landing page and on numerous stock pages. Used CSS and image maps.
Implementing the secondary market as a service. Implemented an Active Model based presenter for searching loan parts, using jQuery based ajax and Haml templates, fed by a series of JSON API calls. Modified API endpoints and worked with Ruby based Elasticsearch integration code to modify filters. Later implemented the OAuth client code for this service.
Refactoring the two part credit check. Lots of domain logic had been leaked into the controller, we extracted it out into domain objects ( hexagonal style ) through bdd with RSpec and Cucumber.
Scaling the sell page. I used a hybrid of Rails and its Active Record query interface to break out and scale legacy endpoints that were collapsing under load and also to implement search and pagination ( Kaminari ) for the same feature. I then integrated it into the existing Symfony page ( to avoid a grand rewrite ) using a combination of jQuery driven ajax rendering haml templates, and url rewrites ( Nginx ) redirecting to the masquerading Rails actions.
Working with the API. The API was based on Ruby/Rack API dsl mounted in Rails in conjunction with a decorator library and templating dsl to build the API. I have worked at various times on this part of the architecture adding endpoints and modifying existing ones to address scale problems.
Modifying the loan book summary. Built up a library of Ruby code using PORO, RSpec and some metaprogramming - over the results generated by a complex stored proc - to aggregate the data into a summary view. This feature depended heavily on complex untested legacy stored procedures that took several hours to generate their report data, but time constraints meant we could not port them to Ruby, so I used RSpec to generate ‘data signatures’ for the generative stored procedure and then tested permutations of that against the Ruby code as integration tests. Deprecated the old summary stored proc and shipped it.
Rewriting the broker application flow. We used an AngularJS frontend that would gracefully degrade to an HTML only series of forms, driven by a Rails app, driven by an API ( SOA ), this project was put on hold while higher priority problems were addressed, I believe an evolution of it is currently being developed.
Implementing whole loans. Broad surface area of effect. Touched on many parts of the system. We used a combination of: Modification of existing stored procedures, modifications to various services, modifications to the admin backend: Using domain objects, feeding into Rails, feeding into embedded iframes inside existing legacy Symfony templates. Created new API endpoints to facilitate the sale of whole loans.
Porting loans to the new SOA. We used raw SQL scripting and Postgres import/export capabilities to export data structures to a new schema ( doing this in Ruby would have proved prohibitively slow ). We then developed a data comparison reporting tool in Ruby to check the consistency and integrity between the two schemas. We used the adapter pattern and repository pattern to facilitate switching existing features to new service. This project is ongoing.
Mentoring During my time at Funding Circle I mentored many new developers on the architecture of the app ( and how to get it up and running in development ) and on development techniques such as BDD with RSpec and the usage of the Vim editor.
Maintaining the symfony app. Used a lot of unix command line, Vim & regular expressions to manage the legacy codebase.

Skills

  • Ruby On Rails
  • PHP Symfony
  • Agile Methodologies
  • Git
  • Jenkins
  • Linux