Category Archives: Technology

4 Ways To Monetize Your App

4 Ways To Monetize Your App

When it comes to monetizing your apps, either your consumer pays or the advertiser. A consumer can increase your revenue by including paid downloads, in-app purchases, merchandising or subscriptions. Banners, cross-promotion, and offer walls are involved when an advertiser pays. Either way, it is always going to be a fine line that requires some experimentation. If it’s your first app, charges must be based mainly on how users engage with the app. For example, if people use your app just a few times, an ad-supported model probably doesn’t make sense. In that case, use an adaptive monetization strategy per user, depending on user “maturity”(by using analytical tools). Thinking critically about logical places and transition times for advertising will not cause the user to ignore the ad. But, whenever advertising makes sure you are not compromising on user experience. Opting for ingenious strategy instead of a monotonous one will divert more users and also convert freemium users to premium leading to a substantial increase in the revenue.

1. Create a database now –

database creation

Start-ups need to create a database of the target audience. Thus, they can reach out to them on launch or for a marketing campaign. Collect emails from your website by requesting site visitors to drop in their email id or asking them to subscribe for updates. A test invite for beta testers can also help to collect ids. Social media sites fan page can be other ways to reach out to your target users.

2. Watch your ratings and reviews –

customer ratings

While it’s important to pay attention to user ratings, don’t let a minor percentage of people who complain about your app influence it. If you change things based solely on that number you may actually lose your satisfied majority of customers.

3. App Analytics –

app analytics

After you launch the app in the market, it should be your utmost priority to check the customer engagement with the app. By analyzing the app, you can measure the value of acquired users and hence improve the engagement, retention, and monetization. An app is most likely to be a monetary success if it passes the 4-5-4 test which follows that if a user can realistically be expected to use it at least 4 times a day, for at least 5 minutes per use, and will keep the app for at least 4 months.

AVAILABLE TOOLS a. Flurry helps to understand the consumer’s interaction

b. Custora focuses on customer analytic tools

c. Mixpanel tracks individual users

d. Kontagent is the only one which covers the K-factor

4. Turning Consumers To Brand Ambassadors –

turning consumers to brand ambassadors

a. Reward influencers

A small number of fans are responsible for a substantial percentage of your traffic. These are your influencers and should be recognized and rewarded for every time they talk about your brand on any of the social networking sites.

b. Turn usage into a game

People love to compete, and they love to win. That competitive, gaming instinct can drive consumers to share your content and bring lots of new folks back to you.

c. Provide incentives

Every customer wants to feel special, and one way to make them feel special is to give them something exclusive. Bonus levels and reward points will act beneficial in this strategy.

d. Let them co-create value

Giving fans the ability to choose which version of a product should be offered, or to vote for the discounts or special offers they want to receive, helps ensure they’ll share it.

Conclusion – I am pretty sure you got the basic gist of how powerful an app can be. You can easily monetize your app and get rich :p. Moreover, by marketing and distributing your app, you can create relation and connection with a pool of customers. To know more about monetizing your app or want to hire top Marketing and Sales personnel contact RemotePanda.

Adding Transparent Section to Your View – Android

Adding Transparent Section to Your View – Android

In today’s lesson, we will create a view which has a transparent section(s). This view can be used in many ways, you can use it as an overlay to other views or in any other way. The idea for this demo is to create a view, which has transparent areas which are in different shapes. By combining many areas together you can give a beautiful look to a view. For e.g. you can see the following image.

Transparent Section Card

In the above image, you can see the background has a beautiful photo of coconut trees & above that we have a layer of custom view. BTW I captured that beautiful photo from my phone. In the custom view, I have used rectangles & circles. One rectangle & one circle set as transparent so it can get the above look it has. You can create your own shapes for transparent areas. You can see the full source code at Github repo TrasparentSectionCard.

Now let’s see the code for the same custom view.

Coding for create your own shapes for transparent areas

For this custom view I have extended View class & in its onDraw() method I am creating my own Bitmap & setting it on view’s canvas. The bitmap is created in bitmapDraw() method, which actually has all the important drawing part. To draw the view we need the parameters like width & height of the view, center & radius of the circle to be created, top margin, color etc. For this demo, I have calculated all these parameters in method defaultAttributes(). Which actually takes the parent’s width & height as a base & then calculate other parameters accordingly. For these parameters, I have also created custom attributes. You can use these attributes to pass the values in layout XML or can set dynamically as well. For creating custom attributes one has to create attrs.xml, following is mine.

creating custom attributes

You can use these attributes in layout XML like below.

layout xml

These attribute’s values are extracted in method init(). You can check that, but for this demo, I have used defaultAttributes() method. Now, let’s look at the important drawing part, which is bitmapDraw()method.

bitmapDraw() Method

It creates a Bitmap by provided width & height values (for this demo the values are calculated in defaultAttributes() method). It occupies a rectangular area with a specified width & height. Next, the important one is to set the erase color to the created bitmap, which actually fills the bitmap’s pixels with the specified color. Then the bitmap object is used for creating a Canvas. This canvas will be used for drawing actual shapes. First, we are filling it with color & then a paint object is created, which is actually used for drawing shapes. In shapes, first, we are drawing a circle on the canvas, which is set as transparent by using.

coding

