After completing my PhD at Imperial, I spent many years working in industry as a senior engineer and a consultant before returning to university life. My work now bridges industry and academia, focussing on developing skills and knowledge in software engineers to build technical competence and improve developer productivity. My role at Imperial combines a strong focus on education with industry-focussed research.
Prospective PhD students: if you are interested in practical software engineering problems (especially problems that you have experienced in industry) and are thinking of pursuing a PhD, feel free to contact me to discuss opportunities.
Building a programme of education that reﬂects and keeps pace with industrial practice is difﬁcult. We often hear of a skills shortage in the software industry, and the gap between what people are taught in university and the "real world". I oversee a programme of software engineering education at Imperial that bridges this gap, providing students with relevant skills for industrial software engineering careers. I personally teach the following modules:
My research agenda focusses on industrial software engineering practice, providing tools, techniques and analysis to help practicing engineers carry out their work more effectively and more efficiently. See below for more details on recent work:
Serverless cloud computing - where clients pay only for the time that their code is actually executing, rather than deploying and running monolithic services or dedicated virtual machines - has the potential to significantly change how client/server applications are designed, developed and operated.
My FSE paper (co-authored with Gojko Adzic) Serverless Computing: Economic and Architectural Impact was featured by The Morning Paper and gained a lot of interest in both the research and practitioner communities.
Further work on the serverless computing has focussed on developer experience, including the Nimbus framework (with Thomas Allerton) - see our upcoming ICSE paper - Refunction (with Oliver Stenbom), looking at the problem of cold-start times, and ServerlessMR (with Hang Li Li) - looking at constructing totally serverless data pipelines.
I am also part of the Horizon 2020 project RADON.
I have a strong interest in developer tooling and improving the developer experience for practising software engineers. A number of recent projects have involved building developer tools to try to give greater insight into a software system or codebase through automated analysis.
Diggit is a tool developed together with Lawrence Jones for automatically generating code reviews. See our SANER'18 paper Diggit: Automated Code Review via Software Repository Mining.
Another avenue of investigation is in enhancing the information provided by the IDE by analysing and incorporating metrics from running production systems. This article IDE-first application metrics to provide actionable feedback for developers describes a tool for Python developers that overlays metrics about production application performance on top of the source code. A paper on Supporting the Developer Experience with Production Metrics was published at RCoSE in 2019.
I am exploring the notion of using virtual time in software performance testing, which allows developers to explore performance characteristics and detect potential performance problems early and continuously throughout the development of a software system - where traditionally they would only find out about these problems when running slow system tests in production.
These ideas are embodied in the tool PerfMock, allowing mock objects in unit tests to be configured with performance characteristics as well as mock behaviour. PerfMock executes tests in virtual time. This allows performance to be evaluated much more quickly than running a full system performance test, making it possible to test performance continuously, as part of a unit test suite.
For more details of this project, see our QUDOS'19 paper Continuous Performance Testing in Virtual Time. I have also given talks and workshops on this topic at industry conferences such as Software Practice Advancement, CodeCamp in Romania and CodeEurope in Poland.
A lot of my work at Imperial has been in developing an education programme that provides students with relevant skills for industrial software engineering careers. I have also done a lot of work on continuing professional development in industry. We have published a number of articles and papers sharing our thoughts and ideas on how to do these things effectively, as well as collaborating with partner institutions around the world.
To achieve high quality education, we aim for lean learning, with fast feedback and short cycle times. In other words, we believe that the learning experiences that we provide for our students should be aligned with the principles of the agile methods that we are trying to teach. You can read more about thisin my ICSE'17 paper Lean Learning - Applying Lean Techniques to Improve Software Engineering Education(co-authored with Tony Field) - or my chapter in the book Agile and Lean Concepts for Teaching and Learning.
We have been working on introducing DevOps culture and tools to practical labs throughout our degree programme. For details of how we have done this, see our forthcoming CSEET paper Threading DevOps Practices Through a University Software Engineering Programme (co-authored with Ivan Procaccini).
For volume 10,000 of the famous Lecture Notes in Computer Science, Alastair Donaldson, Alan Mycroft and myself were invited to write an article considering the future of programming, and how programming languages might evolve over the coming years and decades. We chose the title The Next 7000 Programming Languages as a reference to Peter Landin's classic 1966 paper The Next 700 Programming Languages.
Full list of publications at Google Scholar.