Design-Build-Run
Practices and Principles for Production-Ready Software Development By Dave Ingram

Home
01

About Me
02

My Journey
03

About DBR
04

Outline
05

Excerpts
06
Professional Career

Import/Export Junior Trader

This was my first job after leaving school. For some reason my Career Advisor said it involved computers when in fact it had nothing to do with computers. It was back in the days when smoking was allowed in the office and people had ashtrays on their desks. Me included. The basic idea of the job was simple - an enquiry would come in from an overseas client, it was the job of the traders to source the goods in the enquiry, work out shipping and insurance costs and provide a quote back to the client. If the customer liked the price, they placed an order. Whilst the idea was simple, the execution was very tedious. Everything was manual and turnaround times were tight - no change there then. All paperwork was typed up on typewriters. I developed an aptitude for big tenders having over 100 items. To give you an idea of variation, one day you could be trying to find manufacturers of cupboard doors another trying to find manufacturers of infrared spectrophotometers - all this without the aid of the internet. The office had hundreds of supplier catalogues that needed to be sifted through. Each trader would maintain their supplier relationships and contacts. If the catalogues didn't get a result it was onto the phones or Telex to widen the search.

With my somewhat limited computing knowledge, I set about designing and developing a system to at least help automate some of the work involved in this process. During the day, I'd execute my job and in the evening it was back home designing and developing the system (on the Atari 800XL).

I overheard a Director of the company comment to a supplier that "David has no commercial software development experience so don't listen to him". I was actually appauled by this as I'd orginally looked up to him. Basically, an external crowd had been commisioned to develop an Invoicing system for us and I was chosen to test it because of my obvious experience with computers. I could tell it had been designed by different people that didn't appear to talk to each other. Here's the thing - after typing in a Purchase Order, using the extremely tedious interface, you had the option to Save it or Cancel it with either the 'S' or 'C' keys. The default being Save by simply pressing Enter. Good one. On the other hand, after typing in an Invoice, and by the way there was no transfer of information from the PO, you could also Save or Cancel it with the appropriate keys. The default in this case being Cancel by pressing Enter. How's that for a consistent design? The number of un-saved invoices would be enormous and the time and effort typing them back in would be huge I thought. I basically fed back my comments but they obviously fell on deaf ears.

It was at this point that I started my own company with John to build out my ideas for All-In-One which I've documented in my personal journey.

Bespoke Software Developer

My first official development role was a programmer on the THEOS Operating System programming in THEOS BASIC. The company developed bespoke applications for their clients. One of the founders had developed a code generator. It basically allowed you to "paint" a simple screen in text and add placeholders for input fields. It then cycled through the placeholders and allowed you to specify particular values for each input field such as text, datetime, length format and so forth. When all the information had been captured, it generated all the code to display the screen and allow the user to list records, search for records, create, read, update and delete (CRUD) records. The programmers then updated the generated code with various extensions and functionality. I really liked the idea and it captured my imagination for further development. It's what sparked my interest for 4th Generation Languages. Originally I'd been charged with minor updates and bug fixes to existing packages such as the Accounts and Payroll packages and I also helped out on a Manufacturing application too. I went on to update the "code generator" and include new functionality and better regeneration capabilities.

After a short while of "doing my own thing" - I joined another company writing bespoke software in THEOS BASIC again. This time I had my own clients. I upgraded a Video Rental System the company had developed for an existing client at the same time as developing a Haulage Control System. I wrote a couple of prototype systems for this company in C on Unix but they didn't really go anywere. In my spare time I started developing some ideas for a 4th Generation Language and messed around with some prototypes. Windows was making more headway and I was very interested because of my love of graphics and I started playing around with it in my spare time but the company didn't want to invest in any hardcore development on it.

I ended up working for a company designing and writing a 4th Generation Language in C, in text mode, to initially allow them to develop products to support their existing range. It was simply referred to as the "Software Development Kit (SDK)" Whilst it was great to develop the application, it still wasn't in Windows which is what I wanted to develop for. However, I learnt alot more about code generation and 4th Generation Languages. At home, I continued learning windows development, starting out with Turbo C for Windows and then in Borland C/C++ whilst prototyping a growing number of ideas. When I left this company, again I decided to "go it alone" for a while.

Visual Basic Developer

Having learnt a lot about Visual Basic and Custom Control development, I joined a software house as a Visual Basic Programmer. The company developed Electronic Payment Systems. The Electronic Data Interchange application was Windows based and written in a combination of C, Visual Basic and Access. It was pretty large and complex. However, it ticked all my boxes at the time. I completed a number of major developments in this role including:

- Upgrade Routine
- Smartcard Security
- Secure Database
- Fedwire Payments
- ODBC Compliance
- SWIFT MT500 (Stocks and Shares)
- Stop Payments
- Achitecting the Windows NT / SQL Server version.

With the blessing of the company, I moved to one of their clients to co-ordinate the UAT and act a development consultant between their team of 20 and the software vendion. Whilst there, I designed and developed additional system components, including a Back Office Automation Suite to:

