We learn & share

ACA Group Blog

Read more about our thoughts, views, and opinions on various topics, important announcements, useful insights, and advice from our experts.

Featured

8 MAY 2025
Reading time 5 min

In the ever-evolving landscape of data management, investing in platforms and navigating migrations between them is a recurring theme in many data strategies. How can we ensure that these investments remain relevant and can evolve over time, avoiding endless migration projects? The answer lies in embracing ‘Composability’ - a key principle for designing robust, future-proof data (mesh) platforms. Is there a silver bullet we can buy off-the-shelf? The data-solution market is flooded with data vendor tools positioning themselves as the platform for everything, as the all-in-one silver bullet. It's important to know that there is no silver bullet. While opting for a single off-the-shelf platform might seem like a quick and easy solution at first, it can lead to problems down the line. These monolithic off-the-shelf platforms often end up inflexible to support all use cases, not customizable enough, and eventually become outdated.This results in big complicated migration projects to the next silver bullet platform, and organizations ending up with multiple all-in-one platforms, causing disruptions in day-to-day operations and hindering overall progress. Flexibility is key to your data mesh platform architecture A complete data platform must address numerous aspects: data storage, query engines, security, data access, discovery, observability, governance, developer experience, automation, a marketplace, data quality, etc. Some vendors claim their all-in-one data solution can tackle all of these. However, typically such a platform excels in certain aspects, but falls short in others. For example, a platform might offer a high-end query engine, but lack depth in features of the data marketplace included in their solution. To future-proof your platform, it must incorporate the best tools for each aspect and evolve as new technologies emerge. Today's cutting-edge solutions can be outdated tomorrow, so flexibility and evolvability are essential for your data mesh platform architecture. Embrace composability: Engineer your future Rather than locking into one single tool, aim to build a platform with composability at its core. Picture a platform where different technologies and tools can be seamlessly integrated, replaced, or evolved, with an integrated and automated self-service experience on top. A platform that is both generic at its core and flexible enough to accommodate the ever-changing landscape of data solutions and requirements. A platform with a long-term return on investment by allowing you to expand capabilities incrementally, avoiding costly, large-scale migrations. Composability enables you to continually adapt your platform capabilities by adding new technologies under the umbrella of one stable core platform layer. Two key ingredients of composability Building blocks: These are the individual components that make up your platform. Interoperability: All building blocks must work together seamlessly to create a cohesive system. An ecosystem of building blocks When building composable data platforms, the key lies in sourcing the right building blocks. But where do we get these? Traditional monolithic data platforms aim to solve all problems in one package, but this stifles the flexibility that composability demands. Instead, vendors should focus on decomposing these platforms into specialized, cost-effective components that excel at addressing specific challenges. By offering targeted solutions as building blocks, they empower organizations to assemble a data platform tailored to their unique needs. In addition to vendor solutions, open-source data technologies also offer a wealth of building blocks. It should be possible to combine both vendor-specific and open-source tools into a data platform tailored to your needs. This approach enhances agility, fosters innovation, and allows for continuous evolution by integrating the latest and most relevant technologies. Standardization as glue between building blocks To create a truly composable ecosystem, the building blocks must be able to work together, i.e. interoperability. This is where standards come into play, enabling seamless integration between data platform building blocks. Standardization ensures that different tools can operate in harmony, offering a flexible, interoperable platform. Imagine a standard for data access management that allows seamless integration across various components. It would enable an access management building block to list data products and grant access uniformly. Simultaneously, it would allow data storage and serving building blocks to integrate their data and permission models, ensuring that any access management solution can be effortlessly composed with them. This creates a flexible ecosystem where data access is consistently managed across different systems. The discovery of data products in a catalog or marketplace can be greatly enhanced by adopting a standard specification for data products. With this standard, each data product can be made discoverable in a generic way. When data catalogs or marketplaces adopt this standard, it provides the flexibility to choose and integrate any catalog or marketplace building block into your platform, fostering a more adaptable and interoperable data ecosystem. A data contract standard allows data products to specify their quality checks, SLOs, and SLAs in a generic format, enabling smooth integration of data quality tools with any data product. It enables you to combine the best solutions for ensuring data reliability across different platforms. Widely accepted standards are key to ensuring interoperability through agreed-upon APIs, SPIs, contracts, and plugin mechanisms. In essence, standards act as the glue that binds a composable data ecosystem. A strong belief in evolutionary architectures At ACA Group, we firmly believe in evolutionary architectures and platform engineering, principles that seamlessly extend to data mesh platforms. It's not about locking yourself into a rigid structure but creating an ecosystem that can evolve, staying at the forefront of innovation. That’s where composability comes in. Do you want a data platform that not only meets your current needs but also paves the way for the challenges and opportunities of tomorrow? Let’s engineer it together Ready to learn more about composability in data mesh solutions? {% module_block module "widget_f1f5c870-47cf-4a61-9810-b273e8d58226" %}{% module_attribute "buttons" is_json="true" %}{% raw %}[{"appearance":{"link_color":"light","primary_color":"primary","secondary_color":"primary","tertiary_color":"light","tertiary_icon_accent_color":"dark","tertiary_text_color":"dark","variant":"primary"},"content":{"arrow":"right","icon":{"alt":null,"height":null,"loading":"disabled","size_type":null,"src":"","width":null},"tertiary_icon":{"alt":null,"height":null,"loading":"disabled","size_type":null,"src":"","width":null},"text":"Contact us now!"},"target":{"link":{"no_follow":false,"open_in_new_tab":false,"rel":"","sponsored":false,"url":{"content_id":230950468795,"href":"https://25145356.hs-sites-eu1.com/en/contact","href_with_scheme":null,"type":"CONTENT"},"user_generated_content":false}},"type":"normal"}]{% endraw %}{% end_module_attribute %}{% module_attribute "child_css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "definition_id" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "field_types" is_json="true" %}{% raw %}{"buttons":"group","styles":"group"}{% endraw %}{% end_module_attribute %}{% module_attribute "isJsModule" is_json="true" %}{% raw %}true{% endraw %}{% end_module_attribute %}{% module_attribute "label" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "module_id" is_json="true" %}{% raw %}201493994716{% endraw %}{% end_module_attribute %}{% module_attribute "path" is_json="true" %}{% raw %}"@projects/aca-group-project/aca-group-app/components/modules/ButtonGroup"{% endraw %}{% end_module_attribute %}{% module_attribute "schema_version" is_json="true" %}{% raw %}2{% endraw %}{% end_module_attribute %}{% module_attribute "smart_objects" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "smart_type" is_json="true" %}{% raw %}"NOT_SMART"{% endraw %}{% end_module_attribute %}{% module_attribute "tag" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "type" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "wrap_field_tag" is_json="true" %}{% raw %}"div"{% endraw %}{% end_module_attribute %}{% end_module_block %}

