Brolin Software Development Operation and Methodology

Software Development Operation

Software Development Operation


               Brolin’s Corporate offices are located in Irvine, CA. where Brolin’s software design and project management are performed by Brolin’s staff.  Software coding is performed by Brolin programmers located at Brolin’s Development Offices in Sofia, Bulgaria. Programming in Bulgaria instead of the U.S. reduces development expenses by eighty percent. 


Brolin established it’s offshore software development operations in Bulgaria in 1994 and has successfully completed projects for some of the best-known companies worldwide including Bank of America, CB Richard Ellis, Fleet Bank, La Salle Partners, Neutrogena, Sempra Energy, Siemens, Sun Microsystems and Travelers Insurance. Brolin has earned a reputation for producing quality software and providing excellent post development support.  Brolin is a full-service software developer with a diverse set of application development skills, as well as the financial, accounting, and business practice savvy to convert challenging business logic into extremely robust and cost effective solutions. 


Brolin located its development operations in Bulgaria because Bulgaria offers a large supply of programming talent.  As a major source of software development to the former Soviet Union, the collapse of the Soviet Union left Bulgaria with a large number of unemployed programmers and engineers possessing applicable programming skills.  It also left Bulgaria with a large number of students enrolled in programming and engineering majors within its Universities.  This along with it being the most stable country in the region has made Bulgaria an ideal location for Brolin’s development operations.


All members of the Brolin Development Team are permanent employees of Brolin and have received extensive training in Brolin’s development methodology, generic components and development standards.  To foster teamwork and shared knowledge of software code, all Brolin Developers work within the same Brolin facility.  A requirement for employment as a programmer with Brolin is to possess a strong passion for software development.  This is evidenced by the 200+ hours of work that the average Brolin Developer puts in each month.


Development Methodology


Software is developed using a process refined by years of experience at Brolin and proven highly effective.  The process includes a set of documented programming standards describing, engineering practices, naming conventions, coding practices, code management procedures, testing and quality assurance procedures. 


The Brolin development process also includes a technique referred to at Brolin as “cross pollination”.  This process assures that Project Development Leaders and programmers are familiar with each other’s projects; thus enabling Brolin to easily reassign staff between projects as development demands change.  Brolin’s standardized development methodology, framework, components and class libraries further enable this.


With a strong emphasis on code reuse and “cross pollination”, the Brolin Development Process encourages sharing of objects, functions and code across projects, further reducing costs, shortening time to completion and improving the overall quality of the code.  Brolin’s Senior Programmers meet weekly to discuss and identify the need for new generic components and generic objects. These discussions also include the review of new technologies as well as the discovery of new techniques that can be applied to existing technology. 


Projects are tracked and managed using Brolin’s web based Task Manager.  Each new feature and or modification to The Company’s software goes through the following development cycle:


           Requirements documentation

           Design Specifications


           Tasks Assignment



           Code checked in/out of SourceSafe Repository

           Programmer Testing and Debugging

           Design Implementation Review

           Version Control


           Automated Installation Setups

           Testing on Staging Server

           Quality Assurance Testing

           Implementation on Live Server


Programmers at Brolin specialize in specific languages and technologies.  Brolin employs specialists in low level programming using Assembler, C, C++ and Visual C++ and the MFC library; higher level application programming with Visual Basic, Java, and Java Scripting; Web Design with HTML, XML and tools such as Dream-Weaver and FrontPage; Graphics Design with tools like PhotoShop and Corel Draw; Database Schema Design and SQL Expertise; Report Writing with tools like Crystal Reports, Access and XML.


            The first step of an enhancement or feature development project involves preparing to write an accurate and complete Statement of Work. First it is ascertained which users are to be affected including any particular idiosyncrasies the scope of work might have concentrated for specific customer industries or job functions. A Brolin Consultant & Architect will layout the different levels of experience that differentiates the various sets of expected users: visitors, administrators, members, etc. They try to approximate numbers of the various types of users expected for the new feature, how often users are expected to use the software and the tasks they will accomplish with the software. Brolin gets all parties involved very early in the concept discussions to understand what they need the application to do. Everyone involved discusses functions that the feature must perform, including graphical interface, management reports, and usability. The cost for development is approximated and all available software products that provide overlapping or competing capabilities are explored. 


The developers conduct an analysis determining which technologies will be used. The technical staff investigates which existing modules or features might be relevant; then determines what development methodologies and generic components will be used.


