Software Engineering Processes, Agile Development Methodology
A successful delivery team is able to produce software that is on time, under budget and of high quality. I'd add to that the team should be more productive in a year's time - that means no technical debt or burn out.
Outside of trivial projects this is a known impossibility - in every project there are constraints, something has to give and every choice has consequences.
I use Agile methods because for the type of product development I have been involved with it leads to the best long term outcomes. Thats right - not the shortest path to a MVP or Demo system - but the most effective path to a sustainable product backed by sustainable processes and people.
At Vianet and NIWA I ran the development teams using Agile/Scrum methodology. Scrum involves iterative, test based development with regular releases and whole team commitment to the process and tasks. This allowed us to deliver new features in a timely fashion with high software quality and repeatability. At NIWA we refined the process to allow the team to deal with a wide and varied range of ongoing projects and legacy systems.
At NIWA I introduced a full range of software engineering processes including, revision control, issue tracking, wiki based documentation, unit and functional testing, automated continuous test and build, test driven development, virtualised dev, test and production deployment servers along with a re-centering of development on user driven requirements and analysis.
As a consultant I have been involved with digital transformation - which often means taking the business idea - we should be more agile and communicating how that maps onto the more specific ways to build effective development teams.
User Interface, User Experience and System Design
I have strong skills in Systems Architecture and User Interaction design. I have a good understanding of human factors, usability issues and technical constraints, and continue my personal education in this area. At Navman I was responsible for major improvements in both the visible face and usability of the GPS GUI and also the underlying architecture, versatility and internationalisation.
At Vianet I designed a Web Services Architecture that provided a gateway between a global accommodation booking service and mobile devices. At NIWA I was responsible for major improvements in the appearance and usability of online systems. I prefer a layered approach to systems design using pure CSS and HTML whenever possible and separating styling, content and behavior.
Although not a graphic designer I have a strong aesthetic sense and comfortable skills in Adobe Photoshop and Illustrator. I'm also a font nerd.
At Sendo I introduced XML as the data transfer mechanism between the order processing system and the handset configuration system and designed an XML system for managing and compiling MMI resources such as bitmaps, languages and melodies. I was also responsible for the design and implementation of the Intranet web site. This included a universal front end for handset test and diagnostics. At Sendo I implemented an Over The Air (OTA) diagnostic information system using XML and SOAP.
At Vianet I designed XML APIs for web services and published XML Schema Documents to describe the interactions both for message exchanges and WADL ReST based requests.
At NIWA I introduced the use of XML Databases (eXist and Geonetwork), Designed XML schema documents, and wrote XSLT stylesheets for rendering and conversion. For the Historic Weather Event Catalog I introduced the use of Xquery and for other projects investigated Xforms. All new systems at NIWA are Restful, Standards Compliant and make use of open standards such as OGC:WFS/WMS/WCS etc.
Python, Jupyter : Proficient
I use Python in some analysis projects and for modelling in particular Juptyer
At Vianet I took on two new programming languages. Python on Pylons for a web services gateway and PHP on Symfony for the primary accommodation booking application
At NIWA we used PHP/Symfony extensively for lightweight or WebUI oriented projects. Used Python in some analysis projects and for modelling.
I regularly use Python Jupyter Notebooks to demonstrate algorithms, write API test and exercise systems and general number crunching.
C,C++, Java, Object Oriented Programming : Expert
I used C++ almost continuously from 1987 to 2007 and have used Object Oriented Programming and Design techniques to specify and develop a wide variety of class libraries, components and complete applications. I have used both Microsoft and Linux GNU compilers for both Windows desktop applications and embedded Windows CE development and have given small and large group training courses in C++.
I have used C since 1985 and have continued to use pure C in various embedded system developments where C++ was unavailable or inappropriate. This included GSM cellphone handsets, a medical data logger, and low level libraries for linux and image processing.
I have been using Java since 1996. At Renishaw I ported an Active X control used to draw specific machine accuracy polar plots into Java so that the web application can be used across a variety of platforms. For Ansae (1999) I worked on HTML and Java based (J2ME) handheld information devices and control units for the museum industry. I wrote a cookbook describing the use of Java for Ansae Puppeteer products. At NIWA the team used J2EE/Struts/JBOSS extensively for middleware in major biodiversity and other online systems as well as SEAM/JFS in newer systems.
Familiar with J2EE, J2ME CLDC/MIDP, Personal Java, JNI, RMI, Java Servlets, JBOSS, Tomcat.
Over the last two years I have started migrating from Java to Rust and I am seeking an opportunity to use Rust in a commercial project.
Database, Metadata and Geospatial: Proficient
Experienced with SQL RDBMS (Oracle, MySQL, PostgreSQL/PostGIS). Can design and implement data models, script queries and interface to frameworks through ORM such as Doctrine, Hibernate.
Also now experienced with NoSQL databases including MongoDB and EAV (Entity Attribute Value) database design.
Experienced with main Open Geospatial Consortium (OGC) protocols, GML, WFS, WMS, CSW, OM, SOS. Used extensively in the design of new NIWA SOA.
Familiar with IS019115, ISO 19139, ANZLIC, MCP, Dublin Core and other metadata formats. Implemented the Geonetwork Metadata package (BlueNetMEST) within NIWA and extended the profile for NIWA requirements.
Real Time and Embedded Systems - Expert
Much of my experience is with embedded and real time systems. I can work closely and effectively with hardware designers, design and implement operating systems, device drivers, networking, debug support, user interfaces and control applications. I can manage and control the full software development life cycle for new consumer electronic devices. I understand issues of production, marketing, security and usability. Devices include: Navman Navigators, Sendo GSM Mobile phones, The Sendo/Microsoft Z100 Smartphone. The Ansae Puppeteer, Oakfield's Medical Data logger and Stack's motor-sport dashboard and data logging system. I also have extensive experience in Plant control including a full landfill gas power station. Water pumping stations and a nuclear materials testing rig.
All the bits you need to turn a code base into a running product.
- Git, GitHub, Bitbucket, Jira, Confluence.
- Github Actions, Jenkins,
- Docker, Docker-compose
- Unit/Functional Testings: JUnit, xUnit, Ava, Enzyme
- End to End testing: Codecept, Puppeteer, Selenium. Gherkin
- AWS - EC2, S3, IAM, ECR, ECS, CloudFormation.
Windows CE, Win32, Pocket PC and Smartphone - Expert
I have been developing applications for Microsoft windows since Windows 3.0. I have experience in porting Windows CE onto new devices using Platform Builder as well as developing several complete user applications. I was involved with the Microsoft Smartphone project since its inception and have developed drivers and applications for the (now defunct) Sendo Z100 and the Orange SPV. This includes an Instant Messaging/ Social Networking application for Orange. I have also developed cross platform applications for Pocket PC, Smartphone and Symbian devices.
Symbian – proficient.
I started working with Symbian in 2003, I produced for Mobix applications for both the Series 60 devices e.g. Nokia 7650, 3650 etc. And for UIQ devices e.g. Sony/Ericsson P800. .NET, COM, ATL and ActiveX I am very familiar with these Microsoft component technologies and have designed and implemented a wide variety of COM objects including an automated test interface for the GSM handset, an encryption object, data capture and visualisation objects. These components include both ATL and MFC ActiveX technologies and have been used by both HTML, C++ and Visual Basic Clients.
Forth: Guru level
I started using Forth in 1984. At Sendo I introduced Forth as an ultra lightweight alternative to using a Java Virtual Machine to host downloadable games on the handset. Although no longer common my long experience with Forth has given me a close understanding of other VM technologies such as the Java Virtual Machine (JVM) and Microsoft's Common Language Runtime (CLR)
ARM7, ARM9, StrongARM, 68HC11, x86, 68k and others. I am familiar with these devices both from a processor level debugger view and also to write time critical assembler sections.