Product design

Product design, at its core, is actually a problem solving activity. A process where one uses different tools and ideas to discover and define a product or a service that will improve a user experience or satisfy a specific business need. Weather designing a System, Process or an Interface it is all about discovering and balancing customers’ habits, behaviors, frustrations, needs, and wants.

Evolving the idea

Forming the idea is done trough multiple question and task-based workshops with the client and the targeted users. By utilizing techniques like Journey Maps we tend to capture a user idea through a high-level description of the desired task or process. By documenting the triggers, motivation and user-experience we deep dive into the details of the idea, while user emotions help us to identify pain-points and opportunities.

Visualizing and structuring

Next step is to visualize and create a draft of the solution, a mock-up used as a basis for further higher precision designs. This draft versions are great for exploring an idea because of a low cost investment, and they allow to, relatively easy, filter out the bad approaches. A great way of visualizing and structuring is by creating Wireframes - a sketch or blueprint that is useful for showing and communicating the structure of the software solution.

Building and validating

Final stage of design phase consist of creating simulated clickable prototype designs whose goal is to test to solution through a series of feedback-based user sessions. The main objective is to gather unbiased data from users in a specifically targeted market segment and catch any information architecture and usability issues. After the verification, product designs serve as the blueprint and provide detailed guidance to the product implementation effort.

Web development

Out of more than 2 billion active websites today about 97% of those use JavaScript. JavaScript frameworks, therefore, play a key part of any modern enterprise-level frontend web development. In general they provide developers with reliable and tested tools for building scalable, interactive web solutions. After extensive experience with Angular and React, lately, our focus is also shifting to Flutter for web.

Angular

Angular is a Javascript framework built using Typescript and managed by Google’s Angular Team and the Angular developer community. It is mostly used to build complex enterprise-grade apps like single-page applications and progressive web applications. While having a steeper learning curve, as it is a full-fledged framework, features like Two-way data binding, Directives, Dependency injection and a large community enable it to reduce the time and ease the development effort.

React

Reactjs, a Javascript library which uses JSX, a concept of writing HTML inside JavaScript. It provides only the the view part in the MVC (Model-View-Controller) model, and allows developers to freely choose different libraries and frameworks to manage other aspects of their applications. It is easy to learn, has Virtual DOM to efficiently manage changes in real DOM, functional or stateless components that isolate state from the components and allow more flexibility with component reuse.

Flutter for web

Flutter is the right solution when building a web and mobile apps at the same time, and therefore utilizing a single codebase for the entire project. However, developers still need to create responsive UIs, as the web and mobile apps will work on various screen sizes and resolutions. Flutter also enables a fast development with hot-reload which works by injecting updated source code files into the running Dart Virtual Machine and enables instant visualisation of the implemented change.

Mobile development

After some experience with hybrid app development using Ionic framework our main focus shifted to Flutter. While Ionic proved to be developer-friendly by building upon familiar Javascript frameworks and libraries, it's main downside turn out to be performance, mainly because it uses WebView for rendering. This is especially true for memory-intensive or complex applications. On the other hand, when building with Flutter your Dart code is converted into native machine code that will run smooth on any targeted platform.

Flutter, driving efficient development process

As a cross-platform technology, Flutter enables iOS and Android development from the same codebase. Additionally, it is the only mobile SDK that doesn’t use a bridge for communication between the app and the platform and so delivers high performance. Consequently this contributes to fast app startup times and less performance issues. Flutter also includes a well-designed “hot reload” function, which allows you to see updates in real time without restarting the app and therefore shortens the development effort.

Extensive Customisation and Fast Rendering

Flutter controllers every pixel on the screen, meaning it dosen't use native built-in pre-styled components. Flutter asks the native platform a "Canvas" and then creates native components by drawing them on that canvas. Therefore, Flutter is not bound by the restrictions of the platformThe and it's way of rendering makes the framework really stand out from the crowd eliminating any worries about the UI consistency on different platforms.

Beautiful, Rich and Flexible UI

Flutter provides rich widgets, reusable components, that follow the guidelines of Cupertino (iOS) and Material Design (Android). It has the ability to customize anything you see on the screen, regardless of the complexity. Flutter allows you to effortlessly perform different element transitions, shape or color manipulations, transformations, etc. While it is possible to do a very custom UI on the native platforms as well, the required effort required is usualy multiple times higher.

Faster Time-to-Market

Since Flutter is cross-platform framework, the same code base is used for iOS and Android applications, which saves both time and resources. It is also a perfect choice for MVP (Minimum Viable Product) development. One can release your app quicker and ship new features and upgrades to iOS and Android simultaneously.

Compatibility & Open-source

Since Flutter widgets are part of the app and not the platform, there is less or no compatibility issues on different OS versions. This in turn means less time spent on testing. Additional, both Flutter and Dart are open-source, and provide extensive documentation and community support to help out with any issues one may encounter.

Backend development

Backend development includes the 'behind-the-scenes' activities, whether it's building/maintaining a microservice environment, writing APIs, integrating different systems via. queues, modeling a database and writing code to interact with a database, or working on business processes and data architecture.

Enterprise level microservice environments

If it is about building microservices from the ground up or breaking down legacy monolithic applications effective microservices implementation has the potential to increase the rate of business innovation and responsiveness. Out main focus lies with the Java, Spring and Spring Cloud microservice ecosystem. Microservices:

  • Ensure reliability by improved scalability and improve resiliency by better fault isolation

  • Enable greater business agility and better CI/CD support, which lead to faster deployment and troubleshooting

  • Optimize business capabilities by customizing the needs of each component.

