1995-1999: 1st class honours Master's Degree (Civil Engineering), University of Exeter, UK.
1999: Graduate Engineer
2006: Chartered Civil Engineer MICE 2006.
2008: Accredited Project Management Practitioner (APM 2008).
2012 - Present : Software Developer. .NET and Azure Cloud applications in the Civil Engineering industry.
Software Developer Experience
Azure cloud applications (FaaS):
3 years' experience of Azure Function Apps (Serverless FaaS), Azure Table Storage (Blob, Table, Queue), Azure Signal-R, Azure Cosmos DB. Re-design of our in-house web-app “DynamicObjects” to run entirely on the Azure serverless platform.
Rhino.Compute / Autodesk Forge API:
3 years' experience with setup /maintenance of Rhino.Compute server on-premises and with using Autodesk’s Forge cloud for the purpose of manipulating parametric geometry files and for boolean union, subtraction, intersection of parts from each other.
CI/CD / Azure DevOps:
5 years' experience of Azure DevOps including creating of CI/CD yaml pipelines for continuous deployment of Azure Function Apps from DevOps repos and publishing artefacts to NPM or to private Azure feed.
5 years' daily practice of Agile principles including daily stand-ups, bi-weekly sprint planning (shippable increments and effort), and sprint reviews.
VMs / Server Management / IIS:
5 years' experience with remote admin of Windows Server 2016 VMs (2 webservers, 4 backend workhorses) and setup of DEV, STAGING, PROD servers and installation of services in conjunction with IIS. Including URL rewrite rules to forward traffic to OWIN self-hosted processes.
C# / .NET:
10 years' daily developing in C# for the Windows .NET environment. Familiar with NET Framework, NET Core and NET Standard, WinForms, WPF, LINQ, Windows Services, event-driven pattern, object-oriented principles and software design principles (KISS, YAGNI, SOLID etc).
Async-Await Pattern / Multithreading:
Extensive experience with the async-await pattern in C# and familiar with some of the common issues (race conditions, object locking etc). In addition, have experience of rewriting a single-threaded app to run on multiple specified dedicated threads, managing thread start and thread completion manually rather than using tasks run on the threadpool).
10 years' coding in Visual Basic for Applications (VBA) and before that other platform BASICs (Atari, Acorn, BBC), before embracing C#.
Experience extending our existing asp.NET web to include a RESTful api to permit other applications to interact with our app.
Ad-hoc experience of simple JS scripts and html pages mostly in the context of embedding simple webpages within a Windows Form. E.g.to embed an orbitable threeJS 3D model preview pane.
Ad-hoc experience in writing SQL queries mainly in the context of writing MS Access (JET) database backend scripts (2006-2010) and more recently with queries sent to the Azure Cosmos DB. Familiar with general SQL principals such as left / right joins etc.
Plugins / Automation:
10+ years' experience of automating MS Excel, Autodesk Inventor and Autodesk Civil3D from external processes using COM and using in-process automation via plugins.
10 year's familiarity with 3D geometry concepts and software from working in the domain of 3D geometry and automating various CAD applications. Including working with nurbs and non-nurbs geometry and working with the underlying breps, meshes, faces, edges, and vertices directly in code. Also have many hours experience creating 3D models ‘manually’ using Blender for mesh-based models for use in Unity gaming applications, and using Inventor and Rhino for solid-based models for use in infrastructure civil-engineering applications.
5 years' ad-hoc personal interest in 3D game development outside of work with using the Unity Engine to develop 2D sprite-based games and 3D games. Most recent project includes procedural generation of infinite scrolling low-poly terrain tiles based on perlin-noise mapped to elevation. This raised an interesting challenge where adjacent mesh tiles of differing level of mesh detail left gaps at the seams.
Experience of leading small team between 2 - 4 developers over many years. Prior to that, experience as Principal Civil Engineer / Project Manager with similar number or direct reports.