Read more
We learn & share

ACA Group Blog

Read more about our thoughts, views, and opinions on various topics, important announcements, useful insights, and advice from our experts.

Featured

8 MAY 2025
Reading time 5 min

In the ever-evolving landscape of data management, investing in platforms and navigating migrations between them is a recurring theme in many data strategies. How can we ensure that these investments remain relevant and can evolve over time, avoiding endless migration projects? The answer lies in embracing ‘Composability’ - a key principle for designing robust, future-proof data (mesh) platforms. Is there a silver bullet we can buy off-the-shelf? The data-solution market is flooded with data vendor tools positioning themselves as the platform for everything, as the all-in-one silver bullet. It's important to know that there is no silver bullet. While opting for a single off-the-shelf platform might seem like a quick and easy solution at first, it can lead to problems down the line. These monolithic off-the-shelf platforms often end up inflexible to support all use cases, not customizable enough, and eventually become outdated.This results in big complicated migration projects to the next silver bullet platform, and organizations ending up with multiple all-in-one platforms, causing disruptions in day-to-day operations and hindering overall progress. Flexibility is key to your data mesh platform architecture A complete data platform must address numerous aspects: data storage, query engines, security, data access, discovery, observability, governance, developer experience, automation, a marketplace, data quality, etc. Some vendors claim their all-in-one data solution can tackle all of these. However, typically such a platform excels in certain aspects, but falls short in others. For example, a platform might offer a high-end query engine, but lack depth in features of the data marketplace included in their solution. To future-proof your platform, it must incorporate the best tools for each aspect and evolve as new technologies emerge. Today's cutting-edge solutions can be outdated tomorrow, so flexibility and evolvability are essential for your data mesh platform architecture. Embrace composability: Engineer your future Rather than locking into one single tool, aim to build a platform with composability at its core. Picture a platform where different technologies and tools can be seamlessly integrated, replaced, or evolved, with an integrated and automated self-service experience on top. A platform that is both generic at its core and flexible enough to accommodate the ever-changing landscape of data solutions and requirements. A platform with a long-term return on investment by allowing you to expand capabilities incrementally, avoiding costly, large-scale migrations. Composability enables you to continually adapt your platform capabilities by adding new technologies under the umbrella of one stable core platform layer. Two key ingredients of composability Building blocks: These are the individual components that make up your platform. Interoperability: All building blocks must work together seamlessly to create a cohesive system. An ecosystem of building blocks When building composable data platforms, the key lies in sourcing the right building blocks. But where do we get these? Traditional monolithic data platforms aim to solve all problems in one package, but this stifles the flexibility that composability demands. Instead, vendors should focus on decomposing these platforms into specialized, cost-effective components that excel at addressing specific challenges. By offering targeted solutions as building blocks, they empower organizations to assemble a data platform tailored to their unique needs. In addition to vendor solutions, open-source data technologies also offer a wealth of building blocks. It should be possible to combine both vendor-specific and open-source tools into a data platform tailored to your needs. This approach enhances agility, fosters innovation, and allows for continuous evolution by integrating the latest and most relevant technologies. Standardization as glue between building blocks To create a truly composable ecosystem, the building blocks must be able to work together, i.e. interoperability. This is where standards come into play, enabling seamless integration between data platform building blocks. Standardization ensures that different tools can operate in harmony, offering a flexible, interoperable platform. Imagine a standard for data access management that allows seamless integration across various components. It would enable an access management building block to list data products and grant access uniformly. Simultaneously, it would allow data storage and serving building blocks to integrate their data and permission models, ensuring that any access management solution can be effortlessly composed with them. This creates a flexible ecosystem where data access is consistently managed across different systems. The discovery of data products in a catalog or marketplace can be greatly enhanced by adopting a standard specification for data products. With this standard, each data product can be made discoverable in a generic way. When data catalogs or marketplaces adopt this standard, it provides the flexibility to choose and integrate any catalog or marketplace building block into your platform, fostering a more adaptable and interoperable data ecosystem. A data contract standard allows data products to specify their quality checks, SLOs, and SLAs in a generic format, enabling smooth integration of data quality tools with any data product. It enables you to combine the best solutions for ensuring data reliability across different platforms. Widely accepted standards are key to ensuring interoperability through agreed-upon APIs, SPIs, contracts, and plugin mechanisms. In essence, standards act as the glue that binds a composable data ecosystem. A strong belief in evolutionary architectures At ACA Group, we firmly believe in evolutionary architectures and platform engineering, principles that seamlessly extend to data mesh platforms. It's not about locking yourself into a rigid structure but creating an ecosystem that can evolve, staying at the forefront of innovation. That’s where composability comes in. Do you want a data platform that not only meets your current needs but also paves the way for the challenges and opportunities of tomorrow? Let’s engineer it together Ready to learn more about composability in data mesh solutions? {% module_block module "widget_f1f5c870-47cf-4a61-9810-b273e8d58226" %}{% module_attribute "buttons" is_json="true" %}{% raw %}[{"appearance":{"link_color":"light","primary_color":"primary","secondary_color":"primary","tertiary_color":"light","tertiary_icon_accent_color":"dark","tertiary_text_color":"dark","variant":"primary"},"content":{"arrow":"right","icon":{"alt":null,"height":null,"loading":"disabled","size_type":null,"src":"","width":null},"tertiary_icon":{"alt":null,"height":null,"loading":"disabled","size_type":null,"src":"","width":null},"text":"Contact us now!"},"target":{"link":{"no_follow":false,"open_in_new_tab":false,"rel":"","sponsored":false,"url":{"content_id":230950468795,"href":"https://25145356.hs-sites-eu1.com/en/contact","href_with_scheme":null,"type":"CONTENT"},"user_generated_content":false}},"type":"normal"}]{% endraw %}{% end_module_attribute %}{% module_attribute "child_css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "definition_id" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "field_types" is_json="true" %}{% raw %}{"buttons":"group","styles":"group"}{% endraw %}{% end_module_attribute %}{% module_attribute "isJsModule" is_json="true" %}{% raw %}true{% endraw %}{% end_module_attribute %}{% module_attribute "label" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "module_id" is_json="true" %}{% raw %}201493994716{% endraw %}{% end_module_attribute %}{% module_attribute "path" is_json="true" %}{% raw %}"@projects/aca-group-project/aca-group-app/components/modules/ButtonGroup"{% endraw %}{% end_module_attribute %}{% module_attribute "schema_version" is_json="true" %}{% raw %}2{% endraw %}{% end_module_attribute %}{% module_attribute "smart_objects" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "smart_type" is_json="true" %}{% raw %}"NOT_SMART"{% endraw %}{% end_module_attribute %}{% module_attribute "tag" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "type" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "wrap_field_tag" is_json="true" %}{% raw %}"div"{% endraw %}{% end_module_attribute %}{% end_module_block %}