Then we draw a transparent rectangle using the same paint object. Now, in the same paint object, we are setting color, stroke & Xfermode to draw solid circle shape. Once the bitmap canvas is drawn, we return the created Bitmap object. This bitmap object is used in onDraw() method & drawn on the main View’s canvas. I have also created an interface, which tells when the view’s layout is done. Its callback method notifies the user (Activity) when the view is actually drawn. You can use this for your own use cases, in my cases I needed width & height of the custom view, so the onLayout() method notifies me then I get width & height values.

onLayout() method

This tutorial gives you an idea to create a view with transparent sections. You can create any shape with any size for such views. You can tell your ideas & implementations in the comments. I hope you learned something useful from here. You can check the full source code at Github repo TrasparentSectionCard.

Happy Coding

Remote Work Trends In 2019

Remote Work Trends In 2019

Remote-Work-Trends-Banner-Image (1)

First things first, Let me begin with saying developing a survey report is a lot of effort. Phew! Trust me, the process is hectic – You have to find people to talk to you; then you have to look at what they said, analyze it, compose it & then put together all the information in an easy to read format. So, Kudos to all those who make reports. As for us, we were set on preparing a comprehensive survey report on remote work. The number of work from home jobs are constantly on rising, it’s no shocker that more and more millennial are inclined toward working as and working with remote workers because of the flexibility it provides. The report itself is a guide for entrepreneurs who are looking to jump into remote working space in 2019.

Here are a few major takeaways from the Report:
1) A shift in work culture
2) A shift in reasons to work with remote teams
3) Difficulties faced in working with remote teams
4) The current average cost of outsourcing

Let’s look into each one of those points in detail

1) A Shift In Work Culture –

It was observed that 86% of CXOs said that they had or are currently working with Remote Teams. This goes to say that there is a shift in work culture from the traditional culture wherein you come in at Nine work till Five and then leave. Now companies want more accountability and responsibility on the employees part. Thus, when somebody is working remotely, they get the freedom they are looking for but with it comes accountability to finish work within a given time.

2) A Shift In Reason To Work With Remote Teams –

Cost is the most obvious reason that companies go for outsourcing their work, but it was found that flexibility seems to be almost as popular a reason as cost. It is definitely a welcome change in the industry, and companies now want employees to work the hours they want, where they want and how they want. The best example of this would be world industry leaders like Facebook, Google & Microsoft who give their employees unheard freedom to do their work.

3) Difficulties Faced In Working With Remote Teams –

If you’ve never had an experience in working with remote teams, you’d wonder how difficult would it be to tell someone what to do. It wouldn’t be until you actually hire a remote worker, that you’d realize it is night, IF NOT DONE CORRECTLY.

How to outsource correctly is a blog for another time, until then let me tell you the difficulties faced majorly in a remote environment

a) Communication

Communication tops the chart in problems in working with a remote team. Your remote team might be based out of a different country, having a different culture & language. All of these pose a difficulty in communication. You might not sometimes understand what they mean and vice versa. Cultural references are misunderstood on both sides. Sometimes you and your team might be on a different page altogether; it isn’t until you see the result, that you release what they were understanding and what you were trying to explain.

b) Timezone Difference

This can be a boon or a bane. As a matter of fact, I’ve written a complete blog about timezone difference difficulties which you can read here.

There are a lot of more difficulties but these two make up for most of them, if you can overcome these you can win the outsourcing war.

4)Current Average Cost Of Outsourcing –

According to our survey, it was found that you can get the same job done in south-Asia for almost 50% of the cost in united states. Not to misconstrue that outsourcing doesn’t come with its own set of challenges, there’s more than a few. But if you learn how to deal with them, you can definitely will this outsourcing battle and save yourself a tonne of money to buy a boat maybe. HAHA!

Cropping Videos In Different Shapes In Android

Cropping Videos In Different Shapes In Android

Just before I start, I want you to check the following shapes.

Many times in your app you deal with images, you might be showing in a list or on a profile page or anywhere else. Normally the image is in rectangular shape only.
But what if you apply these shapes to a profile picture. That will definitely make your view look good. For examples check the following picture.

There are many libraries available to give shapes to your images. For example, the above pic is taken from the library CustomShapeImageView.
But what if I have to take it one step further & apply these shapes on a video. Wouldn’t that be more exciting?
To crop a video in any shape, it can be done in many ways for e.g. you can mask a VideoView with shape(.xml) resource. You can create shapes & apply over your VideoView.
But in my method I am not using any default VideoView, instead, I want to create a custom view that can be used to play a video on it.
So let’s start with my approach. As mentioned I will be creating a custom view, for that, I am extending SurfaceView class.

Here is the code.

As you can see I have extended the class SurfaceView class with all the required constructors. Now that we have created a surface, it’s time to draw on it, for that I am overriding dispatchDraw() method of SurfaceView.

