Failing a Canonical Written Interview

Failing a Canonical Written Interview

I've been looking for new opportunities recently, so I thought I would give the open "Senior Engineer" role at Canonical a try (https://canonical.com/careers/5142887 ). Now, if you didn't know, Canonical are the developers of Ubuntu, and big open-source proponents, so I thought culturally, this would be a good match for me; however, the application process is pretty time-consuming for the candidate, and I assume for the business also. The sum of the process is:

  1. Submitting a CV and cover letter
  2. Completing a ~40 question written interview (in 2 weeks)
  3. Psychometric assessment
  4. Technical assessment
  5. 5 interviews

Cutting a long story short, I failed the written interview. They (politely) declined to give feedback as to where I was lacking, but, if you keep reading, you'll probably notice there are a couple of gaps in the experience that the questionnaire is asking for, and also my rocky educational achievements perhaps did not meet the bar for "educational excellence".

Now, personally, I find writing 6000 words about myself to be quite challenging, and I put in a good number of hours to get this thing completed. Obviously, then, it's going to be a bit disappointing to be rejected within 8 hours of submission. Ultimately, I'm glad this was the only sunk cost but, in order to drag a little value out of my time (given Canonical didn't offer me any), I thought I would share my submission with you, my dedicated and valued reader.

If you assume that all these questions must be answered "well", then Canonical employees have all worked in startups and enterprises, built large scale applications, made embedded software for devices, created OSes, are "thought leaders", and were top of their classes in high school for mathematics and their local language. So, the unicorn employee, or at least someone who can present themselves that way. Sadly, that isn't me, but I tried to present my experience as best as I could.

Right, so here we go! Prizes to those who get to the end, and I'm happy to answer any further questions that might arise from any of my answers. Good luck!


Senior Engineer Written Interview

15th October 2024

Engineering experience

●???? Describe a skill or knowledge you acquired recently that has been impactful for you. Why did you make this investment? What has the outcome been?

I have recently gained skills in cloud native applications and internet of things (IoT) through a Sustainable Energy Authority of Ireland (SEAI) R&D project (called BlueBox) that I won funding for in collaboration with Wave Venture Ltd. I was particularly interested in applying these technologies to my main research field of marine renewable energy and for growing my personal experience; it had been a few years since tackling a completely new field of technology - the code and applications I had typically developed before then were desktop or HPC tools. Having the opportunity to once again grow my experience of new technologies, through independent learning, has been personally beneficial. Additionally, learning more about how cloud computing can be used to advance the competitiveness of renewable energy generation has been a positive outcome, hopefully opening some new avenues for research.

●???? What new skill would you like to learn? Why do you think this is important or timely or interesting? Why do you think you will be good at it?

From an R&D perspective, I would love to increase my skills in data science, particularly aimed towards machine learning. A great deal of my research career has involved developing numerical solutions to analytical models as, typically, little data has been available in the marine renewable energy space, due to the practical difficulties in collecting it, limited budgets and commercial interests. It was clear from my work in the BlueBox project, however, that these barriers are beginning to be overcome as communication technology improves, and more data is readily available. Understanding how this data can be analysed and used to improve the economic performance of the technology seems like the logical next step in my R&D journey and would suit my academic experience. From a geekier perspective, I’m interested in gaining confidence in the Go and Rust languages, as these seem, in my opinion, to be the future of web and desktop programming, respectively. I really enjoy the mental challenge of learning programming languages, and I sometimes do this for fun, in my spare time.

●???? What kinds of software projects have you worked on before? Which operating systems, development environments, languages, databases?

I’ve been lucky to be able to create a lot of software during both my academic and professional career. I have created numerical models for applications such as computational fluid dynamics and engineering design. While undertaking my PhD at the University of Edinburgh, I wrote a numerical model for solving the flow of water about a tidal current turbine (used for electricity generation). I developed this model in Fortran, on Linux, and optimized it for parallel processing on an HPC cluster.

After leaving academia, my role at JBA Consulting Ltd, in Edinburgh, was to develop a prototype backend for a novel SaaS application for planning of offshore operations (particularly related to marine renewables). This backend had to translate live ensemble forecasts provided by the UK MetOffice into initial conditions for numerical models used to calculate sea conditions at the site of interest. I developed a bespoke distributed system for running the models over a local network of Windows PCs, and then integrating the results to calculate statistics for the expected conditions. This software was written using Python, on Windows with the (novel at the time) Anaconda Python distribution. Typically, I’ve found most engineering firms use Windows and proprietary tools, as was the case with JBA consulting. I was able to demonstrate the merit of using open-source software, such as Python, particularly to supersede some very old MATLAB licenses that were in use at the time of my arrival at the company.

My next role was the result of winning a competitive application for an industrial Marie Curie (COFUND) fellowship at Tecnalia Research and Innovation, in Spain’s Basque Country. In this role, I would lead the development of an EU FP7 research project, named DTOcean, to develop an open-source application for design and economic optimization of marine renewable energy farms (i.e. arrays of wave and tidal current energy converters). This was a multi-million euro project with 18 international partners. DTOcean was my first desktop application and the first where I would lead other developers. Due to the scientific nature of the application and the limited programming experience of some of the development teams, Python was again chosen as the development language. I was responsible for integrating modules developed by multiple teams. To achieve this, I developed a basic, history tracking, in-memory database; a plugin system and execution pipeline for the modules; a graphical user interface; and an installer. I also helped developed a companion database using PostgreSQL, including postGIS for spatial data support. Again, given the anticipated users, this application was developed with Windows as the target platform.

Later, after the project was completed, I would work with Sandia National Labs, as an independent consultant (working from Ireland), to improve the accuracy of the DTOcean tool and to add an optimization algorithm. Subsequently, I published the outcomes of this work in multiple top-rated international journals. I have also supported Sandia in other software projects, such as helping with maintaining their open-source models and contributing to a proposed framework for future US Department of Energy investment in software for marine renewable energy.

My most recent project was the result of winning an industrial R&D funding call from the Sustainable Energy Authority of Ireland (SEAI) in collaboration with Wave Venture Ltd (who employed me directly for the duration of the project). In this role, I was responsible for developing the “onshore” part of an IoT system for communicating with a renewable energy powered offshore sensing platform. I designed and developed a serverless application, on AWS, and deployed it using the Pulumi infrastructure-as-code tool. The system was multi-user, multi-tenant, with dynamically created infrastructure for tenants and features. I used DynamoDB to store administrative data, while Aurora PostgreSQL was used to store measurements. MQTT was used for duplex communication with the platform, using a bespoke CBOR message format to reduce message size. I developed the backend in Python, as this was the preferred language of the Wave Venture staff, with the caveat that some services could be written in a more performant language (such as Go) once the performance of the system were better understood. I also developed a frontend web interface for this system using the SvelteKit JavaScript framework, again deployed to AWS using an open-source adapter that I developed. For communication between the frontend and backend, I implemented REST and WebSocket APIs (with openAPI and asyncAPI schemas). The software was built for Linux on AWS Lambda and ECS and I used the Poetry packaging tool for dependency management of the multiple python-based services within the application. I also used GitHub Actions (run locally) to manage the build and deployment pipeline, to ensure reproducibility.

●???? Would you describe yourself as an architect of resilient software? If so, why, and in which sorts of applications?

I would say that I’ve developed resilient software in the context of the solution domain. Particularly with scientific software, runtimes can be long, and so the ability to handle unexpected failures and restart (numerical) experiments with minimal loss of computational effort is important. To that end, I have often built failure handling into my designs for these tools. The solutions were not necessarily sophisticated, sometimes involving serialization of the state of a solution at a particular time-step, or simple logging of success or failure for distributed workloads, but they were sufficient to avoid significant loss of simulation time.

For the BlueBox IoT project, resilience was a contributor in my choice to develop a serverless application. For a brand-new system, we had little understanding of the operating loads in production, so having the in-built flexibility of Lambda provided a safety net, allowing us to gain that knowledge.

●???? What is your proudest success as an engineering leader?

The project I am most proud of is DTOcean. This was a 3 year €10M EU FP7 research project with 18 partners. I joined the project with almost one year completed, however few concrete decisions had been made regarding the tool’s design. Different teams were responsible for 9 separate components of the tool and, unfortunately, a lack of technical direction up to that point had led to unnecessary complexities arising regarding interactions between these components; this had deadlocked the development. My approach to solving this issue was to decouple the development of each of these components as much as possible. I achieved this partly with technical solutions, by producing a highly flexible system for integrating the modules developed for each component, and by leading the development teams to focus their interactions on the fundamental contracts (i.e. the nature of information exchanged) between the different components, rather than worry about how said data would need to be formatted. The outcome of this approach was that each component could be developed as an independent, testable program, decoupled from the progress of the other components. I, and my team, would then develop adapters to facilitate the translation between the interfaces of each component. Although it wasn’t necessarily plain sailing after that, due to the initial delays and its impact on the relationships between the teams, we managed to deliver the project and the software on time. I was particularly motivated to achieve this goal (sometimes beyond the call of duty) because we were funded by a large sum of public money, and I wanted to ensure we delivered maximum value for it.

●???? Outline your thoughts on open source software development. What is important to get right in open source projects? What open source projects have you worked on? Have you been an open source maintainer, on which projects, and what was your role?

I’ve been a dedicated proponent for open-source development since I became more aware of it during my PhD, in the mid 2000s. By this time, open source had already had a significant impact on the web, but its effect on the scientific computing community was less obvious (to me) at that point. In my career, I have witnessed a huge transition from scientific software that was dominated by tools with proprietary and (often weird) academic licences, to mostly open source. Fundamentally, I believe this has been a massive boon for the community to have access to powerful tools like Python and its numerical ecosystem, and to share the outcomes of software projects by default, replacing protectionist practices.

This shift to open source has led to some novel issues, nonetheless. Funding for R&D software has not really adapted to this new environment, which has led to a great deal of software developed but very little continuity. R&D funding needs to give equal weighting to projects that continue to develop open-source tools that were deemed useful enough to develop but cannot be maintained.

One project that I contribute to which has managed to achieve regular R&D funding for its activities is the wave energy converter modelling tool “WEC-Sim” (github.com/WEC-Sim ). This project has attracted regular investment from the US Department of Energy’s Water Power office for multiple years, decisively increasing its impact on the wave energy development community. The project is a great success story for continued investment in open source in the scientific community, and I’m proud to be part of it.

●???? Describe your experience building large systems with many services - web front ends, REST APIs, data stores, event processing and other kinds of integration between components. What are the key things to think about in regard to architecture, maintainability, and reliability in these large systems?

The BlueBox IoT project was the most complex architecture I have developed in my career. I designed it with a serverless backend, on AWS, which provided duplex communication with an IoT device via MQTT, and management of multiple users and tenants. The backend used DynamoDB for storing administrative data and Aurora PostgreSQL for measurement data. This was coupled to a frontend I developed with the SvelteKit JavaScript framework using REST and WebSocket APIs. I used the SNS messaging service and SQS queues to transfer events between different parts of the system and decouple their processing.

There are clearly huge advantages, particularly to a solo developer, of a serverless architecture versus a monolithic application. The most prevalent of these are the inherent load balancing, resilience and security benefits. It’s important to be aware of the limitations of such an architecture, nonetheless, particularly in respect to account service limits. For example, for a multi-tenant system, such as BlueBox, the concurrency limit for Lambda could lead to “noisy neighbour” issues, even with dedicated infrastructure per tenant. Thus, it is important to manage this concurrency (via queues, for instance) and limit the number of tenants served by a single account. Other service limits may be impracticably small for the design, and, thus, careful selection is important (although sometimes they just surprise you - like the maximum number of Lambda authorizers for API Gateway did to me!).

In contrast to the many benefits a serverless architecture brings, I believe maintainability is more challenging that with a monolithic design. Implementing best practices which have been developed for larger, integrated code bases is more challenging when an application is broken into many small applications; in particular, maintaining DRY principles is more challenging. Testing serverless applications is also less straightforward, where, in general, testing should be done on cloud infrastructure rather than locally. Testing “closer” to production provides confidence that the application will work on its target platform, but creating efficient, isolated tests is more challenging.

●???? How comprehensive would you say your knowledge of a Linux distribution is, from the kernel up? How familiar are you with low-level system architecture, runtimes and Linux distro packaging? How have you gained this knowledge?

Although I had some limited interactions with Linux boxes during my undergraduate degree, it wasn’t until my PhD that I gained a deeper understanding of the operating system. At the beginning of my PhD I had to maintain my own (university) PC, and I was directed by our research technician to try and install Gentoo (this was 2004, when Gentoo was still popular). I managed to achieve this, with a little help, which provided a good understanding of the fundamentals of a Linux distribution. I continued to use Linux over the course of my PhD. It was a fun time to be a Linux user, as I would often have to tweak the configuration or enable something in the kernel to get particular hardware or features working.

I also have a basic understanding of computer architecture from my first attempt at an undergraduate degree in Maths and Computer Science at Imperial College. Additionally, it’s important to understand something about the hardware you are interacting with (for memory management and parallel processing) when programming in languages such as Fortran, as I did during my PhD.

●???? Describe any experience you have with low-level embedded systems engineering, on Linux or other embedded operating systems

I have some limited experience with embedded systems, from some hobbyist electronics using Arduino and from some prototyping work I did for BlueBox using a Raspberry Pi. Although I have limited knowledge in this field, I find this an interesting topic.

●???? Describe your experience with large-scale IT operations, SAAS, or other running services, in a devops or IS or system administration capacity

Through the BlueBox project, I gained skills in applying infrastructure-as-code (IaC) tools, such as Pulumi. I developed the IaC code for BlueBox using the Pulumi Python SDK. In general, I think a programmatic method of creating infrastructure is extremely useful (and necessary for serverless architectures), but this technology could still do with some improvements in stability and the logical mapping between the code and the underlying resources.

●???? Describe your experience with enterprise infrastructure and application management, either as a user running enterprise operations, or as a vendor targeting the enterprise market

I have no experience in this field.

●???? Outline your thoughts on quality in software development. What practices are most effective to drive improvements in quality?

My personal growth regarding software quality has been extremely organic. It was an untouched topic during any of my undergraduate courses, and this was reflected in a lot of my early code. In some respects, it didn’t matter given the context of that work and given I never expected to use it again, but the importance of software quality began to become consequential during my PhD. At this point, I became a militant proponent of verification and validation of numerical simulations and somewhat more concerned about readability in my code, as I had planned to share it and publish simulation results. It wasn’t until the DTOcean project, however, that I created my first automated test suite and became more concerned with unit testing, code quality and coverage. It was clear that with such a large project, the processes were necessary for confident change management. My experience then evolved to applying these practises to hosted, collaborative repositories; setting up continuous integration pipelines; creating pull requests; and conducting code reviews.

Over my career, I’ve learnt that maintaining software quality requires continuous adaptation. For instance, I was confident with my experience until the BlueBox project, at which point I had to learn new testing methodologies for serverless architectures. Ultimately, I think pragmatism is required for demonstrating the quality of code, alongside a solid understanding of the theoretical framework of the code we are producing. This may be particularly important with the growth of AI developed code, where a TTD approach may become critical to using the technology efficiently.

●???? Outline your thoughts on documentation in large software projects. What practices should teams follow? What are great examples of open source docs?

I believe that the correct approach to documentation is contextual and differs between, say, a backend service, a web application and a programming language. In terms of code maintenance, doing self-documentation (as in writing the code artefacts with meaningful names) as much as possible (without obscuring the logic of the code too much) is extremely useful. I tend to find that documentation adjacent to code (i.e. comments) is often neglected. Additionally, docstring style automated documentation generation is a useful complement, although it can risk neglect without good practices being observed. I’m not adverse to a well-placed comment to explain some complex logic, but I think they should be used sparsely, as they are most likely to become rotten over time.

When it comes to user facing applications, the coupling between code and documentation can be enhanced by building documentation directly into the application itself. I think the more you separate the documentation from the product, the more the risk is increased of discontinuities between the two. Overall, having documentation integrated into a project’s automated CI or build tools will help catch errors, but also give an opportunity to enforce manual QA, such as including a checkbox for documentation in a commit message or PR template.

In terms of examples of documentation for open-source projects, it’s interesting to contrast the Python documentation and documentation for a newer project such as Svelte/SvelteKit. As an experienced user I think the Python documentation is great, with good levels of detail, but when I first started using the language it was completely hopeless for learning. (I think it’s got a little better now). In contrast, Svelte’s approach to new users is fantastic, with their interactive tutorial system making learning the basics a complete synch. On the other hand, when I’ve needed more detailed understanding, sometimes I’ve found their documentation lacking. It’s clearly a difficult challenge to reach perfection, but it’s exciting to continue to see innovation around documentation.

Finally, I’d just like to bring attention to the WEC-Sim open-source wave energy modelling tool documentation (wec-sim.github.io/WEC-Sim ) and congratulate the maintainer who keeps the automated builds working smoothly for the development team (and fixes the bugs).

●???? Outline your thoughts on DevOps and DevSecOps. Which practices are effective, and which are overrated?

These seem to be some of the most contentious terms in software development. My personal understanding of the terms is the integration of development, deployment and security into a software engineer’s working practices; however, the existence of separate DevOps roles seems to suggest that it’s not always understood that way.

With the development of BlueBox as a serverless architecture with a zero-trust security model, I believe I was practising DevSecOps. In the context of a solo developer, the ability to build these processes into code is a massive productivity boost, in my opinion. On the other hand, am I certain that I have optimized the infrastructure and its security? More importantly, are there sufficient tools that can help me test my decisions? I don’t think so, thus, I do understand the argument that bundling all of these complex facets into the developer's role might not be the optimal approach. There’s clearly still some organizational remoulding to do to integrate infrastructure and security specialisms while maintaining the efficiency gains of DevOps/DevSecOps processes.

Industry leadership experience

●???? Describe your speaking experience at industry events and conferences

I have presented at numerous academic conferences, both locally and internationally, typically to present papers based on my software projects. I’ve presented at the European Wave and Tidal Energy Conference twice, for instance, most recently in Bilbao last year, introducing BlueBox. I also presented a poster at Euro Python 2015 in Bilbao on the topic of DTOcean, as an example of Python being used in renewable energy research projects. I also have regular experience of presenting work updates to (often non-expert) colleagues and tailoring the content accordingly.

●???? Are you a thought leader in any particular area of technology?

I have published extensively on the topic of numerical simulation and software development in the marine renewable energy sector. According to Google Scholar, I currently have 196 citations from 22 publications, with an h-index of 7. I have also won R&D funding to enhance this field of research, winning a €300,000 project from the Sustainable Energy Authority of Ireland for BlueBox, for instance.

●???? Describe any experience working with startups. What did you draw from that experience that would be relevant for this application?

I don’t have direct experience with a tech startup, but I was involved in bootstrapping a novel SaaS service, while I was employed at JBA Consulting, a UK SME. Because it was a very low budget project, with very big ambitions, and also my first industry job, I probably tried too hard to recreate a concrete representation of the original proposal, and I put myself under a lot of stress in the process. I think a more mature me recognizes that it’s often necessary to scope those proposals to a feasible minimum viable product and communicate with your manager that there is a prioritized list of tasks to meet that MVP, and then extend it should the budget allow. I would also tell younger me to worry less about the marketing that your boss is doing, as it's meant to attract customers, not be a set of demands on your output.

●???? Describe any experience working in a public company. What is important for your colleagues to know about being a public company?

Again, I have not had experience of working in a public company, but I did work for a very large not-for-profit private company - Tecnalia, in Spain’s Basque Country. What I found surprising, at first, was that being a not-for-profit does not mean you don’t want to make a profit. The commercial success of our team was very important in the sense that poor performance could lead to job losses. Overall, however, this was a shared pressure among the team and led, for the most part, to a shared sense of entrepreneurial endeavour, that I quite enjoyed. Compared with working for JBA or at a university, there was probably less flexibility in terms of IT, working hours, etc, but this was offset by having a safety net of an excellent team of colleagues and great administrative support, in my experience.

Context

●???? Outline your thoughts on the mission of Canonical. What is it about the company's purpose and goals which is most appealing to you? What do you see as risky or unappealing?

This is slightly difficult to answer as I was unable to find a dedicated declaration of the mission statement for Canonical online, although there is one for Ubuntu. Interpolating a little, clearly the mission of Canonical is to grow open-source and free software in computing, be that through an OS like Ubuntu or through other technologies such as cloud. I think it’s hard to underestimate the seismic shift that Ubuntu brought to Linux desktop, really being the first to show that these technologies could get close to the experience of a commercial offering and really bring open source into mainstream conversation. Over my career, I’ve been a huge proponent of moving R&D software into open source for the benefit of everyone, and I feel this aligns my goals well with Canonical’s mission. Naturally, funding for open-source development is more challenging than for proprietary software and could, perhaps, make jobs more unstable, but Canonical’s growth and success show that this doesn’t have to be the case.

●???? Who are Canonical's key competitors, and how should Canonical set about winning?

I guess the obvious competitor might be Microsoft, particularly with the continued dominance of Windows on PC. On the other hand, a more direct competitor might be Red Hat although, with regard to “winning”, the success of Red Hat is also a success for open-source, so I will discount them in this discussion. With regard to Microsoft, Windows’ creep into making the user the product (with the forced Microsoft accounts or dodgy AI products like Recall) continues to alienate users, and the desktop world is crying out for good alternatives. If Canonical could get Ubuntu onto prebuilt machines, I really think people would value the privacy and security benefits it would bring. The success of chromebooks demonstrate a market accepting of alternative OSes.

Another space crying out for open-source alternatives is cloud, where companies like AWS continue to dominate. This amazingly useful technology is hamstrung by vendor lock-in and profiteering, and open-source solutions could start to standardize services and bring fair pricing into the market, for the benefit of everyone. Where Canonical rocked the desktop world with Ubuntu, here is another opportunity to make a huge impact on cloud computing.

●???? Why do you most want to work for Canonical?

I think the company culture of Canonical is a great match to my own. I’m clearly into the open-source mission; I’ve worked remotely for 7 years and enjoy the flexibility it brings; I strive to bring excellence to my work and I enjoy working with others who feel similarly; I’m excited about having the opportunity to continue learning and growing my career and helping others to grow theirs; and, finally, my career has been dedicated to solving climate issues, so Canonical’s dedication to sustainability is important to me also.

●???? What would you most want to change about Canonical?

This is a very hard question to answer, having never worked for Canonical. Given that this questionnaire is the bulk of my interaction so far, I would say it could be adapted a little to better reflect the experience of the candidate being interviewed, to make the process as efficient as possible for candidate and interviewer alike.

●???? What gets you most excited about this role?

This role would be my first in a dedicated software company, and I find this to be both exciting and a little scary, honestly. I’d really relish the opportunity to learn from the experience of colleagues that have dedicated their careers to software engineering, and I’d hope that some of my, less conventional, experience would be useful to others as well.

Technical leadership

●???? Give an example of a time you have helped someone through coaching or mentoring. What was the outcome, and what do you think the most effective techniques were to achieve that outcome?

I have been privileged to supervise the master’s degree projects for 2 engineering students while I was working as a postdoc at the University of Edinburgh. The first student got top grades, while the second received a second level result. The two students were very different, the first being extremely self-starting and independent, while the second required more direction. As such, it was necessary to be flexible to the differing needs of the students. For instance, the first preferred a more iterative approach to learning, with frequent feedback and adjustment to improve the outcomes of their work. The second student needed a clearer direction and required more time towards the beginning of the project to understand the problem and solutions before they became more independent. Establishing the preferred working practises of the person being mentored and the optimal balance of direct supervision vs independent learning really helps build a productive and trusting relationship. I brought this experience forward when working with an intern at Sandia National Labs, who supported me to improve the DTOcean software.

●???? Give an example of a component or system that you have designed. What was the process and set of artefacts you produced to assist with that design? How was it reviewed?

I developed the designs for the DTOcean desktop tool and the BlueBox serverless application as part of government funded R&D projects, and it was necessary to document the design as part of the contracted deliverables. Typically, these projects begin with an assessment of the state of the art, followed by design documents and then a copy of the user facing documentation. I prefer to keep the design documentation lightweight and flexible (by utilizing techniques such as diagrams as code), so they can be adjusted as the designs inevitably evolve. Internally, I also did a lot of prototyping to help inform the direction of the design and gather feedback from my team. This could involve wireframing for UI design, or small proof-of-concept code to compare functionality between different design decisions. These prototypes can then be used to develop user stories to form the functional requirements of the design. Formally, the deliverables are reviewed by a project partner and then by the funding body, but this is typically more of a style / box-ticking review. By building the designs in a collaborative fashion (using the prototypes, for example), there was consensus on the design approach before it was formalized in the deliverables.

●???? Give an example of a situation where you had a significant positive impact on the quality or performance of a software product. How did you diagnose the issue, and what was the remedy?

After the initial release of the DTOcean software, at the end of the EU R&D project, the modelling components (developed by project partners) had issues that prevented the software being used for advanced simulations. The issues ranged from stability (e.g. crashes), excessive memory usage, slower than expected computational speed and inaccuracies in the results. Subcontracting for Sandia National Labs, I began a process of improving the code by adding tests and conducting profiling, which led to numerous algorithmic and code improvements compared to the original software. For instance, I added an iterative process to an algorithm that significantly improved its accuracy, and I replaced slow imported packages and inefficient code. The outcome of this work was that the code could be used for novel simulations, and I published three articles in respected international journals detailing the software and the results of the simulations.

●???? When presented with a code review, what are the steps you go through, and how do you target your feedback to the author?

The first step is clearly to understand the context of the change, i.e. what problem was being solved or what feature is being implemented. The next is to exercise the code to ensure that the stated goal has been achieved and to understand a little more about how. I would then check to see if there are sufficient tests to cover any added functionality or to cover any bugs that were solved by the work. I’d then start to examine the code itself, particularly checking for any accidental omissions in documentation and for clarity of new code. I might also be looking for obvious performance or organizational improvements, but this wouldn’t be my primary concern unless there was some apparent problem from my runtime testing. I want my feedback to be beneficial to the coder and add value, and I don’t want to get too into the weeds with trivial things (maybe like coding style). I might ask for clarification if there is some part of the code that I do not understand, and I would only request changes if something was fundamentally wrong or omitted (like documentation). Otherwise, I would offer suggestions for improvements, at the discretion of the author. Keeping the process efficient and useful for author and reviewer alike is important to avoiding lethargy and deadlock.

●???? Outline your philosophy for giving feedback to colleagues, whether the feedback is positive or negative.

I think giving feedback is a lot easier than taking it (especially negative feedback), so a big dose of empathy is required to start. Clearly, you want to keep your feedback impersonal and justify it when either negative or positive. It’s important to be consistent in order for the receiver to believe that you are a trustworthy source and can act with confidence on your suggestions. Especially when giving negative feedback, being patient and open to discussion about your feedback is important, to allow the recipient to understand the issue and formulate a plan for improvement.

●???? Give an example of a time you received feedback, and how you responded to that feedback to improve your processes or craft

I have interacted with multiple clients while working as an independent consultant, and this has been an important learning experience for me in terms of managing client expectations. My first client was very hands-off, with broad goals to be met, and preferred that I take the initiative to define a path to achieve those goals. This approach, however, did not work for another of my clients. Although they again set broad goals, they wanted more control over the direction of the work and provided feedback to this point, but which, unfortunately, had already led to some wasted effort on my part. Considering this experience, I now provide information earlier to my clients on how I plan to tackle a problem and allow the client to define decision points to maintain alignment with their vision of the solution.

Education

We consider academic results in high school and university for all roles, regardless of seniority. In every discipline, from engineering to marketing to operations and sales, we intensely value colleagues who are able to puzzle through difficult problems and find the optimal path forward.

●???? How did you rank in your final year of high school in mathematics? Were you a top student? On what basis would you say that?

I received As in A-level (English school-leaving exams for 18-year-olds) mathematics and further mathematics, each of which represented roughly the top 17% of students at the time. These results afforded me a number of unconditional offers from top universities, including Imperial College London.

●???? How did you rank in your final year of high school, in your home language? Were you a top student? On what basis would you say that?

I received Bs in English language and English literature at GCSE level (English school exams for 16-year-olds). I did not excel at the time, but my writing skills have improved significantly since then, having published multiple articles in scientific journals.

●???? Please state your high school graduation results or university entrance results, and explain the grading system used. For example, in the US, you might give your SAT or ACT scores. In Germany, you might give your scores out of a grading system of 1-5, with 1 being the best.

At A-level I received 4 As and 1 B. A-level grades at the time were ranked using A, B, C, D, E, O and Fail.

●???? Can you make a case that you are in the top 5% in your academic year, or top 1%, or even higher? If so please outline that case. Make reference where possible to standardised testing results at regional or national level, or university entrance results. Please explain any specific grading system used.

I don’t believe it’s possible to compare individual students in the English system.

●???? What sort of high school student were you? Outside of class, what were your interests and hobbies? What would your high school peers remember you for?

I come from a very sporting family, and I was an avid cricketer when I was at school. During that period of time, I also expanded my interest in popular music, and you would often find me with my nose in one music magazine or another. I hope my friends from school would remember me for having a good sense of humour and a hard-working attitude.

●???? Which university and degree did you choose? What other universities did you consider, and why did you select that one?

My first attempt at a degree was a maths and computer science degree at Imperial College London. I had compared other similar courses at well respected universities such as Loughborough, Warwick and Bristol, however I chose Imperial due to its research reputation and because I had family in London. Unfortunately, I struggled being away from home for the first time, and I left before the end of the first year. I managed to pick myself up again and enrol in a mathematics degree at the University of Southampton, which was closer to home, and I was able to excel in a more supportive environment.

●???? Overall, what was your degree result and how did that reflect on your ability? Please help us understand the grading system for your results.

I completed a Master of Mathematics course, which is a Bachelors degree with an extra year (totalling 4 years). I received upper second class honours, the second highest of 4 passing grades. My final result perhaps did not reflect my ability, as I made some poor course selections in my 3rd year (taking those offered by departments outside of mathematics to push myself). I excelled in my final year project, nonetheless, and this provided evidence that led to my acceptance to a funded PhD programme.

●???? During all of your education years, from high school to university,? can you describe any achievements that were truly exceptional?

I was very proud of my final year university project. At the time, I had become very interested in a career in renewable energy, and I took the initiative to define a project of my own choosing in this field. I sought out any researchers within the university who might be working on a related technology, and I was contacted by a professor researching tidal current energy converters (TECs). I then decided to use my project to develop a numerical model of a farm of TECs using MATLAB. This work led to some potentially novel discoveries and, as a mentioned above, allowed me to earn a funded PhD position to continue my research.

●???? What leadership roles did you take on during your education? Did you conceive of, and drive to completion, any initiatives outside of your required classwork?

Given my interest in sports, and having an entrepreneurial spirit, I was determined to start a sports club while at university. I attempted to set up a student golf club at Imperial, and I got as far as negotiating reduced fees at a local club but, unfortunately, I left before I was able to see the club inaugurated. Fortunately, I was able to leave the concept with a fellow student who had been helping me to set it up.

Undeterred by this setback, I tried again at the University of Southampton, this time with greater success. A group of my friends and I set up the university darts club (beating out, through negotiation, another attempt to start one at the same time) and I became the inaugural president. We were a small club, but we competed with other universities, local teams and in open competitions, to varying levels of success. Overall, it was a brilliant experience, from which I made new friends for life.

Siying Liang

售前工程师 | 9年一线处理国际客户经验 | 1年软件开发经验 | 3年机器人控制算法研究经验

1 周

You’ve already done well Matthew

Gianfranco P.

Senior Software Developer - Next.js, TypeScript, React, Node.js and MongoDB

1 周

Wow. Not giving even a little feedback has to suck. I wonder why they do this... It's asking a lot from the first step

joan cradden (Brodies Solicitors)

Partner at Brodies LLP; Legal 500 Hall of Fame; Chambers and Partners 2020 "Her advice is always spot on" "She is responsive, pragmatic and a great lawyer."

1 个月

I’d have hired you Matt. That’s honestly beyond ridiculous.

Wow - that’s an intense recruitment process!

要查看或添加评论,请登录

社区洞察

其他会员也浏览了