Project - Software Development - Commercial Product Configurator
I was originally hired to be solely responsible for extending the life, updating the functionality, and improving the ease of use, of a prior written Microsoft Visual Basic coded engineering Configurator used by customers to engineer garage door solutions for end-customers, and maintain and replenish inventory. While the program was essentially sufficient to business and customer needs, it had a low customer adoption rate (40% of the customers refused to use it):- Quotations could not be made as the software was forcing inventory to be allocated as the customer was designing a solution.
- Not all customers carried inventory and viewed these extra steps as un-necessary.
- To help with this, the developer duplicated the program - customers could use one program for quoting, and the second to record qualified sales.
- But no solution was offered to eliminate the need to manage inventory.
- This process was tedious and prone to error as customers could not import / export documents between the two programs, forcing them to duplicate their work efforts between the two programs.
- Customers could perform all of the available functions in each of the programs, increasing error counts and causing confusion about which program to use at any given time.
- There was only one pricing and discount model available in the program, but there were four pricing and discount models available.
- When noticed by the developer, the chosen solution was to create four databases and create a release for each combination.
- The database had not been secured - customers could edit it.
- It was noticed that customers had edited the database and were adjusting parts and prices.
- Some of the engineering limitations and restrictions had been saved in the database. Customers had the ability to adjust them.
- The company had to send a communication to the customer base asking them not to make any adjustments.
- Customer service had to manually check each incoming order.
- Engineering had to manually check incoming orders from specific customers, and was asked to engineer solutions directly for other customers.
- The code lacked standards making it difficult to track the engineering, pricing, and inventory allocation processes.
- Debugging and introducing new products proved difficult and time consuming.
- The developer was able to introduce some of the new products into the program, but this generally introduced significantly more bugs in the application (breaking older stable routines).
- Per most engineering Configurators the engineering was complex, spanning multiple screens having options that would become available as choices were made per screen.
- Unfortunately the design of the engineering flow was forcing significant reverse navigation through the screens, complicating coding and the user experience.
- In some cases, customers were printing solutions generated by the system and then manually editing them by hand prior to faxing them in.
- The inventory module was not being used as they were deemed 'unreliable' and too complicated or time consuming to use.
- The developer offered no solution due to the complexity of the coded routines.
- Updates could only be applied to the prior version. New installations took a lot of time because customers had to install the first release and then every subsequent release following - each time ensuring the computer was rebooted and the program was run at least once.
I gained approvals to:
- address the above mentioned
- change the engineering selection sequence, eliminate the need to reverse navigate through the application, and reduce the screen count by four
- update the programming language, database technology, and software deployment system
- reduce maintenance costs by changing the software anti-piracy system from a hardware (dongle) based to a software (key) based system
- ensure program architecture allows for the quick introduction of products and taking less time to maintain
- ensure customers could maintain inventory in their own working language
- ensure the software could be released on internationalized and standard instances of Microsoft Windows (multi-language)
- Visio was used to map out the GUI interface, describe and link modules, and define the various Configurator screens
- Websites were created to describe complex engineering flows and provide sample solutions
- Exchange Newsgroup and Tasks were used to foster communications between the Engineering and Development team, the assigning of tasks, and to identify / track bugs
- White boards were used for Data Flow Diagrams, the database definition, and database mathematics (inventory depletion, replenishment quantities, etc.) as discussions were necessary
- Microsoft Project was used to manage the project and provide updates
- Software developmental guidelines and meeting minutes were published on websites
- Outlook Calendars were used to track all customer communications, enabling visibility into time spends and helping to co-ordinate support calls
- created a requirements document, soliciting feedback from individuals in the company and the customer base
- described the application using the above mentioned documentation systems
- developed deployment, technical support, and testing and training procedures for all developed software
- worked to redevelop the engineering flow, which became the standard used by the Engineering department and customer base
- lead all meetings relating to code development and engineering information sessions for both the older, existing products, and the new products still under development
- decided to use the SCRUM development method to code the main body of the application, and code the engineering modules using the AGILE development method
- worked with the Engineering Manager to update any outdated engineering schedules, and the Development Team to trans-code engineering routines and the updated engineering flow into the application
- acted as lead developer, writing more complex sections of code as required (springing calculations and anti-piracy security integration)
- was responsible for the creation of the new testing procedures (manual and automated testing) and environment
- worked with lawyer to create Software License agreements and re-master Customer Confidentiality Agreements
- was responsible for the release and distribution of the software program
- was responsible for all customer communications (manuals, upgrade instructions, customer training, and customer bulletins)
- The company decided to enter some new markets that would use our older products, so I was asked to introduce a new pricing model into the older application and release it to new select foreign customers.
- As the company discovered the products offered by their new competitors, the company decided to increase the product offerings - increasing the number of products needing to be designed, tested, and coded.
- As it was viewed that these new parts would not be desired in the North American market, all new parts were described using metric measurements. This changed as the products matured, but the descriptions were never updated. The software team developed an integrated unit converter app, helping people convert between metric and imperial measurements.
- The company decided to enter the new markets as soon as the new products were ready but prior to the software being available, and had decided that Engineering would create solutions for the customers in lieu of the software. However, upon entering the markets incompatibilities were found which needed to be corrected. With my team still requiring time from Engineering to provide updates and test our code, the Engineering department quickly became saturated, further delaying the release of the software. Plus, the engineering department was using our program, in Beta, to generate core door solutions.
The program was released to the international customer base four months after the new products were finalized. The program enjoyed the highest adoption rate of any prior releases, and even won back some customers who had chosen to use competitive products and software. A few of the benefits realized by this development effort were:
- all of the necessary functions were incorporated into a single program
- new features had been incorporated, such as:
- whether or not inventory was to be carried, per computer instance
- whether or not to deplete inventory on a pick list, a specific item, or an entire order
- which products would be available in the menu, or selected by default
- the interface was simplified and the screen count reduced by five
- the time required to introduce new products into the application was significantly reduced
- language barriers were reduced by
- the colorizing of 'like' items on the engineering screens, which helped to group parts together and bring clarity as to item usage
- providing a database field so parts could be identified using their local language
- the database was encrypted
- we employed a custom mathematical equation to encrypt prices
- this helped to ensure that prices would not be exposed if the database encryption was defeated
- this eliminated the ability for the customers to manipulate the prices in the database
- the replacement anti-piracy system that I sourced enabled us the ability to both unlock the software and control the pricing and over sized door options
- I was recognized by the developer of the anti-piracy system for my unique way of incorporating it into our software (my model was later incorporated into their standard offering)
- the software could be installed on localized and internationalized versions of Windows
- the program could be installed on stand-alone or networked computers, and could be deployed to clients using Microsoft Windows Group Policy
- new deployments were easier and faster to manage as you now only needed to install the base installation and then the latest update
- no engineering data was stored in the database
- Priced Bill of Materials and Quotations
- Ability to place orders and replenish inventory
- Inventory management
- material allocations
- min/max/reordering levels
- cycle count
- valuation report
- local language descriptions
- Scheduling and Reminders
- Import/Export capabilities
- An in-program help facility that was used to help answer customer questions and provide help (we incorporated an Office Help Assistant into the program)
- Timed software expiry, allowing us to track and control software deployments