In the above method, I have used a flag inOtherShape for checking whether we need a different shape or not. If set it uses clipPath() method which uses a Path object shapePath, which actually clips the canvas to give a specified shape.
Now let’s move to other methods cropCircle(), cropOval(), cropRect() & setOtherShape(). You can see the crop methods actually initializing the shapePath object & adding shapes like circle, oval & rectangle to the path. These methods take coordinates, radius or width & height parameters for positioning & size of the shape.
The last method setOtherShape() actually updates the flag & uses invalidate(), which actually means redraw the view & in result calls dispatchDraw() method. The dispatchDraw() again checks the flag & clips the canvas in set path.
Now we are done with our surface. It’s time to use it & play our video on it. Following is the layout file, which uses the VideoSurfaceView & some buttons for different shapes. You can find the full source code here.

Now, let’s create an activity VideoCropActivity.

In above activity, you can see I have inflated all the required views & initialized the MediaPlayer object player, which is created by video file placed under raw resource. You can see from VideoSurfaceView object I am getting a SurfaceHolder & adding a callback on that, which makes me implement the following three methods.

Whenever the surfaceCreated() callback method is called, I take that surfaceHolder object set on player object as display & then starts the player by start() method.
By doing just this much you will be able to play the video on your custom VideoSurfaceView & also you can use methods cropCircle(), cropOval(), cropRect() & setOtherShape() to give shapes to video.
Although you have done enough to crop a video in a specified shape. But there may be one issue in that, the videos full or cropped may not maintain the aspect ratio of your video. The video may look creepy, which of course you don’t want. To solve that issue other parameters are used.

fullLayoutWidth & fullLayoutHeight, these will be the dimensions of the video in full size, which will maintain the aspect ratio of the video. To maintain the aspect ratio on the device of any size, I first get the width & height of the device’s screen, which is screenWidth & screenHeight respectively. I am using the following method to calculate the width & height which will maintain the aspect ratio of the video.

In this method, I pass the MediaPlayer object, width & height for which you want to calculate the dimensions which will maintain the aspect ratio.
Initially, I used this method for full screen & calculates the fullLayoutWidth & fullLayoutHeight. Once calculated, I call setVideoLayout() method, by passing values FULL, fullLayoutWidth & fullLayoutHeight. The method resets the LayoutParams of VideoSurfaceView object along with the shape parameters.
It checks Shape enum, calls the crop shape method accordingly & setOtherShape() to draw view in a specified shape.
The following methods calls the setVideoLayout() method but with different shapes & parameters. Here I am using screenWidth & screenHeight for creating shapes, you can pass your own values there.

You can change any parameters like center coordinates & radius for circle shape or left, top positions for other shapes.

In my case, the results look like below images.

You can also update the VideoSurfaceView class to create more shapes. You can find the full source code at VideoInShape.
I hope you like this & you learned something useful from here.

Happy Coding

6 Essential Elements Of An App Marketing Strategy

6 Essential Elements Of An App Marketing Strategy

Contrary to popular belief, the core of the success of the applies in marketing rather than the design or development of the app. A very simple (but well made) app that is cheap to make, but well marketed, could provide a better return on investment than a more extensive (and expensive) app that has just been added to the Market.

App marketing requires a multi-faceted approach that is coordinated and coherent. You have to create a great app and consistently promote it through as many channels as possible for a shot at success in the app store ecosystem.

App marketing is an activity that starts even before the real marketing for the app could start. Right from the planning stage, one needs to get in the shoes of a marketer.

Here, we are going to cover the various opportunities for marketing that app developers can use and increase their ROI.

Pre-Development Stage

The pre-development stage is the base from where you start your journey. It is said that well begun is half done.

1. IDEA

Idea

The first step we need is an idea that inspires us. If you yourself don’t have a strong belief of the idea, how would you spread the enthusiasm to others?

Think Novel and Think differently. When one idea has already become successful, there is minimal chance that a clone too will repeat the success. Nobility, innovativeness, and solutions to an existing problem have the best chances to succeed. Hence you should make sure that your app either solves an existing problem or if the problem has already been solved then provide an intuitive or unique solution.

2. RIGHT ECOSYSTEM

Right Ecosystem

Each actor who is part of your app development process- developer, designer, and even the sales team need to be chosen with due diligence.

Don’t wait until the last minute to find a developer. Start early and take your time to find the right person or firm. Otherwise, it will cost you, both figuratively and literally.

3. DESIGN

Design

Create a wow app! Everything else will fall into place. The war of apps is fought on user experience. Make sure that you are well prepared. Develop a small but solid app and launch it. Gather feedback. Once you know what the audience liked and yearn for, plan for phase 2 accordingly. When you focus on excellent design, your product becomes your marketing.

Bonus Tips
Tip 1 – Don’t go with the crowd
Tip 2 – Your idea should solve an existing problem
Tip 3 – Software development requires an odd mix of attention to detail, creativity, and tenacity. It is mentally challenging, and an experienced developer is worth paying a Premium

Post-Development Phase

App Marketing is considered incomplete without online Marketing. Online marketing can help you reach to a worldwide audience. With up to 100% of your target audience spending most of the time surfing the internet, an online presence and availability become crucial.

4. WEBSITE

Website

The main reason to have a website is to provide an easy way for the users to find you, learn about you and research about you.
There is ample chance that people will hear your app name and then Google it. Here they need to land on a page that makes them feel comfortable and create confidence to download and try the app.
Remember you don’t need a giant website for your business, just a simple site that tells about you, your plans and how the app works.

GET STARTED
a. Get professional help
b. Keep it simple
c. Use it for market research
d. Get feedback

