I defined and implemented processes that streamlined development and defect fixing efforts and improved project tracking metrics.
I staffed and controlled a team that delivered a program within 18 months, consisting of 4 huge projects and 12 medium to large projects in 7 major releases plus 11 high pressure short-cycle projects deployed outside of those releases.
During a corporate reorganisation, I seamlessly transitioned my development team to a new division, minimizing any adaptations that the new management was required to make, while concurrently ramping up a new team.
I demonstrated the discipline & focus required to achieved an EMBA while working full time.
Throughout my career I have developed new skills while honing old ones, meeting my objective of being an excellent candidate for positions as business analyst, team leader or higher management.
I have successfully managed teams of 2 to 12 developers.
I built my team up from 3 developers in one office to 12 developers split between my location in Ottawa and Denver. I scheduled incoming IT projects, estimated budgets and managed team size while planning process improvements and collaborating with other groups to ensure deliverables were met.
I defined and documented processes for software development and quality assurance teams. I improved and documented existing processes. I defined department-wide roles and responsibilites and set up intranet sites where they could be referenced regularly.
I mentored new hires, delegated design components to team members, contributed to the development effort and acted as the lead designer for our projects.
My past work a software developer put me in different situations that taught me many important lessons. To name a few: the need for projects to be properly managed; the value of careful business decisions in a product’s life cycle; the criticality of a well written and comprehensive requirements specification; the importance of a good code repository; how to work in and manage a team.
Many years of my career were spent developing Java, C++, C and assembly language programs. I have worked in situations where even though formal requirements and designs were absent or outdated, I was expected to integrate with a group and start coding immediately. I have also coded and implemented well documented designs, both mine and others'.
I have written several Functional Requirements documents and Software Requirements Specifications. My sources in these assignments were customer requests for proposal, marketing product requirement overviews, interviews with client's employees and discussions with marketing representatives.
The most important part of a software development project is identifying and properly describing the requirements. I have seen, time and again, business analysts cross the line between requirements analysis and design. The value that a good business analyst brings to a project is to write the requirements in a way that leaves the software designers free to apply their expertise where it is best applied – in turning requirements into designs.
To do that, a business analyst has different expertise. I have the communication skills that help me write, speak and listen to a variety of audience types, from executives to technicians. I have the inquisitive nature that drives me to investigate new scenarios to ensure that all likelihoods in a project are properly specified. I have the confidence to highlight gaps and bring in other subject matter experts when I see the need.
I have produced many detailed designs for real time software projects. I have designed to comply with formal requirements as well as worked in informal atmospheres where requirements specification, design and implementation were freely intermixed.
I have clear opinions of how a requirements specification should be written, but I was always flexible in how I approach my design assignments. No matter how the documents were phrased, I always ensured that I understood the intent of the requirements. My ability to focus attention on details uncovered issues in existing systems that were not initially in scope but upon further investigation had to be included to reach the best solution.
Although I have moved on from design and development assignments, my years of experience help me understand the related issues in teams or projects I manage.
I have worked on projects where I was responsible for troubleshooting, enhancing and fixing complex programs. This usually involves quite a bit of investigation, since legacy software is rarely well commented. I have developed the skills to read and understand code written in many different styles by different programmers.
I have written several formal test documents, acceptance test procedures and test cases for my own designs as well as from requirements specifications for designs that were created by others. I have performed automated regression testing on new version releases of applications that were targeted for many embedded and UNIX platforms. I have written WinRunner test scripts to test the GUI interface of WinNT applications.
I documented existing processes and creating new ones that will help meet dominKnow’s goals for continuous improvement in rapid software release and product development. I developed automated tracking processes that report progress on a variety of measures daily. Now I manage those process to ensure smooth communication between groups and fastest possible response time to new issues.
I manage the internal activites for projects competing for resources: new product development, new feature development, customer support / defect fixing and releasing, product language neutralization and localization, etc. I interact with external vendors (e.g. translation service) and track their progress.
As a manager at Bell I led and restructured existing development teams while improving and documenting processes. Team activities became more visible externally and new members could ramp up and start actively contributing to large, complex projects within 2 or 3 weeks.
In a large order management IT environment, I managed teams within a program of greatly varying scope, identifying whether to hire, renew or not renew contracts as the team fluctuated between 3 and 12 members. This eliminated the cost of carrying team members during quiet times and avoided recruiting delays in new projects.
I spearheaded some initiates that improved team throughput. I shortened some project life cycles by at least 1 week by encouraging and arranging for joint development and integration sessions between vendors. I launched an internal project to automate development and documentation of short-cycle projects, which greatly reduced the potential for misinterpretation of documentation and was projected to shorten delivery time from 6 weeks down to 4 weeks. I initiated inter-divisional discussions and influenced overall process improvements that improved defect tracking and reporting and reduced the cost of production incident handling.
As a manager with full time employees as direct reports, I mentored them in their transitions from previous roles within the company, helping them achieve Successful and Exceeds Expectation results in Director-level and VP-level performance reviews
As a team lead with technical expertise in client-server applications I acted as consultant for the redesign of a customer account provisioning web service. It was implemented as a Vitria BusinessWare application. The company executive viewed this application as high risk: I identified processes and architecture that needed change and initiated the required improvements so executives' confidence in its development and operations processes increased.
At Ross I was a designer/developer who worked on a very successful new product that was a market changing innovation in automating news broadcast production. I designed and programmed (Java with use of JUnit for rapid-development) functional and GUI components of many features of the prototype product plus 3 subsequent releases. I contributed new ideas to the design effort for components of the product (and others) that we produced.
I also had additional responsibilities. I assumed responsibility for recruiting and mentoring co-op students, freeing supervisors’ time and bringing in useful resources to contribute to short term projects. I authored ramp-up procedures for co-ops to follow starting on their first day, shortening the amount of time it takes for them to start contributing to projects.
I performed research to find appropriate sources and second sources for parts making up Bill of Materials in a manufacturing environment. This included documenting the production kit building processes, allowing the uninterrupted production and delivery of the product and reducing dependency on single suppliers.
This project supported the value-added services that were an important part of the Sympatico launch of high speed internet. I performed all the duties of a Project Manager, Business Analyst, Architect, Developer and Tester. This was my second contract with the Technology Solutions group within Bell Canada (my first was a sub-contract through CGI in 2000). The project was to add a server to their infrastructure to process queries by validating data from an LDAP Directory.
I coded the server (ParServer) as a Java web application. The multi-threaded servlet initialized multiple Java Naming Directory Interface (JNDI) contexts, and used them to access the LDAP Directory. Responses were formatted in XML. The knowledge of web languages I gained by putting this résumé on the internet allowed me to design the XML content.
For this project I also implemented CVS as the revision control system.
Years later, when returning to Bell, I was told that this server was still running in production and needed very little maintenance. In fact, when value-added services changed significantly and it was time to retire ParServer, some technicians in operations support were not even aware that it was running, error free, on their machines.
My first assignment at NavCanada was to design and write a server that interacts with an Oracle Forms GUI (developed by another group). The code was written in C, and ran on an HP-UX platform. The server accepted requests via an Oracle connection as well as through a TCP socket. I defined the message protocol for the socket link, and wrote the command line application that produces the client requests.
Next I wrote a C++ application for Linux that routes messages from serial links to UDP ports. The serial links are controlled by an ATI MPS800 (Advanced Technologies Multi-protocol Server).
My final assignment was to write a "proof of concept" application which showed that a Java application could be written to simulate the movement of 1800 aircraft around 32 radar installations. The program, which was based on an existing Pascal radar simulator, was successful. In other words, on a 1 GHz processor with 128 MBytes of RAM, running RedHat Linux 1.7.1, the worries of hundreds of threads being unable to share data using standard Java synchronization techniques were unfounded. My prototype was used as a starting point for an evolving design.
I developed applications for CGI in their role of supporting and developing Bell Sympatico and Advantage Internet billing and registration utilities.
On one assignment, I wrote a C++ application, running on a Solaris host, that processed millions of records; daily moving files from a server on a remote host, validating the content, and storing the data in database tables that were used to calculate customers' bills. The functional specification for the operation of this program was the existing process, written in Perl and embedded SQL. The C++ program I wrote uses RogueWave's C++ class library "Tools.h++" and database access object library "RWDB".
On another project, written in C and running under Solaris, I added several new features to client and server programs that handled registration requests from customer service representatives. Processes in the server (PCache) involved database access (MySQL), Directory interfaces (Netscape iPlanet) and an e-mail application (Software.com InterMail). Communication with remote clients was via sockets and with local clients was via circular queues in shared memory. On this project I also guaranteed build-package reproducibility and source code security by implementing a revision control system using SCCS.
Applying my attention to detail in a product verification role produced test applications that improved Entrust’s security API product’s quality.
In these contracts I wrote C++, Perl and WinRunner test software to verify various functions provided by Entrust's security software toolkits. Some tests were standalone applications that ran in a console window and were configured from a text file or from command line options. Some of the tests were made part of a larger library of test objects that run within a test "harness".
I became familiar with Entrust’s File and Admin ToolKit API, and some of the administrative aspects of their PKI. I ported my test programs to all 32 bit Windows platforms as well as many release versions of Solaris, HPUX and AIX.
A short contract at SHL proved my ability to ramp up quickly and contribute early to an ongoing project.
In this contract I wrote a few C++ modules in a CORBA system that tracks telephone subscriber information.
At Vistar I designed and wrote a test program to be used to verify and test the hardware design and prototypes of a mobile terminal. I then wrote some of the application to run on the terminal, including the time base, scheduler, RS232 interface, and GPS receiver interface. The terminal was the interface to the customer’s equipment in Vistar’s DGS product, a data gathering system for asset tracking over a satellite network.
An interesting aspect of the mobile terminal design was an algorithm I developed to read a temperature sensing device and adjust timer chips to accommodate the temperature sensitivity of on-board crystals.
At ObjecTime I ran semi-automated regression tests for release 5.0 of ObjecTime, their real-time object oriented system modeling application (a GUI OO-CAD tool). Their product was targeted for many UNIX (Sun4, Solaris, QNX, Lynx) and embedded (pSOS, VRTX, VxWorks) platforms.
The high quality and success of release 5.0 was a major selling point in the buy-out of ObjecTime by Rational Rose, and then IBM.
Several assignments were given to me which I quickly completed, pleasing customers by promptly giving them new features in their mobile terminals.
You may have seen GMSI's mobile data display terminals in Ottawa's Blue Line taxis. At GMSI I was responsible for upgrading in-vehicle display terminals (8086 and 68000 platforms) with new features. I worked on user interfaces, magnetic card strip readers and a synchronous radio link protocol.
With Transys I was responsible for the design and implementation of the software in an embedded 68302 fax interface product. I was responsible for all aspects of the software: low level device drivers; system initialization and self tests; incorporation of a real-time operating system (Accelerated Technologies, Nucleus Plus); interface with a fax modem application protocol library (Rockwell, RIFP); and implementation of various communication protocol packages.
At Gandalf I analysed existing code and coded new features in C and Intel assembly languages to improve the client’s current products and bring a new data compressor to market.
I had four contracts working on Gandalf’s data communication products, such as an ISDN Bridge and ISDN Edge Router. The features involved security and configuration in the user interfaces, modifications in the link layer communications and decompression of stored code during power up procedures.
For one contract with another consultant, I wrote a functional requirements specification for a software package that acts as a software test head and function library in an automated test environment. In another contract, I specified and made changes to an existing diagnostics application on DOS, to “multi-lingualize” the code by removing hard coded strings and store them in disk files for translation and retrieval at run-time.
I specified the requirements and made design suggestions for a product which enables remote equipment to communicate with a central computer over an X.25 satellite network. All program interfaces followed OSI standards.
Becoming very familiar with a long government Request for Proposal and the subsequent Requirements Specification made me a valuable contributor to High Level and Detailed Design Specifications that were part of the successful completion of a large contract with the federal Ministry of Transportation.
I specified and designed many aspects of the software and hardware interfaces in Marconi's VOR RMMS project. This involved collaboration between 4 or 5 design teams. The design method loosely followed DOD-STD 2167. The target operating system was Marconi's "Foundation", which provided real time executive functions and message transportation.
I also designed and wrote software for data collection, diagnostics and remote generation of performance reports. My code acted on interfaces with several hardware circuit boards. I wrote device drivers and hardware test code.
I followed the founders on MNET from Cybernex, adding value to their start up which eventually allowed them to negotiate a buy-out with a new parent company.
I was responsible for developing an error-correcting communication protocol for transmission and reception of data over citizen band radio modems. I supervised the mobile terminal and central dispatch application software development teams.
At Cybernex I wrote the software for various intelligent display terminals which emulate major manufacturers' products. I lead a team working on products which emulate Burroughs ET1210 and Honeywell RH7816, multi-address, multi-personality data communications terminals. I also created a 4 plane, high-resolution colour graphics driver which emulates a Tektronics 4100 series graphics terminal.
As a student at Telesat I summarized data from the analysis of travelling wave tube amplifiers designed for use in communications satellites (Anik C). I also ran Basic programs on HP intelligent terminals that plotted the theoretical power dispersion of transmissions from geocentric orbits at configurable latitude and longitude.
My primary work environments have been PC desktops and Sun workstations. I have also worked on other UNIX platforms. At the beginning of my career, I started generating code in simple line editors, compiling with command line compilers and linkers and debugging with diagnostic printf statements embedded in the code. As they became available, I used integrated development tools like Microsoft Visual Studio, Sun Workshop and Forte for Java and Eclipse.
As a result of working in many different environments, I can quickly become productive in a new assignment. I can easily adapt to new work groups because the availability of tools that I am familiar with is rarely a problem. Ten years ago, moving between clients (for example, one who used vi as an editor to one who preferred emacs) could be a problem, so I cultivated a versatility that made me very transportable . Now-a-days, with hundreds of inexpensive or free tools available on the internet, consultants just download their preferred environment. However, my versatility is still useful in environments where clients prefer to standardize the software they use and workstations come pre-imaged with everything a consultant can use.
I have experience with design standards (OSI) international conference procedural and communication standards (ITU: e.g. HDLC, X.25, RS232, T.4 and T.30)
I have demonstrated the ability to quickly learn new programming languages. Although I have taken courses to update my programming knowledge, most often my first exposure to a new language is on the job. The best way to learn a language is to have an objective and a good base of example code; the environment in which a contract programmer usually works.
I have 20 years experience programming in C, using a variety of compilers, including Microsoft, Microtek, Borland and GNU. I have developed with the help of fully integrated symbol level debuggers as well as in the most primitive set-ups with only console output as a debug aid.
Since 1998 at Entrust, SHL, CGI and NavCanada I developed C++ applications for Windows (using Visual Studio) and UNIX platforms. I have also taken a course that focused on the transition of programming skills from C to C++. My style of software development has always been very modular, so there were few adaptations for me to make in my first formal object oriented design environment.
At Bell Canada, NavCanada and Ross Video, I applied my knowledge of object orientation to code effectively in Java.
At NavCanada I produced a design for and coded a Java application prototype to prove the feasibility of a multithreaded radar and flight plan simulator. It made extensive use of synchronized Java Timer class objects. The application was started and stopped using a simple Swing dialog.
At Bell Canada, I developed Java a web application. In addition to the architecture, software design and coding, I was responsible for creating a development environment: patching the Solaris operating system, downloading and installing the web server (Tomcat), IDE (Forte) and the Java libraries and setting up the revision control system (CVS). The core component of the application was a servlet which makes Java Naming and Directory Interface (JNDI) calls to an X.500 Directory. The application was scalable using a Java Properties file defining the maximum number of persistent X.500 contexts to create. A context would be created if one was not available, after which it would be saved in a synchronized collection. The architecture was also scalable by adding additional host servers, the access to which is controlled by a front end router. The Java technology was J2 1.4.0, the security components were OpenSSL and the password cryptography was provided by a Java class library from Crypix.org.
Ross Video manufactures video signal processors for live broadcast production. The Java application that I worked on at Ross was a production automation and remote control program for a video switcher. It ran on a PC with multiple monitors and various peripherals. The UI made extensive use of Swing components in different layouts. The application was a distributed system following a Model-View-Controller paradigm using Remote Procedure Calls and UDP for communication. I worked on all aspects of the application, from GUI to communication layer. All my code was validated by a JUnit test suite that I wrote in parallel with the production code. Nightly ANT processes would build the full production package and run the JUnit tests against it.
I have a very good working knowledge of XML, having designed web service API’s for two projects at Bell and using XML configured tools at Ross. I had incidental exposure to mark-up programming languages at Bell and dominKnow, where scripting programming languages (Tapestry CML and ColdFusion) are used.
The content of this web site shows most of my knowledge of HTML and CSS. I maintain this site as way to provide an up to date, public copy of my résumé. It's essentially an introduction, table of contents and résumé in separte frames, cross-referenced with anchors and links.
I have not had any assignments where my active server pages were formally deployed. However I have had exposure to VBScript in ASP and I have tried to keep my knowledge up to date. At Bell, I wrote a simple ASP Form that would provide authentication services to a browser. It was used for internal testing of the web services.
The extent of my knowledge of Javascript and JQuery is shown on this site.
At CGI I used RWDB (a C++ dataBase class library) and embedded SQL to write simple queries that accumulated data for reports containing millions of records. At NavCanada I wrote SQL to select data in an Oracle database and interface with Oracle Forms clients.
I have worked in environments (especially at ObjecTime, Entrust and Ross) where test programs were written or controlled by scripts written in Perl, WinRunner, ANT/JUnit, UNIX shell scripts and DOS .bat scripts. At CGI I converted some database reports controlled by Perl scripts running on Solaris to C++.
Almost every assignment requires some special handling of files or filtering of data. I have become proficient at quickly writing shell scripts for repeated processes (automating backups, builds and test suites); eliminating the introduction of user errors and reducing the time spent by developers in running those processes.
I have a good knowledge in Excel VBA for writing macros that automatically update spreadsheets and create graphical reports. I've used it to create daily scheduled processes that fetch remote XML data from web app API's to populate pivot tables and graphs used in project schedule tracking.
I began my career at Cybernex, developing programs for embedded systems written in Motorola 6800 assembly language. Since then I have had experience working on real time systems designed with Motorola 6809, 680x0 Intel 8051, i960 and others. All of the embedded systems I worked on (at MNet, Marconi, Gandalf, Transys, GMSI and Vistar) had some or all of their code written in the target assembly language.
Although I have not had the opportunity in production software to apply my knowledge of the all languages I learned in high school and university (Pascal, Ada, Fortran, Basic), having a good base knowledge of different programming concepts has allowed me to quickly understand new languages and techniques.
I have automated and improved reports in Excel spreadsheets by writing VBA macros that fetch and manipulate data; making the tracking of processes covered by those reports more efficient.
My work in data security, telecommunication, satellite and radio communication industries has given me the opportunity to design and develop both low level embedded programs on small microprocessor boards and high level applications on most common platforms.
The first Windows applications that I developed were console I/O based test programs. At Entrust a test application I wrote accepted test parameters from a command line and exercised many of the features of a PKI security toolkit API. This application had to run in all 32 bit versions of Windows.
The largest Windows based application I worked on was OverDrive, at Ross Video. This application ran in a Java run-time environment. It had a fairly complex graphical user interface and data interface with remote components.
The above-mentioned Entrust toolkit test program was also supported on several release versions of the three major UNIX platforms (Solaris, HPUX and AIX).
At SHL and CGI I wrote data processing applications in C and C++ that used socket connections and CORBA interfaces to send and receive data between Solaris hosts.
I installed and maintained a Linux workstation at NavCanada. I used X clients on this box to access the development group's main server, as well as the test platform for C++ and Java applications that I developed.
I have developed applications that ran under commercial real time operating systems and small proprietary multi-tasking kernels. At Cybernex and Marconi the embedded applications ran under custom-made kernels that provided little more than start up and task switching functionality. At Transys I made the decision to use Nucleus Plus because of its small footprint and low cost. It provided all the features required by a multi-task system, including pipe support for inter-process communication and some memory management.
Other projects I have worked on have used commercial operating systems of various complexity, e.g. RMK (Vistar, Gandalf), pSOS (MNet, ObjecTime) and VRTX and VxWorks ObjecTime).
EMBA - Ottawa University, 2005: the most interesting parts of the program covered general management, operations, international business development, marketing and financial accounting.
B.Eng. - Carleton University, 1982: education in C, Ada, Pascal, Basic, FORTRAN and various assembly languages, as well as real time operating systems, logic design, DBMS and structured software analysis using Buhr diagrams. I have updated my skills with a course in C++.
I am a licensed Professional Engineer, a member in good standing of the Association of Professional Engineers of Ontario. I have a PWGSC Secret security clearance.
I have improved the understanding of new and existing processes and architectures by clearly documenting them using a number of graphic design methodologies (UML, Buhr structure graphs, Yourdon, Cross-Functional Flowcharts, etc.).
During my career I have worked on many prototype hardware designs. I have aided hardware Engineers by acquiring skills needed to use oscilloscopes, logic analyzers, protocol analyzers, and in-circuit emulators. This reduced risk in and shortened schedules of hardware development projects.