The success of software development depends on many factors. In addition to adhering to the business strategies of clients, the viability of continuous software maintenance and updates should also be carefully considered. For this reason, speed should never be the top priority in software development. Instead, quality should be the starting point as developers think about completing meaningful tasks within time frames, meeting business requirements, and establishing stable long-term software services.
Although seemingly not related to the client's goals, the development team's mindset towards software development, or should we say "persistence" or "aesthetics", is actually a deciding factor on project quality. As they say, the devil is in the details. Where projects strive to provide solutions to certain problems, the details lie in the team's high expectations of themselves.
At 5xRuby, we have always placed a high value on development quality. In this article, we will discuss the aesthetics we implement in project development.
DOING THE RIGHT THING WITHIN LIMITED TIME FRAMES
Enterprises often experience dilemmas while balancing time and budget during the course of software development. Under the constraints of limited resources, the prioritizing of objectives becomes especially important. For all our projects, we place an immense focus on understanding the vision our clients have for the characteristics and functions for their products as well as their target audience to help them choose the most suitable development solution.
For example, if a client wants to develop ten features with only a budget for junior-level engineers and a tight timeline of one month, then we would not persist in directly executing the project and build ten unstable, poorly suited features. Instead, we would discuss and analyze the situation with the client, helping them filter out the most valuable features before starting the development process.
The process of software development is filled with uncertainties. Barriers like specification changes and technical issues continuously change estimated timelines, affecting delivery, sacrificing quality, and producing meaningless results. Nevertheless, we can greatly reduce such risks by choosing to develop the most essential and valuable features. In our years of development experience, many features seem to be incorporated into planning because they were offered by competitors or presented in reference examples, rather than because they were actually needed by a business model or able to enhance user experience. It is always unfortunately wasteful when clients end up investing too many resources on non-critical items.
GOAL-ORIENTED PROJECT MANAGEMENT
In recent years, there have emerged many schools of thought and forms regarding progress management in software projects. For us, we adopt the highly streamlined approach of agile development, while integrating our own practical experiences. In most cases, we set and pursue goals that are achievable within a specified time period taking into account available resources. During this time, the team verifies situations in real time, adjusting priorities and feature planning based on units of one to two weeks according to the project scope and actual status of development. This agile development approach not only helps team members adapt quickly to our unique development process, but also allows for more flexible adjustments in response to requirements given to us in short notice by clients.
Furthermore, we establish a series of evaluation references to conduct progress evaluation. Oftentimes, we would quickly rate the complexity of each feature by referencing the Scrum Poker method of evaluation for every requirement. Then, the project development progress would be predicted based on the points consumed as reflected by the actual status of development over the next one or two weeks. During this process, we continue to fine tune progress estimations at each checkpoint, while continuously communicating with clients. In this way, we are able to complete more high-value features within the constraints of a limited time frame.
ACCELERATING DEVELOPMENT THROUGH HIGH-QUALITY PROGRAMMING
The development process at 5xRuby involves the phases of design, development, test writing, code review, and quality testing. This is why our development timeline often does not appear any shorter than others. Why is this the case?
A reason for the difficulties in software expansion is the use of inappropriate data structure and process logic during the design phase. We would choose to first invest time in analyzing system designs and their business connections, as well as choosing suitable structures for planning. This is akin to building Taipei 101 free from public safety crises beginning with a good foundation and geological evaluation. It would be a disaster to discover that the foundation cannot hold the weight of Taipei 101 when building the 80th floor.
During development, we also ask engineers to write tests and refactor codes to maintain every code submitted in the most stable and updated version. With test assistance, modifications and additions of features can be performed more boldly. Refactoring can also help us correct issues with understanding business models during the development process; it also simplifies and optimizes legacy codes to provide clients with better quality codes. If clients want to conduct in-house maintenance in the future, they will also find transition and expansion to be easier for projects that follow such logics.
Under such a model, though a fair amount of time would be spent on seemingly cumbersome tasks, such as building and testing a development environment, and writing tests in early phases, the verification and protection from these tests can actually enable subsequent development as the system grows in size and complexity over time. This reduces a lot of human errors that can only be verified through repeated manual trial-and-errors. On the other hand, it can also reduce the manpower used during quality testing and place the focus on testing core features.
Software development can be implemented under the premise of “functional features,” or it can adhere to our persistence in producing high-quality software from the perspective of sustainable development. There may not be much difference on the surface, but the disparity is analogous to that between crafts and fast moving consumer goods. In addition to being capable of long-term preservation, good crafts are also characterized by many ingenious ideas as they continue to contribute value to business models with each software update. In contrast, there should not be a high expectation of quality in consumer goods simply aiming to make money from consumers. However, even the prices of consumer goods vary due to factors like quality control, design longevity, and production team quality. High-quality consumer goods still require basic costs before they can be purchased. At 5xRuby, our attitude towards software development is tailored to achieve craft-level work. We persist in delivering a one-of-a-kind high-quality design to every single client.