5. VIRAL VIDEOS

Viral Videos

A successful viral video can help brands engage with consumers on a much larger scale than a TV ad and is much cheaper to produce. Once the video is shared among hundreds and thousands of people, it becomes “viral.”
Viral videos are a great way of getting away from the interruption of pushing messages at people and instead using entertainment and an emotional connection to encourage consumers to pull your message to them.

CHECKPOINTS
a. The video must be entertaining for the viewers
b. Get apt metatag descriptions to go with the video
c. Encourage people to enjoy and share your content
d. Analyze the metrics

6. BLOGGING

Blogging

Blogging about your app is an efficient and effective way to enhance your profile. The blog should usually describe the overall experience behind creating the app and the enhancements you wish to do. It’s a way to communicate your ideas to your customers and engage them in your business. The followers on your blog are the ready market to reach out.
SEO can be potentially increased by sharing the blog on various social media sites.

QUICK FACTS
a. Pinterest is the fastest growing social media network and diverts the maximum traffic
b. Facebook gets 83 percent of the target audience for most apps
c. LinkedIn and Quora also contribute to generating leads

Conclusion: App Marketing can be a tough hurdle to overcome. When dealing with app marketing, every detail counts. In order to succeed it is advised that one should focus on what users want from your app and develop an app which would provide a feeling of satisfaction to users. By following the points mentioned in the post you can overcome this hurdle. If you are interested in app marketing and really eager to build a product which could be the game changer, try hiring top curated resources from RemotePanda. To know more contact us HERE.

RemotePanda at Techday

While RemotePanda had a gala-time at TechDay here are the 10 really great businesses the Panda could spot on

1) JADE INSIGHTS

Jade Insights strives to facilitate the revolutionary growth of the US Cannabis business and to spread that growth and wealth to those who historically have not had access to it. The aim is to create groundbreaking data tools for the cannabis industry that will allow business owners to run their business smooth and successfully.
Jade Insights provides a comprehensive view of all major departments of a cannabis company. With easy-to-use dashboards, users can understand their Key Performance Indicators (KPIs), then compare their operations to industry benchmarks. Users are also able to set up regularly scheduled alerts, emails, and reports to manage by exception.

2) HOTELS BY DAY

HotelsByDay is a startup based in New York City and made up of a team of hospitality industry veterans, technology experts and entrepreneurs who decided that there should be a better way for hotels to leverage their unused inventory during the day and for guests to be granted flexibility of check-in & check-out of a hotel room outside the conventional hours. It is observed that travelers need more dynamic options when they shop for hotel rooms. Hotelsbyday provides intra-day hotel spaces: offering travelers flexibility, comfort, and a space of their own.

3) MAZ

MAZ products empower leaders in media industries to become pioneers in OTT and mobile technology. MAZ aims to provide tools that aid in building and maintaining apps across all platforms without any technical expertise. By using these tools and services, one can eliminate additional hiring of editorial, marketing, and design teams.MAZ was named one of Entrepreneur’s “Best Entrepreneurial Companies in America” as well as one of Inc.’s “30 Under 30 World’s Coolest Entrepreneurs”.

 

4) BESTEST

 

Bestest brings “polling to the people” through a dedicated mobile app that gives everyone the power to collect usable insights, answers and feedback on the issues of the day through real-time opinion research. Bestest assists users in making better decisions. Using the dedicated application users can ask friends, teammates, classmates, co-workers or constituents to weigh in on picture and text polls that they create.

5) INVENTAPRINT 

Inventaprint’s goal is simple: help ideas come to life. Inventaprint is working diligently to connect inventors and businesses with vetted local or large manufacturers to simplify the creative process and achieve lower manufacturing costs. Inventaprint believes that the process of creating products should be smooth and accessible for everyone, Inventaprint cuts out the hassle of vetting manufacturers. To ensure that the businesses get top of the line manufacturers, Inventaprints carry out multiple assessments and screening processes. This approach aids in making smarter decisions.

 

6) FIXIONAL

Fixional began as a publisher trying to organize the world of online fiction onto one site. In the process, they came to an understanding that they could best serve the world of writing by offering software to other authors, editors, agents, and publishers. Fixional provides state of the art software that reviews writing and offers advanced manuscript editing. The software helps authors edit and think about their work; it allows editors to find the manuscripts that best match their publication. Additionally, it acts as a recruitment platform for agents to find authors to represent. Fixional helps review and explore thousands of manuscripts within moments, providing new insights and possibilities which assists in maintaining high standards.

7) VACAYO

Vacayo leverages technology to help people obtain financial freedom through real estate. Vacayo is a platform which allows individuals to rent their home for a year or more. Vacayo provides high monthly rent and management of cleaning, maintenance, and insurance. Vacayo aims at revolutionizing vacation rental management by offering homeowners high profits, total coverage, and better options.

8) SWOOGO 

Swoogo created an event management software that helps a planner execute an event with minimum hassle. Swoogo believes that event planners are always juggling multiple tasks, in order to provide them the element of relaxation the tool was developed. Swoogo combines heavy-weight event creation, management, and marketing features with easy-to-use, easy-to-understand reporting. To conclude it is safe to say that Swoogo is the best choice that anyone can have when concerning event management.

9) SPECTRONN 

