Services
In addition to developing its own products, Designing Patterns also offers consulting services. The company possesses expertise in a number of areas, including:
- System architecture
- Development environments
- File, module, library, and system level refactoring
- Large systems
- Build systems
- Systems programming
- Parallel computing
- Scalable systems
- Network programming
- Soft real-time systems
- Performance measurement and optimization
- Continuously available systems
- Market data handling
- Server-side web application programming
- Client-side web application programming
Designing Patterns employees have executed significant work in many languages, including C, C++, Java, Ruby, Perl, FORTRAN 77, FORTRAN 95, and Pascal. We have done this work on several different flavors of UNIX, including Linux, FreeBSD, Solaris, and AIX, as well as on Windows. We are comfortable working in environments with large amounts of proprietary software as well as those with large amounts of open source software.
We have worked in several domains, including financial services and healthcare. While doing so, we have been able to adapt our skills successfully to meet the specific demands of these problem spaces, for example, microsecond message processing latency and protecting patient privacy. We also have created software in a variety of technical contexts, such as a real-time market data database system, server-side web applications, client-side web applications, and mobile phones. We have appreciation for the capabilities and constraints of different environments.
We would like to present several use cases for our consulting services. One use case is hiring Designing Patterns to consult on existing software, most likely in order to make recommendations for it, to optimize it, to refactor it, to debug it, or to enhance it. In order to ensure that we have the capabilities to satisfy our client, we take the time to understand intimately our client's requirements, how the software is used by our client, and the software itself before we agree to accept any compensation. Prior to a client committing to us, we provide a detailed list of deliverables, written as best we can to be meaningful in the client's problem space. We are happy to work with any staff or consultants that our client has working on the software.
Another use case is hiring Designing Patterns to create new software. We take the time to study both our client's stated requirements and the proposed use of the software, in order to develop a full set of functional, design, and implementation requirements. These requirements form the basis of the estimate that we provide to our clients. During the work, we provide prototypes to our client as often as possible, in order to gather feedback. In addition, we commit to informing our clients as soon as possible about any slippage in the product's delivery date. Finally, we work with our clients to plan a full signoff and rollout process after the delivery, in order to ensure the suitability of our products. Software has a life cycle, and Designing Patterns is prepared to support the life cycle of its software in several ways. Firstly, we will do our utmost to examine and to fix bugs in our software as quickly as possible, at no cost to the client if we can manage it. If a bug is beyond our ability to fix quickly, we will work with our clients to create a schedule according to which the work can be done. Secondly, if the client wishes, Designing Patterns will open-source the software. Open-sourcing the software allows it to be supported and enhanced by software engineers around the world, at no charge to the client. We open-source much of our own software and are happy to do this for our clients. If the client does not wish to open-source the software, Designing Patterns will provide all source code and documentation to the client at the end of the project, empowering the client to make any desired changes. As in the first use case, we are happy to create the software with other programmers specified by our client.
A third use case is hiring Designing Patterns to make developer environment and workflow improvements. This service is applicable to companies that have programmers and want outside input in order to improve the programmers' quality of work, quality of life, and efficiency. From experience in industry and from maintaining our own development shop, Designing Patterns can point out issues with and recommend solutions for build systems, work environments, source code control, peer review, communication, and deployment processes. We take the time to understand our client's business and to interview many participants in our client's software process, including developers, team leaders, managers, support personnel, and, if possible, customers. Once we formulate a list of suggestions, we discuss them with all stakeholders and help the client to implement them. The implementation could include supervising the installation of a new source code control system, creating new documentation standards, or introducing new processes that will reduce the number of programmer context switches. The happiness and quality of work of our clients' software engineers is our only goal in this use case.
Our experience enhancing large software systems has led us to be passionate believers in integrating unit testing and performance measurements into every aspect of our work. In addition, we are very aware of the need to maintain compatibility as software is enhanced and to execute seamless deployments. We bring this to all work that we do for ourselves and for our clients and strive not just to satisfy our clients' requirements but also to provide them with high quality software that can be used and easily leveraged over the long-term.
Our Portfolio provides some concrete examples of how Designing Patterns has created value for its clients.