Once an understanding of users' needs and legacy code is reached, software requirements are written. They provide a guide for building the software indicating: What users want to accomplish with the feature; features and functions, required response time, usability, security levels; etc.; a detailed project plan and schedule with responsibilities and commitments from everyone involved. Ongoing communication continues among the developers; consultant/architect, customers and CTO.


Planning documents are developed and reviewed by the project manager including a Software Requirements Document, Software Development Plan and Functional Specification. The documents expand upon the initial requirements. They define the planned features and functions of the software product, describe other qualities that the software must have, define and prioritizes requirements, capabilities and features that the engineering team must deliver in the final result, defines the target market, business problem, and user issues, identify existing solutions and competitive products comparing the feature under development with existing products, identify long-term plans for future releases and features, and identify maintenance and support issues.


Design begins when the requirements have been defined. A detailed design document is developed by the CTO and his staff. It becomes the developer's blueprint, with precise directions to the software programmers.  It provides a detailed description of the architectural framework and how basic control and data structures will be organized. The Detailed Design Document also defines tables and diagrams that translate the functional specification into data structures, data flows, and algorithms. This document is written before programming starts and forms the basis for all future design and coding.


The designer's goal is to develop a model that achieves the functional requirements while operating within key constraints, such as performance goals, the architecture, and hardware. The Company tries to maintain design that is simple, easily understood, easily communicated, easily built and easily tested. The detailed design document includes a description of the overall design concept and a high-level description of the standards and conventions to be used.


The Brolin application architecture is based on a unified framework designed for expandability and modifiability, eliminating the "spaghetti code" common to so many software projects that make them difficult to modify because one change can affect so many other pieces of the code. The Company's code is written in discrete modules with clear inputs and outputs, the function of each module is clear, and it’s easy to project which of the other modules are affected by changing a particular module. The Company’s modules are integrated within a framework which provides universal functionality and maintains consistency in the engineering, implementation and ultimately the user experience.


After defining the problem and blueprinting the solution, software is built and tested according to the plan. The CTO reviews the project for completeness and accuracy during the software development process. Throughout the programming phase, daily reviews are conducted between the US and Bulgaria where The Company's developers live and work. As work progresses required changes are identified and discussed by the Company's CTO, the project manager and the software programmers.


The developers create a set of example scenarios and problems covering the software's functionality.  This is done very early in development. When run frequently during the development process, these examples and the developer's own test cases help to identify and isolate defects when they are easier to find and less costly to correct. At the end of software development, the developers provide technical documentation.


The coding phase of a software development project should represent about 20% of the total time and development cost. The majority of the development process is dedicated to designing, engineering, testing and integrating.  This results in well-structured code that reduces test and integration time, and overall maintenance.


The Company further reduces cost of maintenance and improves quality by using a small number of application development tools; maintaining standardized programming style guidelines and commenting practices to increase software code readability; implementing standardized exception handling; limiting functions and algorithms to discrete tasks, reducing the number of branches in the code; making identifier names as meaningful as possible; using local variables and identifiers for local purposes, avoiding global definitions unless absolutely necessary; and keeping code as simple as possible.


The development team tests to verify that the software meets the functionality, performance, usability, features, and capabilities, specified in the design document. The developers test for both functionality and usability before submitting it for final acceptance testing.


When the software is first able to run the developers begin Alpha Testing even when the software doesn't have all the intended functionality. Alpha tests are conducted in Bulgaria. The project manager utilizes a prototype to evaluate and provide input to the developer as the design evolves. In-depth software reliability testing, installation testing, and documentation testing are not done at alpha test time, since the software is only a prototype.


The Company's Documentation Manager begins creating user documentation early in the software development process. A usable draft is available for beta testing stage.


Beta testing is conducted by either installing the beta version at the customer’s site or on a server hosted by Brolin.  The testing is conducted by the Consultant/Architect and a limited number of beta customers. After integration of the beta test feedback, the developer prepares the software install into the latest install version. Development is ended and user documentation is completed. Any patch releases are expediently tested, approved, and entered into the system. Changes made to the software program after final acceptance testing are document in writing what changes were made, and document the testing done after making the changes: functional testing, to ensure that the fix worked, and regression testing, to ensure that no unintended changes occurred at other points in the application.


            Final release versions are integrated within Automated Installation programs that perform updating of system files, application components, third party components, database structural modifications including addition of new tables, data conversion, site updates, update logging and version control. The setup distribution programs are designed to be run by end users to install/update their PCs or server.