Read more

All blog posts

Lets' talk!

We'd love to talk to you!

Contact us and we'll get you connected with the expert you deserve!

Lets' talk!

We'd love to talk to you!

Contact us and we'll get you connected with the expert you deserve!

Lets' talk!

We'd love to talk to you!

Contact us and we'll get you connected with the expert you deserve!

Lets' talk!

We'd love to talk to you!

Contact us and we'll get you connected with the expert you deserve!

office aca group colleagues
office aca group colleagues
Reading time 6 min
6 MAY 2025

Mobile development today vastly outpaces that of a decade ago in complexity and functionality. What once began as simple projects with a few features have now evolved into sophisticated systems incorporating everything from biometric authentication and AI to advanced camera integrations. This growth necessitates an architectural strategy that effectively manages complexity while maintaining high-quality codebases. In this article, we'll explore a robust architectural solution to this challenge: a modular or composable architecture in mobile development, inspired by the microservice architecture prevalent in backend development. What is a Modular Architecture? Similar to microservices, we decompose a large application into small focused mobile libraries, each addressing a specific domain or functionality. This modular architecture allows for constructing multiple applications using these reusable components, ensuring that each module remains loosely coupled. This maximizes flexibility, testability, and adaptability for each component. Let’s delve deeper into the benefits of a modular architecture in mobile development. Why Use a Modular Architecture in Mobile Development? Enforce Separation of Concern with a Modular Architecture Adopting a modular architecture in mobile development establishes a clear separation of concerns. This extends beyond the underlying code to the project's organizational structure. Each module functions as a self-contained unit, representing a distinct responsibility domain, developed and maintained separately. This not only enhances project readability and manageability but also streamlines collaboration and debugging. Consequently, the modular architecture design philosophy creates a cohesive system where component boundaries are immediately apparent, even without delving into the codebase. Modular Architecture Promotes Code Reusability and Maintainability A modular architecture clarifies project structure and significantly promotes code reusability and maintainability. By compartmentalizing the app into modules, we create reusable components that can be integrated across different parts of the application or even in entirely new projects. This reuse of code minimizes redundant work, enabling developers to focus on innovation rather than reinventing the wheel for each new feature. Moreover, a modular architecture simplifies the maintenance and updating of apps. Modules operate independently, allowing enhancements or fixes to be applied to one module without inadvertently disrupting others. This separation simplifies testing, enabling targeted validation of changes, which ensures a more stable and reliable application. As a result, the modular approach provides a codebase that is not only sturdier but also more flexible, allowing the app to adapt swiftly to new requirements or technological advancements. Modular Architecture Enhances Testability One of the greatest advantages of adopting a modular architecture in large mobile development projects is improved testability. In large monolithic mobile projects, build times can be significant, often resulting in inefficient workflows. For instance, imagine you’re working on a large Xamarin application without hot reload capability. Any UI misbehavior would require building the entire application and going through the entire flow. And if this flow is dependent on web calls maintained by a client team, you know you are facing an incredibly time-consuming and inefficient process. Advantages of Modular Architecture in Mobile Testing Using a modular architecture for your mobile development projects provides a series of important advantages in terms of testing: Isolated Testing With a modular architecture, you can mock all data dependencies of a module and test it as a standalone app. This isolation allows focused testing on specific functionalities without the overhead of running the entire application. Reduced Build Times Building the entire application for every change is unnecessary, significantly reducing end-to-end testing times. This efficiency leads to faster development cycles and quicker iteration, crucial for maintaining high productivity. Stable Testing Environment Decoupling modules minimizes the risk of one component affecting another, ensuring more reliable tests and easier bug tracing. Parallel Development and Testing Teams can develop and test different modules concurrently without waiting for a shared codebase to stabilize, accelerating the development process and enabling dynamic, flexible workflows. A modular architecture results in a more efficient, reliable, and scalable mobile development process, mitigating risks associated with monolithic architectures. By focusing on modularity, we enhance both the development and testing phases, leading to better overall software quality. Defining Modules in Mobile Development When developing application modules, collaboration with domain experts is crucial to fully grasp the various functions within an organization. This partnership enables a clear understanding of how to segment the application logically. Documentation of roles, coupled with domain-specific requirements, should be solved as an iterative process, allowing ongoing refinements that align with evolving organizational needs, ensuring each module is sharply defined and purpose-driven. The Base Module In our modular architecture, we employ a foundational base module. Think of this as the genetic code of the application — the core from which every other module inherits. This base module contains all shared, domain-agnostic features, including universal design elements and controls. Centralizing these common aspects establishes a consistent look and feel throughout the app. Each specialized module, built upon this base, inherently adopts these shared traits, streamlining development and ensuring that changes to fundamental aspects need only be made once, cascading throughout the entire application. Creating Our First Module Once the base module is in place, the next step is creating the first composable module. The structure mimics the classic layered architecture (Data, Domain, and Presentation projects), with an additional Test project to facilitate module testing. This Test project directly calls the module. It's a straightforward mobile application, typically consisting of a button to boot the component. Its role is to provide mock definitions for all the required dependencies of the module, allowing it to be deployed on a device or emulator for testing. Project Structure for Modular Architecture Data Project: Defines data entities and required data interfaces. Domain Project: Contains core business logic and domain models. Defines use cases and business rules operating on the data. Presentation Project: Manages UI components and presentation logic. Includes views and UI-related utilities. Test Project: Standalone project interacting directly with the module. Provides mock implementations for dependencies. Facilitates isolated testing of the module's functionality. Defining Data Dependencies in Modular Architecture For every composable library, defining data dependencies through contracts (e.g., interfaces) rather than hard-coding data sources is crucial. This ensures the library remains agnostic about data origins, whether from a local database or a web API. Dependency injection supplies the appropriate data implementations to the module. This approach allows consumers to decide the data source. By ensuring the composable library is only concerned with the type of data it requires, rather than the origin of the data simplifies the mocking of data contracts and the emulation of expected functional scenarios. This modular and testable approach significantly enhances codebase flexibility and maintainability. Consuming a Module or Component in Mobile Development Integrating a developed module into your application is straightforward due to clearly defined interfaces and dependencies: Import the Module: Include the module in your project. This often involves adding a dependency to your project’s build configuration. Inject Dependencies: Use dependency injection to provide necessary data sources and services required by the module. This keeps the component agnostic about the origins of its data, promoting flexibility and reusability. Initialize the Module: Set up any initial configurations or states needed for the module, such as initial data or specific settings. Use the Module’s API: Interact with the module through its public API, typically including methods to start flows that return data or integrate views with your application. Conclusion: the Future of Mobile Development Lies in Modular Architecture Embracing modular architecture in mobile development offers numerous benefits, enhancing both the development process and the final product. By decomposing applications into smaller, manageable components, we enforce separation of concerns, promote code reusability, and significantly improve maintainability. Modules enable isolated testing, reduce build times, and create a stable testing environment, ultimately leading to a more efficient and reliable development workflow.