Spectronn is an innovative and creative company focused on providing WiFi for transportation. The company is driven to provide transformatively, AI-driven, cloud managed cognitive radio networking and mobile edge computing technologies.Spectronn’s SiFi — an AI-driven cognitive wireless technology that provides resilient and high-speed WiFi in buses, cars, trains, trucks and other forms of transportation by dynamically connecting to multiple wireless networks (3G, 4G/LTE, satellite, etc.) simultaneously. Smart mobile edge computing supports video streaming, gaming, and other applications even if no mobile Internet.

10) AIRPORT SHERPA 

Airport Sherpa was founded by two frequent travelers ready to transform the airport experience. Airport Sherpa enables travelers to discover new and existing retail and dining options across all airports. Airport Sherpa is focused on delivering an improved traveling experience. Airport Sherpa allows travelers to grab orders as they walk through the airport. Travelers can check real-time updates for the orders and flight status.

Conclusion:

The time spent by RemotePanda at TechDay was phenomenal. RemotePanda experienced a truly blissful day full of opportunities to gain and absorb knowledge and information. The whole environment was encompassed with the entrepreneurial excellence. To sum it up in a few words it was just a truly amazing experience.

Event Gallery

5 Best Strategies to Reduce your AWS billing & Monthly Save Up to 1000$+

5 Best Strategies to Reduce your AWS billing & Monthly Save Up to 1000$+

 

Save 1000$+ monthly on your AWS Bill with these Simple Hacks

           Recently I did a short video on how to bring your AWS billing down by more than 80%, which went quite viral on the internet achieving thousands of impressions within a day. It made me realize that there are many founders/CXOs who face this issue of the high bill on AWS or any similar cloud platform. This post is a further extension on the points I mentioned in the video and provides additional ways on how you can save money on AWS.

 

01. Selecting the appropriate size for the AWS server –

 

It is crucial for every organization to choose the correct size of the server. At the initial stage of your startup, it is advised to start with a small server. Apart from that setting up auto-scaling really helps. Auto-scaling option continuously scales the servers dynamically based on the traffic. This means that your server will scale up and down automatically based on the traffic on your website, so you don’t need to pay for a big dedicated server. So definitely it helps to reduce your AWS billing.

02. Using S3 + CloudFront instead of EC2 –

 

Many people use EC2 servers for hosting their website. If you use static or dynamic website go for the S3 + CloudFront option instead of EC2 as it is more scalable and more secure as well as it costs less. Instead of paying for the dedicated EC2 server you can go for the cheaper S3 + CloudFront option so it can save your AWS cost.

03. Terminate development and QA environment when not required –

A simple trick to reduce the cost is to turn-off the development and QA environment on weekends and holidays when no one is using them. You can easily setup Lambda function which triggers the turning on and off of the servers. Just by applying this you can save up to 50% of the cost whenever you are not using it. We also apply this facility to many of our clients. When our working hours are done, and on weekends when no one is using the service, the servers shut down automatically, so it leads to AWS cost optimization.

 

 

04. Use AWS Reserved Instances –

Another great thing about AWS is that it offers the ability to reserve instances. Suppose you scored a great project whose duration is going to be around one year and you know what all instances you will need from the AWS. in this case, you can reserve the required instances with AWS. All you need to do is tell Amazon that you will require these instances for one year and Amazon brings down the cost for those instances, so it leads to control on AWS cost. 

05. Using the complete AWS features optimally –

Have you heard of SSL certificate? An SSL Certificate is essentially a digital certificate that authenticates the identity of a website and encrypts information sent to the server using SSL technology so it gives assistance in AWS cost optimization and helps to reduce AWS billing. Many of our clients buy SSL certificate from GoDaddy or any other providers, they have to pay a considerable amount for it, but AWS on the other side provides SSL certificate for free if you set it up correctly. So with AWS, you don’t have to worry about buying an SSL certificate, moreover at the time of renewal and again setting it up AWS takes care of it all.

Conclusion

I am sure that by applying these best practices you can also save a few extra bucks just like we did. Also, feel free to DM me if you want to discuss or want me to look into your AWS instance, I’d be more than happy to help. I can be reached on pravin@remotepanda.com

What really went wrong with Appster?

What really went wrong with Appster?

Appster
Image Source: Mobileappdaily.com

When a colleague shared an article today that Appster filed for liquidation, I was a bit taken aback. My relationship with Josiah Humphrey goes around 5 years back…when he was someone looking for devs on Upwork (then Elance) for one of his clients and I was among the ones looking for work for myself. Things have grown from there. Both I and Josiah do not visit Upwork anymore. While I dedicated my time to build an Upwork alternative — RemotePanda, Josiah has become an industry stalwart with Appster consistently being ranked among the top agencies.

Our connection has been limited to Skype and Linkedin now but yes I do often check his profile for inspiration and getting to know whats going on in the app world.

Today as I saw Appster news, I thought of reasons what could have gone wrong for the guys. Here is my take.

1) App development demand is drying up

App development saw its peak between 2010–2015, thats when the industry was new and you could ask for whatever price you wanted and the client would pay for it, but now in 2018/19 that is not the case. The market has become saturated with App Development companies, so any company whose revenue is completely dependent on developing apps is in a tricky situation right now.

