With modern apps expected to run on PCs, phones, tablets, smart TVs and smartwatches - how can you write software that serves so many different devices?
Writing apps that work equally well on widescreen monitors as matchbox-sized watches is by no means simple.
Beyond the obvious challenge of making software that looks good on screens of vastly differing size, developers must also tackle unreliable mobile connectivity and the idiosyncratic way people use different devices.
European gambling portal Bet365 offers applications for iPhone, Android and Windows phones, in addition to a feature-rich website. What are the key lessons it has learned?
Only write native code where necessary
At their heart of Bet365's iPhone, Android and Windows apps sits the same code that powers its website.
But as time has gone on Bet365 has invested effort into supporting features native to each platform - such as notifications and embedded video playback.
Alan Reed, head of systems development for sports at Bet365, said the firm had focused on keeping the core code but differentiating each app where it matters.
What matters in Bet365's view are support for features like users notifications and embedded video. Both have increased user engagement for the firm, notifications by keeping users' updated about sporting events they've bet on and embedded video by allowing streaming video of events to be shown alongside betting information.
"What we've tried to do is, while retaining the brand of Bet365, to localize wherever we can the look and feel."
Cache essential information for offline use
Apps designed to be used on the move have to be able to cope with the internet connection dropping out.
Bet365's approach has been to write applications that attempt to cache the information that's important to the user. The idea is to allow users to continue using the app for a period without a connection, while providing fresh information as soon as the connection returns.
"One of the things you don't want a customer to have to do is to constantly reload the site because they feel that the data is old or not available any more," said Reed.
After reconnecting the app will check its state to see at what point the connection was lost and try to seamlessly resume the flow of data from that point.
"We've worked very hard on trying to maintain state wherever we can in the event of a disconnect and also how to do a graceful reconnect to the customer".
Reflect what your users actually do
People tend to use phones for different tasks than their desktop PCs.
For instance, when comparing documents you're probably more likely to use a PC with a large monitor but when flipping quickly through an RSS feed a touchscreen phone is a probable choice.
Similarly, the way we use an application will be influenced by the device we are using.
To that end, Bet365 tailors the look and feel of its app and site to not only suit different-sized screens, but also the actions a user is most likely to take - based on the device they are using.
"It's almost as if the behavioural activity of the customer is determined by the platform which they've accessed our site from," said Reed.
"If a customer wants to do something where they need immediate action they might take the phone out of their pocket but if they wanted to study something and research ahead of the event we find they're more than likely to use their desktop PC," he said, adding the average user on a mobile device will spend five minutes using the app while a desktop user will spend about 60 minutes.
Bet365 makes it easier for users of its mobile apps to take those immediate actions, tailoring the interface to make it simpler to rapidly place bets or cash out early.
"As technology is changing it's that customer journey that we're very focused on and how it differentiates our products."