Read more
data points gps
data points gps
Reading time 5 min
6 MAY 2025

As developers, we understand that GPS accuracy is the backbone of many mobile applications, from navigation to location-based services. The accuracy of your app's GPS functionality can make or break the user experience. In this article we’ll give you five practical ways to improve the GPS accuracy of your mobile application and ensure that your users never feel lost again. How poor GPS location accuracy kills mobile application success: real-life example Let’s start with a real-life example of how poor GPS accuracy can cause your mobile application to fail big time. Example Elise downloaded your new mobile application, Commuter . The app promises to enhance her commuting experience by delivering timely notifications about her bus stops and estimated arrival times. However, to her dismay, the performance of your app has been inconsistent. While on some days it offers accurate real-time updates, on others, she receives the notifications too late or too early. Understandably, Elise is frustrated and shares her dissatisfaction with your mobile application through a negative review. What goes wrong with the GPS accuracy? You, as the developer, are left perplexed. After all, you've integrated the platform's standard GPS algorithms, so why the inconsistency? The app calculates her average velocity based on the difference between GPS locations and the time between these updates. It's programmed to notify her of her bus stop once her GPS coordinates fall within a 100-meter radius of the station. While this sounds logical, the real-world results don’t align with expectations. What causes poor GPS location accuracy? The core issue stems from the inherent inaccuracies in GPS location data. While GPS locations include a margin of error, typically expressed in meters with a 68% confidence interval, this margin doesn't consider the influence of GPS signal reflections , also known as multipath errors. Multipath errors occur when GPS signals bounce off objects or surfaces before reaching the GPS receiver's antenna. Urban areas with tall buildings and dense infrastructure are particularly prone to GPS signal reflections. The reflection of signals off skyscrapers, vehicles, and other structures can create a complex signal environment, leading to unpredictable location inaccuracies. GPS signal reflections can divert the signal by kilometers, potentially causing the app to incorrectly indicate that Elise has either already reached her destination or is still kilometers away. Challenges of GPS signal reflections for mobile app developers GPS signal reflections pose several challenges to mobile app developers: Inaccurate positioning : GPS signal reflections can cause the GPS receiver to calculate an incorrect position. When the reflected signal arrives slightly later than the direct signal, the receiver may interpret it as coming from a different angle, leading to inaccurate position estimates. Inconsistent readings : GPS signal reflections are often inconsistent, making it difficult for developers to predict when and where they will occur. This inconsistency can result in varying levels of inaccuracy, posing a challenge when designing location-dependent services. How to improve GPS location accuracy? To counter the challenges of GPS signal reflections and enhance the user experience, a renewed strategy is necessary. Here are some innovative strategies to improve the GPS location accuracy of the Commuter mobile app in the example above: Filtering GPS locations : It's crucial to discard any location updates with inaccuracies exceeding 100 meters. This ensures that only the most reliable data is used for computations. Leveraging additional sensor data : Incorporate accelerometer data to enhance GPS accuracy. Use a velocity Verlet algorithm to predict locations based on the accelerometer data. Combine these predictions using a Kalman Filter, factoring in the uncertainty of each data source, stabilizing the location signal, and providing a more accurate prediction. Projection algorithms for bus routes: Since Elise commutes by bus, projection algorithms can be employed to align her location with the bus’s route. This can be achieved by approximating the route using data from different bus stops. Crowdsourced Wi-Fi SSIDs: Another innovative approach involves crowdsourcing Wi-Fi SSIDs (Service Set Identifiers). These SSIDs can act as location markers, providing additional data points to refine location accuracy. Bluetooth beacons for enhanced accuracy : Detecting crowdsourced Bluetooth beacons, can also serve as location updates. By tapping into these BLE beacons, you can further enhance the app's accuracy. By implementing these strategies, the Commuter app significantly enhances its accuracy, ensuring a consistent and reliable user experience. As a result, Elise and many users like her can enjoy timely and accurate updates, leading to positive reviews and overall customer satisfaction. 📱 Conclusion While the challenges faced by the Commuter app might seem unique, they reflect real-world hurdles many mobile app developers encounter. At ACA, we've successfully navigated these challenges using the strategies outlined above. While GPS is a valuable tool, understanding its limitations and augmenting its data with other technologies is key to ensuring reliable location-based services. Looking for an experienced mobile application development partner? {% module_block module "widget_137b2ccd-e194-4a50-a7ff-05def1e6085b" %}{% module_attribute "buttons" is_json="true" %}{% raw %}[{"appearance":{"link_color":"light","primary_color":"primary","secondary_color":"primary","tertiary_color":"light","tertiary_icon_accent_color":"dark","tertiary_text_color":"dark","variant":"primary"},"content":{"arrow":"right","icon":{"alt":null,"height":null,"loading":"disabled","size_type":null,"src":"","width":null},"tertiary_icon":{"alt":null,"height":null,"loading":"disabled","size_type":null,"src":"","width":null},"text":"Contact us"},"target":{"link":{"no_follow":false,"open_in_new_tab":false,"rel":"","sponsored":false,"url":{"content_id":230950468795,"href":"https://25145356.hs-sites-eu1.com/en/contact","href_with_scheme":null,"type":"CONTENT"},"user_generated_content":false}},"type":"normal"}]{% endraw %}{% end_module_attribute %}{% module_attribute "child_css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "definition_id" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "field_types" is_json="true" %}{% raw %}{"buttons":"group","styles":"group"}{% endraw %}{% end_module_attribute %}{% module_attribute "isJsModule" is_json="true" %}{% raw %}true{% endraw %}{% end_module_attribute %}{% module_attribute "label" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "module_id" is_json="true" %}{% raw %}201493994716{% endraw %}{% end_module_attribute %}{% module_attribute "path" is_json="true" %}{% raw %}"@projects/aca-group-project/aca-group-app/components/modules/ButtonGroup"{% endraw %}{% end_module_attribute %}{% module_attribute "schema_version" is_json="true" %}{% raw %}2{% endraw %}{% end_module_attribute %}{% module_attribute "smart_objects" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "smart_type" is_json="true" %}{% raw %}"NOT_SMART"{% endraw %}{% end_module_attribute %}{% module_attribute "tag" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "type" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "wrap_field_tag" is_json="true" %}{% raw %}"div"{% endraw %}{% end_module_attribute %}{% end_module_block %}