“Paul Vartelas of BK Taylor & Co has been appointed administrator. He has said the main reason for the collapse was a “sharp drop” in available work over the last six months”

https://www.channelnews.com.au/appster-goes-into-liquidation/

The demand is down because there is no more incentive for new players to come in and build apps. Almost all of the top 30 apps on any Appstore have remained the same year on year, with the only exception of Flappybird. Nobody is beating Skype or Google duo in the video chatting vertical anymore, they might be getting a fight from WhatsApp but WhatsApp is a leader in another vertical. So its like they are all just fighting amongst themselves to be leaders in most categories. Thus, the economics does not work for people to build new apps because most verticals are now saturated and the chances of coming in the top 100 apps are like slim to none.
http://fortune.com/2016/09/16/smartphone-users-apps/

2) Deal size does not justify the lifetime value of the client

Contrary to typical IT sales, size of an app deal is usually 3–4 months long (50–100K in revenue). This means that the sales engine should be running fast enough to keep bringing new demand. If demand diminishes you can still get a new sale every 3 months…isn’t it?

Well, thats where having a bigger size could be a problem.

With an average deal size of around a 100K means, they need around 100 new clients every year. Now, this is possible when the tide is high but not in the markets like I mention in point a – where the market has lost the incentive to build new.

“Surprisingly we were in one of the best cash positions the business had been in, just four months ago, but things spiraled out of control very quickly. We missed forecasted sales targets by about 50 percent four months in a row … with expenses of roughly $1 million per month, our cash reserves were depleted very rapidly despite attempting cost reductions,” they said further.

https://www.mobileappdaily.com/appster-collapses-into-liquidation

In addition to this, having ambitions to be the premier company requires a lot to be spent on overheads and on experiments that may not convert to profits instantly.

This brings me to my next and most important lesson

3) Do not mix products and services growth plans

In 2014, Forbes quoted Appster to “expect to hit $100 Million in annual revenue within the next four years. To fuel that revenue growth, the company is currently opening offices in Canada, the U.K., and Germany and ultimately aims to scale to forty-two countries”

https://www.forbes.com/sites/jlim/2014/08/06/aussie-start-up-appster-adds-former-founding-paypal-cfo-and-virgin-australia-executive-to-its-board/#34a6938b54f3

They even had people like Former Founding PayPal CFO And Virgin Australia Executive as part of their board.

Sounds like the recipe to success. No its a recipe to disaster because the ingredients that you are buying are for building a product growth strategy and not service growth strategy.

A services business is linear in scale and so are its costs and profits. No amount of funding or add-ons can change the linear growth model to a nonlinear model of a product.

A quick glance on Appster website shows their commitments towards building IP, trademarks and so on but were they really required?

Appster services

In the end, I would add that though I pointed out things that could have been done right and what not, I the guys would have seen that already and must have taken decisions that were best at the time. I have actually adored Josiah and Mark for their zeal and contagious enthusiasm in building Appster to what it is today. It started at $3000 and still remains a multi-million dollar company.

A salute to the guys who dreamt and built it on…

A Quick Overview of HTTP Methods

A Quick Overview of HTTP Methods

HTTP is the language of the web. If you’ve ever been involved in developing or communicating with a web server, chances are that you’ve been using HTTP.

HTTP is a server-client protocol. All communication is initiated by the client, in the form of an HTTP request. On receiving this request, the server sends an HTTP response back to the client.

Here is an excellent overview of HTTP that covers the structure of communication over HTTP— https://www.jmarshall.com/easy/http/

A simple HTTP request to fetch posts from a server could look like this –

GET /posts HTTP/1.1

 

The first part, GET is the HTTP method. The second part/posts are the URI. The third partHTTP/1.1 is the HTTP version.

 

The HTTP method indicates the action we wish to perform, and the URI indicates the resource that we want to perform the operation on.

The HTTP specification defines these methods – GET, POST, PUT, HEAD, DELETE, OPTIONS and a few more.

 

GET

GET requests are used to retrieve information about the resource specified by the URI. GET is a safe method — that means a GET request should not result in any changes in the server state. It should not cause creation, updating or deletion of any application data. It should be used only for ‘read-only’ actions.

 

POST

POST requests are used to submit data to the server. POST requests may contain a data payload to be submitted to the server. The action performed by the server is determined by the server code. POST requests may be used to create a new resource or to submit data for processing.

 

PUT

PUT requests are used to save an object at the location specified in the request URI. PUT requests should be idempotent. That means that if two or more identical PUT requests are received and executed, the result should be equivalent to executing such a request only once. 

To draw an analogy, a=5 is an idempotent operation since running it once or multiple times results in the value of a being 5. In contrast, a=a+1 is not an idempotent operation, since the value of changes based on how many times we execute the operation.

 

DELETE

DELETE requests are used to delete the object at the location specified in the request URI. DELETE requests are also idempotent.

 

HEAD

HEAD requests are used to retrieve just the headers that would be present in the response of an equivalent GET call. It could be used simply to check whether or not a resource exists or to retrieve the Content-Length Header before deciding whether or not to download a large file. You could also check the Last-Modified header to see if the file was modified since you last retrieved it. The HEAD method is safe. All safe methods are also idempotent since doing nothing once has the same effect as doing nothing multiple times.


