Things I've worked with and consider worth noting:
- (OO) PHP (5 and 7) Development, MySQL. Git (GitHub, Gitlab & Bitbucket).
- Symfony, Doctrine, Slim.
- Open source PHP package development and release through Composer & Packagist.
- Advocate and practicioner of BDD & TDD. Mutation testing for ensuring tests are of a high quality.
- Static analysis & code style tools (phpstan, phpcs, psalm)
- Agile working and conversation-led design by example in code.
- Docker containerisation.
- Continuous integration, continuous delivery pipelines and automated deployments using Jenkins and TeamCity.
- Quality and analysis tooling with PHP_CodeSniffer, phpstan, Sensio Labs Insight, Coveralls, Scrutinizer.
- Comfortable with a *nix command line and BASH scripting.
- Leading a development team and mentoring new apprentices and testers as well as mentoring people in the community in my spare time.
- Agile workflow with sprint planning, daily scrums, planning poker and retrospectives.
- Experience with various Linux distros as well as OS X, and Windows (with WSL) environments for development.
For talks I've given, or events I've been a part of, check the 'Talks' page.
Events & Community:
I'm a member of, and previously an organiser (for 4 years) for PHP East Midlands, a PHP user group that holds talks and events every month. In 2014 we ran 'PHPEM14' our first 'Unconference' where everyone from new speakers to more established speakers and conference-goers could come, take part, give talks and request things to talk about. This was off the back of PHP North West 14 (PHPNW14) side-track unconference when we realised there was a desire for a smaller, more off-the-cuff event in the UK where anyone could participate.
I organised and ran the Unconferences in 2015, 2016, 2017 and 2018.
Helical Levity January 2019 - Present
Building tools and platforms to educate and train people in the field of Cyber Security.
Automated testing and full coverage with PHPUnit and Infection for mutation testing. Behat for BDD and Acceptance tests.
Quality and standards enforcement with PHPStan and PHP_CodeSniffer.
Viva IT: August 2015 - December 2018
Senior Software Developer and Community Evangelist
Technical: Working with Symfony, Doctrine, and multi-tenant environments for distributed-service based applications. Ansible and Vagrant for provisioning, automated CI & builds with TeamCity. Automated and continuous testing using Behat, phpspec and PHPUnit.
A lot of the tasks and challenges I undertake required outside-the-box thinking (the best way I can describe it despite my dislike of buzzwords) - the problems often had very unique constraints on what could and couldn't be done with the systems we were working with. As such, the solutions were unique and the challenges interesting.
I've worked heavily with Ops-related tasks using Ansible primarily for reliable provisioning and regular (mutliple times a day) deployments.
I've also worked a fair bit with TSQL to enable us to work with a 3rd party database for one of the core parts of a software ecosystem we were building.
Leading and mentoring the development team to continue making high-quality, well tested and robust business-critical software with code reviews, whiteboarding problems and pair programming. Daily scrums, planning poker and sprint retrospectives in leading an agile workflow.
Behaviour driven development and design by examples through conversations and collaboration.
Facilitating and giving talks, knowledge sharing, community events and ongoing learning sessions for apprentices.
Burnthebook: June 2010 - August 2015
Technical: Interface development in HTML5 & CSS3 with jQuery for enhanced functionality. OO & MVC PHP development, MySQL Database management. Template construction with Smarty, XTemplate and ExpressionEngine's own templating system. Working with version control (Subversion).
Building of sites using ExpressionEngine, CodeIgniter (including DataMapper ORM & Nestedsets libraries), and the in-house eCommerce system. From setup, scoping and initial 'kick-off' right through to client delivery, support & site extensions. Legacy CMS, eCommerce and site support, maintenance, extension and bug fixing.
In the last couple of years of work at Burnthebook, I heavily focused on the in-house built eCommerce software package. The work included:
- Code extension
- New site module setup, ability to have modular code run in new areas of the site
- Writing the new modules to take advantage of the above
- Code documentation
- To support ongoing development of the system, code is being documented to aid with technical support.
- Code Architecture documentation
- From ERD's of the database structure to flow diagrams of processes and code structure.
- Load testing and performance testing.
- Maintenance, support and bug fixing.
Email campaigns, setup of layouts & testing campaigns.
- Scoping of projects & time estimates for technical work,
- Job planning & monthly scheduling,
- Creating project specifications & feature lists,
- Server setup, configuration,
- Load testing, benchmarking & optimisation,
- Reviewing designs, layouts & visuals to identify areas for further discussion into how the design will fit into the functionality of the layout on the Web.
Netready Ltd: September 2008 - April 2010
Junior Software Engineer
Integration of the separate in-house CMS and eCommerce systems into a single package to better suit the needs of clients requiring both Content Management and eCommerce functionality.
PostgreSQL database management.
Email campaigns, setup of layouts, testing & sending campaigns through the in-house systems.
Overseeing site development, from initial discussion, right through to site delivery, client hand-over, feature-extensions and support.
Creation of sites was done on the CMS as well as integrating bespoke custom-written solutions for additional functionality.
De Montfort University
BSc (Hons), Internet Computing, 2006 - 2010
During my time at University, self-motivation and time management were key skills that developed. The "Computing Project" module in Level 3 (Year 4) of my degree was a 300-hour, self-managed project. This meant that the tasks undertaken and the time required to do them had to be planned carefully so that the deadline can be met. The project I undertook was in a new language, which required independent thinking and research. Having a good foundation in programming and previous experience enabled me to manage my time effectively and ensure the project was completed on time, to a high standard.