APIs and system integration

We live in world where business models are based on secure access to data and different services. APIs allow us to easily share data and information, connect people and systems, enable different transactions and create new products or services. On the other hand system integration is becoming increasingly significant and a basic requirement for business evolution and progress.

  • A connected system increases productivity, improves efficiency and adds value to customers.

  • Real time data exchange via APIs saves time, money, and is far more reliable in terms of data accuracy

  • Prompt collaboration and information sharing between different systems, ensures the fluidity of all business processes.

Distributed, reactive, message and event driven systems

In a system concerned with streams of information and the asynchronous propagation of changes, one needs to rely on message or event driven architectures and non-blocking reactive programing principles. Either it is implementing JVM based actor model with toolkit like Akka, using a message broker like RabbitMQ, or utilizing a distributed streaming platform like Kafka, each system needs to be tailored to the specific business needs.

  • Robust and distributed systems are capable of handling high number of requests from multiple client applications

  • Message and event driven systems have the ability to perform decoupled, parallel asynchronous operations in real time, maximizing responsiveness and improving customer experience

  • Reactive Systems are, flexible, handle failure and remain available during outages, loosely-coupled and scalable, and also strive under varying load conditions

Modeling and supporting business processes

In a volatile modern economy, organizations must understand and constantly improve their business processes to make successful and competitive business decisions. The process-oriented view of business environment provides a better understanding of the organization and helps in comprehending the needs of the information systems that support the business process.

  • By knowing and controlling business processes one can easily change them and promptly respond to new customer demands

  • With rising competition and never-ending market demands, companies must continuously improve and fine-tune their business processes.

  • Everyone in a company needs to working together towards a common set of goals. Business process management helps improve cross-department collaboration which brings immense benefits to the company.

DevOps as a service

DevOps implies the collaboration between development and operations teams in order to deliver better products with the help of resources like Continuous Integration and Continuous Delivery (CI/CD) tools, software provisioning and configuration management utilities like Ansible, container platforms, version control systems and observability and monitoring solutions. We offer a powerful combination of profound tech expertise in the above described areas.

Continuous Integration, Delivery and Deployment

Continuous Integration encourages constants merges of code changes to the main branch, and validation of those changes trough automated tests in oder to eliminate bugs in early development stages. An extension of Continuous Integration, Continuous Delivery, enables automated deploys of any artefact versions to all required environments (dev, test, prod, etc) therefore allowing faster and painless version updates. With Continuous deployment every change that passes all stages of your production pipeline is released to the customers without human intervention, which is is an excellent way to accelerate the customer-feedback loop and free the team from worrying about production releases.

Configuration management and Infrastructure-as-code

Configuration Management is fundamental for a DevOps-driven framework, it helps to automate mundane maintenance tasks, enables faster restoration of services, increases agility and improves resolution of issues by making it easy for people to track changes that may have caused problems. It also reduces risk of unpredictable system failures and data breaches. By managing and provisioning infrastructure as code instead of doing it through manual processes, we create configuration files that contain your infrastructure specifications (e.g. so called playbooks in the Ansible Automation Platform). This approach makes it easier to edit and distribute configurations but also ensures improved infrastructure consistency and faster deployment.

Continuous, real time, service monitoring solutions

Continuous monitoring is a critical component of the DevOps pipeline. It provides automation that allow developers to effectively monitor applications, infrastructure, and network components in the production environment. Continuous monitoring assists IT organizations by providing real-time feedback in the event of different issues arising in the prod environment, which allows the responsible people to work on necessary fixes as soon as possible. Basically, it improves incident response and threat assessment, helps analyzing root causes of problems and provides general feedback on the overall health of the IT system.

Consulting services

We offer in-depth analysis of the existing IT systems according to the business needs, assistance in validating and modernizing IT solutions and IT infrastructure, support in a cloud migration effort or expert guidance in a Business Process Management implementation and Business Process optimization effort.

Advising IT solution implementation

By analyzing your business needs we propose an IT solution (devise the architecture, select most adequate technologies, propose a devops approach) and construct a structured implementation plan with project timeline and required IT resources. Integration with existing software components in existing environment is reviewed, also the modernization of existing IT solutions or introduction of new digital technologies is considered.

Application and infrastructure modernization

We analyze existing legacy applications and plan improvements by considering software architecture changes, introduction of new components, the need for re-coding using latest technologies or frameworks, possibility of a migration to a new platform, or the option of containerization and moving to the cloud. By providing functional and technical support we optimize costly maintenance of obsolete technologies and therefore improve the business agility.

Cloud migration and Containerization

Migration to the cloud environment offers higher performance, increased security, flexibility and cost-effectiveness for your applications stack, and is something worth considering. We help you decide on an optimal cloud model and migration strategy, set up CI/CD pipelines, devise the cloud application and data architecture and help achieve any modifications to the existing application stack, e.g. guidance trough the containerization process.

Advising BPM Implementation and BP Optimization

Agility of the organization depends on the clarity of the Business Processes (BP) and the ability to promptly adapt and fine-tune those BPs as market demands change. Therefore it is of a great importance for the organization to have a well defined, optimized BPs and a solid Business Process Management (BPM) solution. We provide guidance in the BPM implementation effort by selecting the adequate BPM suite based on the business needs and advise the BP modeling approach. It is important to define the context, business process architecture of the business area, discover and model the BPs and identify any process deficiencies. We help develop a BPM mentality in a company, by sharing expertise, experience, skills and a methodology for business process modelling, analysis, design and improvement. Also we communicate BPM principles, concepts and benefits to senior management and clarify their role in the success of a BPM initiative.