Conclusion:

Not all POST methods need to be unsafe. We had a case where we needed to send a large number of email addresses to the server and respond with a yes or no for each of those addresses. It seemed like a GET request at first, but we discovered that some browsers and proxies limit the length of a GET request. It also started feeling more like the URI pointed to a processing service and not to an object, and that it would be fine to POST a list for processing.

To know more about client-server protocol or want to hire a back-end Developer you can contact RemotePanda.

Rest and Soap web service with it’s best practice

Rest and Soap web service with it’s best practice

Why this blog?

This blog highlights REST Best Practices intended for the developers who are interested in creating RESTful web services which provide high reliability and consistency across multiple service suites. We all know there are various resources on best practices for building RESTful web services. However, it should also be understood that many of the available resources are conflicting. Also, it’s likely not doable to refer, read and comprehend several books on this subject with a motto of implementing services “tomorrow.” This blog will enable you to quickly understand and grasp RESTful concepts with major concern on best practices and conventions.

 

What is REST?

REST is an abbreviation of Representational State Transfer. REST represents the architectural style of the World Wide Web (WWW). REST is an approach to communication which makes simple HTTP calls for inter-machine communication. REST is often preferred over SOAP because REST does not use as much bandwidth as heavyweight SOAP does which makes it a better option for use over the Internet.

In REST, the calls will be message based and dependent on HTTP standards to describe these messages. REST can be understood as a simple request/response mechanism, where each request returns a response. The following fig. will give you a better idea:

Rest and Soap web services

RESTful API’s, more popularly termed as REST API’s are the web services written using REST architecture.

REST is resource based. When we talk about REST, it indicates things or resources as opposed to actions in SOAP. In RESTful services noun represents the resources, for example, a person resource, a user resource. We use an HTTP verb (POST, PUT, GET, DELETE, etc.) to indicate what operation the REST API has to perform. Resources are identified by the URIs. Having multiple URIs pointing to the same resource is possible. RESTful API’s generally accept/return data in JSON or XML format.

Let’s quickly form an example with this basic knowledge before moving further. Suppose Sagar is a resource, there is a service to fetch contact information using the HTTP verb GET which will return the data like name, address, phone number, email address in JSON or XML form

 

REST architectural style defines the following six constraints:

 

  1. Uniform Interface
  2. Stateless
  3. Cacheable
  4. Client-Server
  5. Layered System
  6. Code on Demand
Let’s have a small review of each:

 

1) Uniform Interface:

It defines the interface between clients and servers. Uniform Interface simplifies and decouples the architecture. It enables each part to develop or evolve independently. Uniform interface describes the following four guidelines or principles:

  • Resource-based
  • Self-descriptive messages
  • Resource modification using Representations
  • Hypermedia as the Engine of Application State (HATEOAS)

2) Stateless:

It is not required for the web server to remember the client’s state. The necessary state needed to handle the request is included in the request itself, whether as part of URI, query-string parameters, body or headers.

3) Cacheable:

Clients can cache responses. Therefore Responses must explicitly or implicitly define themselves as cacheable or not which prevent the clients from reusing stale, old or inappropriate data in response to further requests.

4) Client-Server:

The uniform interface is responsible for separating the clients from the servers. Servers and clients can be developed independently. It conveys that the clients are not concerned with data storage which is internal to each server, which increases the portability of the client code. Servers are not concerned with the UI or user state, which makes the servers more scalable and simpler.

5) Layered System:

A client is unable to tell if it is connected directly to the end server or to an intermediary server. Intermediary servers may improve system scalability by providing shared caches and enabling load-balancing. Security policies can also be enforced through layers.

6) Code on Demand:

It is possible for the servers to extend or customize the functionality of a client on a temporary basis by transferring logic to it that it can execute, for example, Java applets and client-side scripts like JavaScript.

HTTP Verbs/ Request Methods:

Clients specify their desired interaction method in the Request-Line part of an HTTP request message. Each HTTP method is bound to some specific, well-defined rules and meaning within the context of a REST API’s resource model.

The primary or most commonly used HTTP verbs or more properly called as methods are GET, PUT, POST and DELETE. These correspond to create, read, update, and delete operations respectively. OPTIONS and HEAD are the other verbs but are less frequently used.

i. GET:

The GET method is used to read or retrieve a representation of a resource. As GET method (along with HEAD) is used for READ-only purposes, hence they are considered safe as they do not change the data. GET (and HEAD) are regarded as idempotent, i.e., making multiple identical requests end up having the same result as a single request.

Examples:

GET http://www.myexample.com/users/orders

GET http://www.myexample.com/users/12345

GET http://www.myexample.com/users

ii. PUT:

We use the PUT method mostly for update functionalities. Use this method for PUT-ing or updating data to a known resource URI along with the request body which contains the newly-updated representation of the original resource that we intend to change.

PUT method can also be used to create a resource in cases where resource ID is provided by the client instead of the server. But we must generally use POST to create new resources where the client defined ID is included in the body representation.

PUT is not a safe method, although it is idempotent.

Examples:

PUT http://www.myexample.com/users/123

PUT http://www.myexample.com/users/orders/123

iii. POST:

The POST method is utilized to create new resources. This method is not safe nor idempotent.

Examples:

