As a diverse surveying and mapping company, Continental Mapping uses a large variety of software products in its production workflows, as do many architecture and engineering firms. These include Bentley MicroStation, AutoDesk AutoCAD, BAE Systems Socet Set, DAT/EM Summit Evolution, Esri ArcGIS, QGIS, and Certainty 3D TopoDOT. Many of these applications allow extensions to their toolsets by providing the user with the ability to create custom tools or scripts. This helps automate repetitive workflow steps or expand the functionality to address new challenges thus saving time and increasing the quality of the data being produced.
There are several options available to us when developing these scripts and tools, including VBA, Visual Studio.Net integration, Python, and others. Some applications even allow tools to be written in more than one language or environment. Developers are constantly challenged with a variety of issues when faced with this multilingual development world:
- Our development team must stay current on the variety of tools available to us so we always use what is most appropriate for the task at hand
- We need to select the most appropriate technology to accomplish the task, and
- We want to invest in tool development that helps us for the present and long term
Picking the best solution to develop the tools or scripts is an important step in developing workflow automation solutions. To help us function most efficiently in a multilingual environment, we have identified six tips to consider:
Tip #1: Track Your Backlog. To ensure you get the biggest bang for your buck on training investments, keep a close eye on your request backlog and available skills. This will help ensure you tie them together and not bounce your staff around.
Tip #2: Know The Application. Maintain a good working knowledge of what the base application allows for extension. Esri's return to command line capabilities (does anyone remember the SML and AML days?) in the recent years and its reliance on Python is a great example of that. Stay current with where the application and vendor is going.
Tip #3: Inventory Your Skillsets. Be sure to inventory the skillsets of your developers as well as those of higher end users. Integrate that knowledge with your training and staff development program to properly forecast and target skill development.
Tip #4: Understand the Benefits of One Language Over Another. It's imperative to understand the benefits of one language over another. For Continental Mapping, speed is critical, so the question is often asked "will one language likely run the required processes more quickly than another?" An example of this is the speed improvements by writing routines in C++ instead of using COM objects in C#.
Tip #5: Understand User Interface Requirements. We engage with users to decide what interface elements they require and the level of effort to build those in each of the available language options. Do we need to ensure the UI is consistent with the application for which it is being developed? Sometimes lean and mean will do the trick.
Tip #6: Re-use What You Build. Developers also need to be cognizant of functions or procedures that may be reused and determine the best way to build those into a library to be accessible to other languages. The goal is to only build things once.
Continental Mapping develops in an Agile environment so we often do not have defined requirements as to what language we use for development. In talking to users and gathering their stories about their needs, it is important to ask them about the look and feel of the interface, along with what they expect to provide as input and what they expect to receive as output. All of these factors will have an effect on how the tool is developed.
Just as good communication, clear user needs and wants, and frequent checkpoints with product owners are key to building a tool or application that meets the user's needs, it is just as important to understand what language and development environment will best suit the development team to meet those needs.