From vision to reality

Tight collaboration with our clients, trough the entire process, is a key ingredient of our development strategy. The resulting products reflect that partnerships by yielding quality and creating spot-on business solutions.

Process focused on the end user

Fostering a human-centered approach in product or service development awakens the creative potential to integrate the needs of the people, the possibilities of technology and the requirements for business success.

Research, Envision, Define

Each idea is worth exploring. By clearly determining the required business needs, elaborating the use cases and devising an intelligent way of engaging the end user, we identify key success elements for a product or service.

Design, Structure, Plan

By employing systematic use-case-driven and architecture-centric perspective we derive software architectures according to the business requirements. A holistic approach to designing software features helps improve customer satisfaction.

Develop, Verify, Test

Crafting ideas into reality with technology, while incorporating user feedback and validating the result against the user requirements. It is a process of continuous innovation and transformation.

Launch, Scale, Monitor

Product launch involves continuous planning from the initial development phase. The importance of main scalability dimensions (performance, availability and maintenance) must not be overlooked. Tracking and analyzing software metrics enables continuously improvement.

Agility as a driver

Agile development, supported by a culture committed to continuous innovation, enables quick adaptations, facilitates rapid introduction of new features, eliminates non-value-added activities, reduces product costs and enables on time satisfaction of customer requirements. It helps to deliver value quickly and establish scalable, flexible development processes.

More control

Incremental development enables work to be broken into parts and conducted in rapid, iterative cycles. This provides:

  • Transparency

  • Improved project predictability

  • Reduced risk

  • Predictable Costs and Schedule

Rapid reaction to change

While delivering an agreed subset of features during each iteration, there is also opportunity to constantly refine and re-prioritize the remaining tasks. This gives:

  • Fast adaptation to new needs

  • Focus on user requirements

  • Shorter time-to-market

  • Increased product competitiveness

Frequent and fast releases

Value is produced in smaller increments instead of one big release. This enables:

  • Fast initial production release

  • Constant improvements based on feedback from previous releases

  • A functional increment of the product delivered with every iteration

  • Changes to project scope are less costly and easier to implement

Focus on end user and business value

By allowing the client to prioritize the features, understanding of what’s most important to the client’s is achieved, therefore the most valuable features can be delivered first. This leeds to:

  • Increased customer satisfaction

  • Superior product quality

  • Reduced risk of expensive market misses

  • Eliminated waste

Enforcing Quality as a Norm

"Quality is not act. It is a habit."
Aristotle

To Assert quality we follow main points described in the "ISO/IEC 25010 - System and software quality model" throughout the entire software product development lifecycle.

Key points include focus on:

Functional Stability - achieved by ensuring the the product or system provides the specified functions, under the defined conditions.

Performance efficiency - maintained by optimized resource usage, response time and performance under desired conditions, but also in high-load situations.

Compatibility - attained by enabling the product or a solution to exchanging information with other products, systems or components, but also empowering it to share environments with other software products without any interference.

Usability - affects user experience and defines how the user achieves specified goals with effectiveness, efficiency and satisfaction in a specified context of use. To attain one needs to lok at user interface aesthetics, simplicity and intuitivity, focus on operability, accessibility and protection of end users against making non-intentional errors.

Reliability - enables the product or a solution to adequately perform specified functions for a specified period of time. It involves constant Availability, high degree of Fault tolerance and the ability to Recover the data and re-establish the desired state of the system in case of a an interruption or a failure.

Security - involves putting in place procedures and mechanisms that protect information and data allowing access only to users an systems with appropriate levels of authorization.

Maintainability - addresses the degree of effectiveness and efficiency with which a product or system can be modified, improved, adapted to changes in environment, or new requirements. It involves aspects like support for Modularity, Reusability, Reusability and Testability.

Portability - enables product or component to be transferred from one hardware or software environment to the another one.





Innovation as a Driver

“We cannot solve our problems with the same thinking we used when we created them.”
Albert Einstein

We humans, by nature, strive to constantly improve our selves and the environment we live in. Therefore, innovation and creativity can be found in each and every single one of us. However, to unlock and foster this potential, one needs to create an innovation-stimulating environment. Here are some of the innovation-cultivation methods we promote:

Encourage new ideas - we like to encourage brainstorming and idea generation, and have a general principle that there are no bad ideas. When something does goes wrong, it is treated as a learning experience. This kind of approach helps us to foster a creative freedom which results in real innovation.

Fast prototype development process - allows the developers to use shortcuts, make assumptions, hard-code non-essential parts, if necessary, and use mocked data to quickly build functional prototype of the idea. By giving the prototype to the users one can get user feedback quickly, which provides relevant data on the solidity of the idea and shines light on the next steps in the development process.

Stimulate a diverse environment and skill set - By having a mix of senior and junior developers gives the team hardened experience mixed with fresh ideas. Working with the latest technologies and following the latest trends in the IT industry, helps to develop a diverse skill set, and a broad knowledge.

Treat failure as feedback - the concept of failure is a ‘construct’ made up by the human mind to label certain, often, negative events, situations, results or circumstances. However, if we look at those events objectively, reflect on them, analyze the cause and steps that led to them, we will get invaluable feedback, far more important than any success will ever provide.

Set aside time to think and explore - We tend to direct 10-15% of the employee time into creative thinking, research and new idea generation. Also we encourage communication, discussions and productive workshops that help generate innovative ideas and drive creativity.





Achieving Simplicity

"Simplicity is the Ultimate Sophistication."
Leonardo Da Vinci

As software products are inherently complex, a lot of inter-communicating components coupled with an ever changing environment, we can say that Simplicity is the "Holy Grail" of software development. It demands skill, devotion, and inspiration in discovering simple concepts which underline the complexity of the overall software solution, but also openness to compromise when conflicting demands cannot be met. As a prerequisite for achieving reliability, usability, scalability and maintainability, Simplicity is one of the most important characteristics of a software product. To attain it we apply the following practices:

Thinking beyond the technical aspects - Whenever we think software, we tend to think in technical terms. However, software is not only the code, frameworks, and different technologies, it is about solving real-life problems, providing a intuitive users experience, satisfying business and product owner needs, achieving stakeholder interests and bending to the existing financial constraints.

Build complexity with simple parts - How to foster simplicity when complexity is inevitable? The answer is, build it gradually, use simple, understandable components, make those components reusable, scalable, readable, and atomic. By reaching complexity with simplicity makes that complexity understandable and predictable.

Maintain consistency in design and functionalities - By building consistent, the same principles and concepts are applied to the whole software product. This results in a more fluid and predictable user interaction and therefore increases the overall user experience.

Employ standard procedures and practices - Simplicity can be stimulated by applying standard, well-known, battle-tested practices. Upfront design detects issues in early development stages, design reviews validate the UI, and an overall plan for how your system will function decreases potential problems later on. A well executed and consistent code reviews and automatic code analysis tools detect potential complications and help to follow accepted code quality standards. Clear separation of different concepts and a well structured software architecture enable the creation of an understandable and easily maintainable solution.