POST http://www.myexample/com/users

POST http://www.myexample.com/users/orders/123

iv. DELETE:

As the verb suggests, it is used to delete a resource identified by the URI.

Examples:

DELETE http://www.myexample.com/users/123

DELETE http://www.myexample.com/users/123/orders

Response Status Codes:

Forty standard codes have been defined by HTTP to convey the results of a client’s request. These codes can be divided into the following five categories:

CATEGORY DESCRIPTION
1xx  Informational Indicates transfer of protocol-level information.
2xx Success Indicates that the client’s request was accepted/processed successfully.
3xx Redirection Informs that the client needs to take some additional action to complete their request.
4xx Client Error This category of error status codes defines the client’s error.
5xx Server Error These error status codes indicate the server side errors.
All Items Description

Let’s have a short and precise look over the success and error status codes.


HTTP response success codes:

CODE NAME MEANING
200 OK Indicates a nonspecific success
201 Created Indicates that a new resource has been created
202 Accepted Indicates the start of an asynchronous action
204 No Content Indicates that the body was left blank
301 Moved Permanently Indicates that a new permanent URI has been assigned to the client’s requested resource.
303 See Other Sent by controllers to return results that it considers optional.
304 Not Modified Sent to preserve bandwidth (with conditional GET)
307 Temporary Redirect Indicates that a temporary URI has been assigned to the client’s requested resource.

 

HTTP response error codes:

CODE NAME MEANING
400 Bad Request Indicates a non-specific client error.
401 Unauthorized Indicates either client provided wrong/invalid credentials or missed to send them.
402 Forbidden Indicates denied access to a protected resource.
404 Not Found Sent when the client tried interacting with a URI which the REST API could not map to a resource.
405 Method Not Allowed Sent when the client tried to communicate via an unsupported HTTP method.
406 Not Acceptable Sent when the client tried to request data in an unsupportive type format.
409 Conflict Indicates that the client attempted to violate resource state.
412 Precondition Failed Informs the client that one of its pre-condition was not met.
415 Unsupported Media Type Sent when the client submitted data which is of unsupported media type format.
500 Internal Server Error Tells the client that API is having problems of its own.

Best Practices/Tips:

1) Use Noun instead of verbs:

Nouns are good and verbs are bad when it comes to rest standards. You can use the following easily understandable structure for every resource:

RESOURCE GET

(READ)

POST

(CREATE)

PUT

(UPDATE)

DELETE
/customers Returns a list of customers Create a new customer Bulk update customers Delete all customers
/customers/1234 Return a specific customer (405 – Method not allowed) Updates a specific customer Delete a specific customer

Bad practice is to use verbs like:

  • getAllCustomers

  • createNewCustomer

  • deleteCustomers

Nouns are good and verbs are bad when it comes to rest standards. You can use the following easily understandable structure for every resource:

 

2) GET method and query parameters should never be used to update or alter the state:

Never use GET to alter or state changes. Use GET, POST or DELETEto alter the state.

 

3) Use plural forms of the noun:

Keep the resource naming simple by following plural forms of nouns. Even though you might think that it is grammatically incorrect, but the best standard for REST practices is to use plurals.

  • customers instead of /customer

  • customers/12345 instead of /customer/12345

 

4) Use sub-resources for relations:

If you have some resource which is related to another resource then it is implied to use sub-resources:

  • GET /customers/1/products: Returns a list of products purchased by customer 1


5) Use HTTP headers for serialization formats:

The client side and server side both should know and use the format that is being used for communication. This format has to be specified in the HTTP-header.

  • Accept: It defines a list of acceptable response formats.

  • Content-Type: It defines the request format.


6) Error handling and using status codes:

It is complicated to work under situations where proper error handling is ignored. Just returning of HTTP 500 with a stack trace log is not enough. We need to make proper usage of the HTTP status codes that have been covered in the earlier part.


7) Include scope for paging, sorting, filtering and field selection:


i. Pagination:

Use limit and offset for pagination. It is not only flexible for the user but also standard in the leading databases.

GET /customers?offset=5&limit=20


ii. Sorting:

Ascending and descending sorting should be provided. Also, allow sorting over multiple fields.

GET /customers?sort=-age,+lastName


iii. Filtering:

We can make use of unique query parameter for all fields or maybe use a query language for filtering purpose.

GET /customers?age>=24 Returns a list of customers whose age is equal to greater than 24.


iv. Field Selection:

It is a widespread practice that mobile clients wish to display only a few attributes. They don’t want to display or use all the attributes of a resource. Thus an API should have the ability that allows the mobile clients to choose the returned fields. This helps to save the cellular battery, reduce network traffic and speeds up the API usage.

GET /customers?fields=name,age,contact number


8) Documentation:

One last suggestion is to maintain an update API document. This document should be shared and accessible to all concerned people. Most client-side developers should check the API document before starting the integration of web services. The doc should cover all necessary information like request URL, response body format, headers, etc. For every API try to cover with an example of request body and response bodies with all the alternative responses including error and success.

 

Conclusion:

I hope the above content is easily understandable and lets you get started with developing REST API with some excellent level standards and consistency in your coding style. Just follow these REST best practices, and you’re all set.

Want to know more about REST practices? Feel free to contact RemotePanda.