Custom Software Solutions
When needs mandate a unique solution, the only choice is to have purpose-built software put in place. Most modern software solutions use modular frameworks to enable a consistent set of common functionalities. This cuts the software engineering time significantly because there is no need to recreate capabilities common to all systems using the framework. The modularity of modern software is extremely high, and it is commonplace to reuse internal and externally sourced components. Business now pays significantly less to build a customised software solution today than in days past.
We have a lifetime of experience in developing custom computer software on a variety of platforms for many business needs is several industry segments.
Software solutions can be built using a variety of platforms, programming languages and there are many frameworks and component libraries available to speed up the creation of software. Much of our work focuses in the commercial space and we believe that the current Microsoft offering is one of the most complete for building business solutions. The variety of business software, ability to customise and the pure raw software development and delivery platforms is making the Microsoft Stack an extremely attractive environment to create and build any business software. As businesses take on SaaS services such as Office 365 and Azure, Microsoft supports integration of these services with custom software applications to an elevated level. By no means is this environment the only choice or the best in all area’s but we believe as a whole it has a lot to offer.
System Development Lifecycle (SDLC)
For many in the software development industry they are familiar with the concept of a SDLC. For those that are not, this is the process that we go through when building computer software systems. Introducing or updating a computer software solution, is effecting a change to one or more business processes, procedures and/or functions. The SDLC is the primary tool to manage that change from the software perspective.
Traditional approaches focused on performing the SDLC activities for the entire solution and this often results in long drawn out projects that miss the mark because of unforeseen change in needs. Modern “agile” approaches break down a large project into small chunks (1 or 2 weeks work) with intention of focusing on one key requirement at a time. This approach allows for greater flexibility in accommodating the changing landscape of business over the life of the project. Typically, there is a part of analysis and design carried out up front to allow the overall architecture to form.
We have worked in most scenarios and work across the entire SDLC. The rigidness and specific activities will typically align with the business need, project scale and overall objective. It is important to note that the SDLC is a process and does not define a time span (depending on scale, a complete process could only be hours).
Although the specific method, flow and terminology all varies amongst the industry, all include these key concepts:
Before embarking on any change, understanding the current circumstance and the future requirement is a key to success. Many in larger businesses adopt formal methodologies for a consistent approach but each project and environment are different so an ability to adapt is especially important. The end goal is to have a clear set of documentation that everyone working in the business and on the project can understand. It is important to note that this is an iterative process and requirements and documentation evolves continually over the life of the project as information becomes available.
Identifying the right approach to resolve the business need and understanding the right technology to deploy is the focus of design. The initial design processes will typically focus on overall architectural needs to support the computer system. Factors including structure, data storage, business logic encapsulation, interface needs and reuse through frameworks are all considerations. The design will continually evolve and refined over the life of the project.
Once we understand the build requirement, the software development can commence, and this activity involves the programming of the solution and bringing together the various components. The best way to minimise effort in this stage is to ensure the Analysis and Design steps are thorough. Good software developers are familiar with a variety of coding techniques, frameworks and component libraries. Developers who are generalists that understand business concepts typically adapt better to working in the commercial software development space.
As part of creating computer software good testing is critical. There are many terminologies used for testing but typically Unit Tests, System Test and User Tests are the main categories. Unit tests are technical in nature and performed by the software developer to ensure the work they complete meets to goals of the project. System tests focus around the system pieces working with each other and other systems. User Testing allows the user to ensure the system meets the needs of the company users of the system are best suited for this. Modern software development can automate tests using a variety of techniques. Increasingly software solution methodologies that focus on evolving the test suite before construction are becoming prevalent.