Tools

The Challenge

While the cost of computing power and bandwidth continues to get cheaper, the complexity of software continues to grow. The major costs (and risks) to most businesses are the long timelines and legions of specialists needed to successfully design, develop, configure, test, and support a piece of software throughout its life cycle.

The Solution

Just as software is used as a tool to solve business problems, we also focus on tools aimed at solving the problems caused by software itself. The goal is to simplify the software development process and allow you to:
  • Leverage existing solutions
  • Manage costs and complexity
  • Automate or eliminate repetitive tasks
  • Reduce time to market
  • Provide consistency and improve quality
  • Provide end-users with additional customization and flexibility

Our Experience

While we keep up to date on the latest technology and trends, we also have full life-cycle experience building and supporting the following kinds of tools from the ground up. Much of this experience has been repeated over the years in a diverse array of products that range from POS systems, to web-based Enterprise Systems, to video games.
User Interfaces: GUI Engines, Visual Component Libraries, and WYSIWYG Editors
Whether you are building a web page, a point of sale, or a video game, the most common requirement is a rich and intuitive interface for your end users to interact with. This interface is built using reusable components such as buttons, edit boxes, and images. Often these components are enhanced versions of existing controls that were modified to improve usability or simplify development (as with our extensions to .NET). In other cases these components are built from the ground up using low level drawing primitives (as we have done with points of sale, kiosks, and video games). Lastly, you need a WYSIWYG (What You See Is What You Get) editing tool that allows you to configure and preview your user interface. These editors not only include declarative options like colors or sizes, but also scripting functionality and binding to data sources. Ideally this should be simple enough for end users to create modifications (mods) of their own or even entirely new applications.
Data Access: SQL Generators and Mappers, OLAP Reporting Tools, and Import/Export Frameworks
One of the most repetitive and time consuming tasks in a large software project is dealing with the wide array of data it requires. This data could be historical sales transactions, configuration of inventory items, or even customer profiles. More often than not, this data is spread out amongst different systems, formats, and geographic locations. Typically a large team of developers, database analysts, and integration specialists are needed to bring these isolated silos of information together. SQL generators and mappers simplify the development process by providing an automated and consistent way of querying and interacting with data throughout the system. OLAP tools can be used by both developers and business users alike to bring together and compare ad hoc sets of data. Imagine a store manager being able to create a monthly category sales reports with a few clicks of the mouse. Automated import and exports allow simple data transfer without all of the manual file shuffling and transformation.
Web Application Frameworks: Enterprise Portals, Content Management Systems, and Analytics
Enterprise class websites are more than just a set of simple 'brochureware' pages. They are dynamic online collaboration systems that often run much, if not all, of a company's business activities. Advanced applications including budgeting, forecasting, training, sales, and support can be consolidated in a single place even if your users span the globe. Building upon the user interface and data access layers mentioned previously, web frameworks provide the higher level functionity (such as security, background jobs, workflows, content management, and reporting) that make these applications possible. The sites build upon themselves and new menus, pages, and reports can be configured by business users, not just developers.
Automated Testing: Unit Test Frameworks, Scripting, and Data Generators
Rigorous testing is essential to development process, but unfortunately is usually the first thing to get short-changed. Because much of the testing effort is repetitive and time consuming, the best solution is automation. By configuring tests up front, you find bugs earlier in the process and minimize their impact. Additionally, smoke and regression tests can often be run after every build without any human intervention. Automated tests are often more successful because of greater coverage. Developers and QE's spend their time finding creative ways to break the system while scripting and data generation test all of the possible combinations. One of our more interesting experiences was creating a video game smoke test that placed AI controlled players in contrived scenarios. If the game worked as intended, the player would live to play another day.
Automated Builds, Packaging, and Deployment
Software systems are often complex beasts that often span several operating systems and physical locations. Programming languages are often targeted to specific environments and tasks, so it is not unusual for a single application to use a few. Additionally, static configuration and content often take up a thousand times more space than the code itself! With all of these challenges, it is no simple task to build a new version of the system, package it up, and get it ready to deploy. Even a single missing file can bring a system to a standstill and with continuous integration this could potentially happen multiple times per day. Automating this process ensures that it is fast, consistent, and right.