Education
-
1995-1999: 1st class honours Master's Degree (Civil Engineering), University of Exeter, UK.
Career
-
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.
​
Agile:
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).
​
VBA:
10 years' coding in Visual Basic for Applications (VBA) and before that other platform BASICs (Atari, Acorn, BBC), before embracing C#.
​
RESTful API:
Experience extending our existing asp.NET web to include a RESTful api to permit other applications to interact with our app.
​
JavaScript / html:
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.
​
SQL:
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.
​
3D Geometry:
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.
​
Unity:
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.
​
Team leadership:
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.