- Achieve major throughput figures and enhanced security
- Operational software to ensure all systems were running correctly
- Back up vital information at regular intervals
- Detect throughput loss
- Allow for remote system startup, shutdown and invesigation and administration

This was a contact position and the company were willing to extend me but I'd been offered job as European EDI Manager at another company which I had accepted.

European EDI Manager

With my knowledge of electronic data interchange I got offered a job as the European EDI Manager for a large manufacturing company. The company was rolling out SAP. It was at this point, when reading up about SAP that I realised how close All-In-One was. Anyway, as European EDI Manager, based in Brussels. I was responsible for managing relationships with trading partners and EDI software suppliers. The EDI infrastucture was based on UNIX using EDI transalation software and an IBM VAN (Value Added Network). I was tasked with building a team of 3 people and providing a centre of competence for EDI within Europe.

Development Lead

Based on the success I had in Brussels, I was offered a job at a large computer manufacterer.  I was working within the European Headquarters, Services IT department of 100 - 150 people.  I was involved in a number of development projects including:

  • Service Logistics Partner Connectivity - As the development lead/technical consultant in this team of 8 people, I architected and developed a component based solution to act an an extensible message routing gateway and track and trace database for all Service and Logistics messaging. During this time I also experimented with Microsoft Transaction Server.
  • Global On-line Service Status - This component based solution that I designed and developed allowed users to obtain Service Call Status information via an intranet site.
  • Premier Access Release 2 - I designed and developed an NT Service that extracted Service Call Parts Requests from an SQL database and sent them via IBM MQSeries to the backend processing system.
  • XML Messaging - This proof-of-concept project involved the translation of legacy information into XML messages and vice-versa. I designed and developed the solution, and wrote a number of internal white papers on how to use XML correctly and how to develop XML based messaging systems.
  • EDI Rollout and Upgrade - I assisted in the development of EDI tlanslation maps and additional routing software to send and receive Service Call information via Harbinger TLE (Trusted Link Enterprise).

I was also heavily involved in the stabilisation and upgrade of these systems to 24x7 availability.

Contractor

The key Banking project was a systems building and implementation project to develop an Internet banking offering to their small to medium sized enterprise customer base. As a Contract Technical Consultant to Accenture, I designed and developed a number of components:

  • Payments via MQSeries - This interface was used to send payments via IBM MQSeries to the bank's payment processing system.
  • Performance Monitoring - This development comprised of various COM components that sent messages via an NT Mailslot to a multithreaded Windows NT listener which used more COM components to record performance information.
  • Security Subsystem Connection Pooling - This involved developing a series of components that utilised the MTS Shared Property Manager to store connections to the security subsystem to increase performance and reduce resource usage.
  • System Availability Monitor - I confirmed the operational requirements and designed and developed a Windows NT Service to monitor the security subsystem.
  • Batch Jobs - I assisted in the design of the batch architecture framework and developed a number of batch jobs required for release 1.0 and 1.1 to go-live.
  • Application Fixes - Re-creating and analysing defects and proposing and implementing solutions.

I established myself as a lead developer and expert in Microsoft Technolgies and advanced development practices. A considerable amount of my time was spent training more junior team members in the following:

- Coding Practices and Standards
- Advanced MTS (Microsoft Transaction Server) Programming including SPM
- Advanced Error Handling Techniques including logging and audit.
- Advanced COM Programming in C++ and Visual Basic
- Windows NT Security/MTS Security and IIS
- DCOM Configuration
- Advanced Transation Control
- Operational Support
- IBM MQSeries

Specialist and Expert

Based on the success of working for the company as a contactor they offered me a full time position in their Specialist and Expert group. My first project was as a member of the Operations Architecture - Tools Implementation team. I was specifically tasked with the implementation of the tools to pro-actively monitor and support the messaging infrastructure. This involved documenting requirements and scope, producing detailed design documentation and the procedures manuals for administration and operations staff. I was then tasked with integrating the monitoring of the messaging hub with monitoring products using SNMP traps.

On the next project I bridged the gap between the Java Technical Architecture team and the Java Development Teams to provide expert support and mentoring to developers. I produced a number of best practice papers including Coding and Standards, Unit Test and Integration Test Approaches, Unit Test Primer and Code Review Primer. I was also involved in the re-design of the object model to support the strategic solution, ease development and enhance functionality.

Whilst working on these projects I quickly made a name for myself and progressed to the role of Technical Architect.

Technical Architect

As a technical architect, I'm typically responsible for the overall solution architecture from a technical perspective.  In addition to taking a lead role in defining and overseeing the implementation of the solution architecture, the Technical Architect provides leadership and guidance to the development teams on technical design, coding, and testing techniques. In this role I've worked on and led many successful and large-scale projects using many different technologies.

I now enjoy a role where I am responsible for industrialising and streamlining our internal processes and practices. I also perform various project reviews and provide guidance to our global project teams on a regular basis.

HomeAbout MeMy JourneyAbout DBROutlineExcerpts
How I Got Started
Personal Development
Professional Career