Read more
apss mobile fast
apss mobile fast
Reading time 4 min
6 MAY 2025

Mobile apps have become essential in our daily lives. Whether as consumers, citizens, students, patients, or employees, we rely on apps for almost everything. However, many apps are challenging to use for people who don’t fit the "standard" user profile, such as individuals with visual, auditory, or motor disabilities. As apps are now integral to daily life, these users face considerable barriers without sufficient alternatives. The European Accessibility Act is set to change this. In this article, you’ll learn all about it, including what it means for your apps. Why accessible apps matter The number of people who benefit from accessible apps is larger than you might think. About 25% of the population has some disability that makes using a standard app difficult (source: EU statistics on disabilities ). This includes individuals with visual impairments (such as blindness or low vision), hearing difficulties, color blindness, motor impairments, ADHD, epilepsy, and reading or speech challenges. Many others without disabilities also benefit from accessibility options, including older adults, or anyone needing larger text, dark mode, or improved readability outdoors. Investing in accessibility not only helps your app meet legal standards but also boosts customer satisfaction and employee productivity . European Accessibility Act makes accessibility a legal requirement Starting in June 2025, all websites and apps must comply with the European accessibility requirements under the European Accessibility Act . This legislation applies not only to public institutions but also to private companies. Key EU accessibility requirements for apps While the EU’s Web Content Accessibility Guidelines (WCAG) are primarily geared toward websites, there are specific requirements for apps as well. Mobile apps present unique challenges, such as touch-based controls and gestures. Here are some important guidelines: Visual accessibility for the visually impaired : People who are blind use screen readers to have content read aloud. This requires a logical structure from left to right and top to bottom. Common elements like headings and menus should be skippable. Images and videos need text descriptions and captions, and text resizing or zoom should work without compromising usability. Clear colors for color blindness : Ensure adequate contrast between foreground and background colors, and avoid relying on color alone to convey information (e.g. "tap the green button"). Alternatives for audio content : Provide visual alternatives for any audio features to support those who are hard of hearing. Any sounds or voice messages should have a corresponding visual representation. Ease of use for people with motor disabilities : Actions like swiping or shaking the device can be difficult for some users. Offer alternative navigation options, such as keyboard access, and test to ensure users can navigate the app without getting stuck. Accessible experience for people with reading disabilities : Clear instructions in input fields and error messages are vital. Keep the user experience calm and straightforward, which is beneficial for people with ADHD or epilepsy. Discover how De Lijn is committed to creating an inclusive travel experience, with a special focus on accessibility for people with disabilities. Watch the webinar to learn more about the development of their mobile app! How to make your app accessible Improving the accessibility of an existing app doesn’t have to be costly. Small, incremental adjustments can make a big difference. A brief review can help identify key areas for improvement. For new apps, designing with accessibility in mind from the start is ideal. This means logically structuring app elements so screen readers and other assistive technologies can navigate them smoothly. Testing is essential : while internal tests are helpful, involving people with disabilities provides realistic and valuable feedback. Mobile apps as a catalyst for greater inclusivity Accessible apps aren’t just necessary—they can be powerful tools for people with disabilities. With modern smartphones and AI technology, apps can offer an extra layer of support. For example, we developed an app for EMVI that helps blind users scan their surroundings and interpret visual information . For the guide dog organization ‘Licht en Liefde,’ we’re creating an app to assist blind individuals in navigating traffic . Curious about making your app more accessible? {% module_block module "widget_49fe050b-91bf-43ab-8b1a-56666f7ef684" %}{% module_attribute "buttons" is_json="true" %}{% raw %}[{"appearance":{"link_color":"light","primary_color":"primary","secondary_color":"primary","tertiary_color":"light","tertiary_icon_accent_color":"dark","tertiary_text_color":"dark","variant":"primary"},"content":{"arrow":"right","icon":{"alt":null,"height":null,"loading":"disabled","size_type":null,"src":"","width":null},"tertiary_icon":{"alt":null,"height":null,"loading":"disabled","size_type":null,"src":"","width":null},"text":"Let's talk"},"target":{"link":{"no_follow":false,"open_in_new_tab":false,"rel":"","sponsored":false,"url":{"content_id":230950468795,"href":"https://25145356.hs-sites-eu1.com/en/contact","href_with_scheme":null,"type":"CONTENT"},"user_generated_content":false}},"type":"normal"}]{% endraw %}{% end_module_attribute %}{% module_attribute "child_css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "definition_id" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "field_types" is_json="true" %}{% raw %}{"buttons":"group","styles":"group"}{% endraw %}{% end_module_attribute %}{% module_attribute "isJsModule" is_json="true" %}{% raw %}true{% endraw %}{% end_module_attribute %}{% module_attribute "label" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "module_id" is_json="true" %}{% raw %}201493994716{% endraw %}{% end_module_attribute %}{% module_attribute "path" is_json="true" %}{% raw %}"@projects/aca-group-project/aca-group-app/components/modules/ButtonGroup"{% endraw %}{% end_module_attribute %}{% module_attribute "schema_version" is_json="true" %}{% raw %}2{% endraw %}{% end_module_attribute %}{% module_attribute "smart_objects" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "smart_type" is_json="true" %}{% raw %}"NOT_SMART"{% endraw %}{% end_module_attribute %}{% module_attribute "tag" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "type" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "wrap_field_tag" is_json="true" %}{% raw %}"div"{% endraw %}{% end_module_attribute %}{% end_module_block %}

Read more
mobile devices laptop
mobile devices laptop
Reading time 4 min
6 MAY 2025

With Flutter it is possible to create applications that run smoothly on multiple platforms using a single code base. This means that in theory all mobile applications built with flutter could also function as web or desktop applications . This sounds too good to be true. So, we decided to put it to the test ourselves using our own application that is already in production, the Immovlan app . This real estate application allows users to list their properties for sale or rent. Overcoming challenges with Flutter Our journey began by integrating the necessary web folder into our mobile app. This step went smoothly, and we proceeded to test the app on the web to identify areas needing adjustment for web-specific requirements. First up was our integration with Firebase Crashlytics , which currently does not support web platforms. To address this, we added conditional checks to prevent initializing Crashlytics and sending events when building for the web—an easy fix to ensure smooth operation. Another solution could be to look for a good alternative for Firebase Crashlytics that does support web platforms. Next, we faced challenges with our user tracking setup for advertising. We use Didomi as our consent manager, but unfortunately, it's not compatible with Flutter Web . * Following a similar approach to Firebase Crashlytics, we implemented checks to disable it when running on the web. With these changes, we could run the application on the web. However, there were still a few things that we needed to adapt. * Remark : The existing Flutter SDK doesn't offer web support at the moment. However, Didomi offers a separate web SDK ( https://developers.didomi.io/cmp/web-sdk ). The integration of this web SDK wasn't part of our initial testing plan. The final obstacles to getting the Flutter mobile app running on the web We faced Cross-Origin Resource Sharing (CORS) issues because the API was initially designed for mobile use. Since CORS is managed differently on the web, we switched from the HTML renderer to CanvasKit. The CORS issues can be easily tackled by including the correct headers in the responses, yet for this project, the backend was not in our hands. Once we addressed the API challenges, we encountered another obstacle with our app's location-based map searches. Our existing map package, which relied on default device maps (Apple Maps for iOS and Google Maps for Android), was not supported. We fixed this small issue easily by adding it ourselves. Following these adjustments, our mobile app was successfully operational on the web. From mobile app to web platform: lessons learned and future considerations We successfully launched a new web platform within a short timeframe by making a few adjustments to the code base of a mobile app. This process would typically require much more time if implemented separately. Being able to create a web app by reusing the same business logic used in the mobile app can significantly reduce implementation costs. Moreover, it enables a uniform customer journey on all platforms. Also bug fixing can be done on all platforms at once, saving time and effort. However, this approach also presents some new challenges: While the app's functionality remained consistent across both mobile and web platforms, the user interface (UI) lacked optimization for the web, leading to a slightly disjointed user experience. It's imperative to prioritize further UI optimizations for the web to ensure seamless user interactions on each platform. By implementing platform-aware components, we can easily accommodate the differences between mobile and web interfaces without affecting the underlying business logic. These components would intelligently adapt based on the platform they're running on, thereby minimizing technical debt while ensuring a polished user experience across all devices. Adapting behind-the-scenes features like Firebase Crashlytics or Didomi to be compatible with the web is necessary. These challenges can be easily addressed by looking for alternatives and providing bindings for the native libraries. SEO (Search Engine Optimization) is not yet supported by Flutter. While Flutter emphasizes dynamic application experiences, including on the web, its focus on performance and consistency may not fully align with the needs of search engine indexing. This could present limitations in terms of web visibility and discoverability. However, it is possible to combine web technology and Flutter. Your landing page, which requires SEO, can be based on web technology, while the rest, which does not require SEO, can be Flutter-based. Should you consider Flutter for the web? The answer depends on the specific purpose of your web application. If you are developing a landing page, marketing website, or content site that requires optimization for search engine indexing, we recommend exploring alternative approaches rather than using Flutter Web. However, if your goal is to create a web application that is designed for authenticated user interactions, such as a banking app or energy consumption dashboard, and does not need to be indexed by search engines, Flutter can be an excellent choice. Flutter enables you to deliver a seamless user experience across different platforms, making it highly recommended for these types of applications.

Read more