Software development starts with a great design. Design is much more than just a nice user interface; it is solving real-world business challenges with the appropriate use of architecture, workflow, and usability. Our design process is both iterative and collaborative, and establishing a constant feedback loop with our clients is critical for building quality software.
Building exceptional software is a core part of our DNA. We believe in using the right technology for your needs. In general, our solutions employ Microsoft technologies like C# and MVC along with industry standard tools, protocols, and platforms like NHibernate, HTML5, and jQuery. We make it our goal to deliver builds for your review early and often so that you have complete visibility into our progress.
We ship software with a superior level of quality. Our job is not finished when we write the last line of code. At Alltech Consulting, "Delivery" means ensuring that the application is stable, complete, and ready for production. Our work is a reflection of who we are, so we don't cut corners when it comes to quality.
We recognize the investment businesses and organizations make in custom developed software, and we understand the need to protect that investment with a reliable, adaptable, and maintainable product. We have instituted several layers of quality assurance beginning with our Continuous Integration (CI) build, test, and deployment process that extends through the source code delivered with complete coverage via automated component tests for enhancement regression verification.
We understand the absolute truth of engineering software for today's distributed systems; a SOLID architectural pattern is a requirement for successful delivery. We recognize that the best architectures are those allowed to evolve as development progresses, but there is no substitute for having a well-tested and proven pattern to begin with. To that end, we adhere to the following architectural principles:
For web-based enterprise applications, we espouse the benefits of a specialized hexagonal architecture known as Onion Architecture. The core principle of this architecture is to build the application around an independent object model that describes the business domain. Component coupling is unidirectional toward the center with separation between component contracts (interfaces) and implementations.
Understanding the structure of the architecture is simple. In practice, the architecture relies on the Dependency Inversion (DI) principle to assemble the components at runtime. We isolate the "Inverter" into a separate physical tier to avoid leaking responsibilities.
Key tenets of Onion Architecture:
We use three separate strategies for mobile development. The first option is to use a responsive layout framework to adaptively render web content for multiple device viewports (screens). This is a standard feature that we include in all web applications. This ensures that your application will function on desktop, tablet, and smartphone clients from day one. This strategy is useful for applications that need broad reach but do not need local device capabilities such as location, camera, or local storage.
For the best mobile experience, or when low-level device features are required, only a native application will do. Native mobile applications require the most development effort because usually a minimum of two versions (iOS and Android) must be created. We have adopted the use of Xamarin to enable cross-platform development of most of the codebase, even though UI development is still device OS specific. The single codebase is written in C# and the Xamarin compiler bundles the compiled code with the .NET runtime and outputs a native ARM executable, packaged as an iOS or Android application.
Regardless of the mobile development approach used, we believe in keeping the mobile application as thin as possible. By deferring actions to a service layer, the mobile application is less likely to require modification. The service layer acts as an adapter for enterprise services and as a business logic tier so that the mobile application is limited mostly to just presentation responsibilities.