The biggest buzzwords used by prime ministers, presidents or management these days has been “Innovation” and “digital disruption”. As a developer or manager do you understand what goes into a new digital customer-focused service like an API or data-driven portal? How well is your business or products doing in the age of innovation and digital disruption? Do you listen to what your customers want or need?
When to Pivot
There comes a time when businesses realize they need to pivot in order to stay viable.
- People don’t rent VHS movies they download movies from the Internet
- Printing photographs, who does that anymore?
- People learn from videos on YouTube, Khan Academy for free or pay for courses from, Pluralsight.com, Coursea.org, Udemy.com of Linda.com.
- Information is wanted 24/7 and a call to customer service if information cannot be sourced online.
Image source.
Chances are 90% of your customers are using mobile or tablet devices on any given day. If you are not interacting with your customers via personalized/mobile technology prepare to be overtaken as a business.
Pivoting may require you to admit you are behind the eight ball and take a risk and set up a new customer-focused web portal, API, app or services. Make sure you know what you need before the lure of services, buzzwords and “shiny object syndrome” from innovation blog posts and consultants take hold.
Advocates and blockers of change
Creating change in an organization that bean counts every dollar, exterminates all risk and ignore ideas is a hard sell. How do you get support from this with power and endless rolls of red tape?
Bad reasons for saying no to innovation:
- You can’t create a mobile app to help customers because the use of our logo won’t be approved.
- Don’t focus on customer-focused automation, analytics and innovation because internal manual processes need attention first.
- Possible changes in 2 years outside of our control will possibly impact anything we create.
- Third eyelids.
Management’s support of experimentation and change is key to innovation. HARVARD BUSINESS REVIEW have a great post on this: The Why, What, and How of Management Innovation.
Does your organization value innovation? This is possibly the best video that describes how the best businesses focus on innovation and take risks. Simon Sinek: How great leaders inspire action.
Here is a great post on How To Identify The Most Dangerous Person In Your Company who blocks innovation and change.
Also a few videos on getting staff on board and motivation and productivity.
Project Focus
- Focus on customer requirements and what you need to be doing and ignore the tech frameworks/language/features/services.
- Focus on customer requirements and what you need to be doing and ignore the tech frameworks/language/features/services.
- Focus on customer requirements and what you need to be doing and ignore the tech frameworks/language/features/services.
I said that three times (because it is important).
Before you begin coding, learn from those who have failed
Here are some of the best tips I have collected from start-ups who have failed.
- We didn’t spend enough time talking with customers and we’re rolling out features that I thought were great, but we didn’t gather enough input from clients. We didn’t realize it until it was too late. It’s easy to get tricked into thinking your thing is cool. You have to pay attention to your customers and adapt to their needs.
- The cloud is great. Outsourcing is great. Unreliable services aren’t. The bottom line is that no one cares about your data more than you do – there is no replacement for a robust due diligence process and robust thought about avoiding reliance on any one vendor.
- Your heart doesn’t get satisfied with any levels of development. Ignore your heart. Listen to your brain.
- You can always iterate and extrapolate later. Wet your feet asap.
- As the product became more and more complex, the performance degraded. In my mind, speed is a feature for all web apps so this was unacceptable, especially since it was used to run live, public websites. We spent hundreds of hours trying to speed up the app with little success. This taught me that we needed to having benchmarking tools incorporated into the development cycle from the beginning due to the nature of our product.
- It’s not about good ideas or bad ideas: it’s about ideas that make people talk. Make some aspect of your product easy and fun to talk about, and make it unique.
- We really didn’t test the initial product enough. The team pulled the trigger on its initial launches without a significant beta period and without spending a lot of time running QA, scenario testing, task-based testing and the like. When v1.0 launched, glitches and bugs quickly began rearing their head (as they always do), making for delays and laggy user experiences aplenty — something we even mentioned in our early coverage.
- Not giving enough time to stress and load testing or leaving it until the last minute is something startups are known for — especially true of small teams — but it means things tend to get pretty tricky at scale, particularly if you start adding a user every four seconds.
- It’s possible to make a little money from a lot of people, or a lot of money from a few people. Making a little money from a few people doesn’t add up. If you’re not selling something, you better have a LOT of eyeballs. We didn’t.
- We received conflicting advice from lots of smart people about which is more important. We focused on engagement, which we improved by orders of magnitude. No one cared. Lesson learned: Growth is the only thing that matters if you are building a social network. Period. Engagement is great but you aren’t even going to get the meeting unless your top-line numbers reach a certain threshold (which is different for seed vs. series A vs. selling advertising).
- Our biggest self-realization was that we were not users of our own product. We didn’t obsess over it and we didn’t love it. We loved the idea of it. That hurt.
- Do not launch a startup if you do not have enough funding for multiple iterations. The chances of getting it right the first time are about the equivalent of winning the lotto.
- It may seem surprising that a seemingly successful product could fail, but it happens all the time. Although we arguably found product/market fit, we couldn’t quite crack the business side of things. Building any business is hard, but building a business with a single app offering and half of your runway is especially hard.
Buzzwords
The Innovation landscape is full of buzzwords, here are just a few you will need to know.
- API – Application Program Interface is a method that uses web address ( http://www.server.com/api/important/action/) to accept requests and deliver results. Learn more about API’s here http://www.programmableweb.com/category/all/apis
- AR – Augmented reality is where you use a screen on a mobile, tablet or PC to overlay 3D or geospatial information.
- Big Data – Is about taking a wider view of your business data to find insights and to predict and improve products and services.
- BYOD – Bring your own device.
- BYOC – Bring your own cloud.
- Caching – Using software to deliver data from memory rather than from slower database each time.
- Cloud – Someone else’s computer that you run software or services on.
- CouchDB – An Apache designed Key/Value NoSQL JSON store database that focuses on eventual replication.
- DaaS – Desktop as a service
- DbaaS – Database as a service (hardware and database software maintained by others but your data).
- DBMS – Database Management System – the GUI
- HPC – High-Performance Computing.
- IaaS – Cloud-based Servers and infrastructure (Google Cloud, Amazon AWS, Digital Ocean and Vultr and Rackspace).
- IDaaS – Third Party Authorisation management
- IOPS – Operations per Second –What limitations are on the interface or software in question.
- IoT – Internet of things are small devices that can display, sense or update information (internet-connected fridge or a button that orders more toilet paper.
- iPaaS– integration Platform as a Service (software to integrate multiple XaaS)
- JSON – A better CSV file (read more here)
- MaaS – Monitoring as a Service (e.g Keymetrics.io)
- CaaS – Communication as a service (e.g http://www.twillio.com)
- Micro-services – an existing service that is managed by another vendor (e.g Notifications, login management, email or storage), usually charged by usage.
- MongoDB – Another Key/Value NoSQL JSON Database that has upfront Replication
- NoSQL – A No SQL database that stores data in JSON documents instead of normalised related tables.
- PaaS – A larger stack of SaaS that you can customise from vendors Azure (Active Directory, Compute, Storage Blobs etc), AWS (SQS, RDS, Alasticache, Elastic File System, ), Google Cloud (Compute Engine, App Engine, Data-store ), Rackspace etc.
- Rate Limiting – Ability to track and limit a user’s request to an API.
- SaaS – A smaller software component that you can use or integrate (Google Apps, CiscoWebEx, GoTo
- Scalable – the ability to have a website or service handle thousands to millions of hits and have baked in a way to handle exponential growth.
- Meeting).
- Scale Up – Increase the CPU speed and thus workload
- Scale Out – Adding more servers and distributing the load instead of making servers faster.
- SQL – A traditional relational database query language.
- VR – Virtual Reality is where you totally immerse yourself in a 3D world with a head-mounted display.
- XaaS – Anything as a service.
External or Online Advice
A consultant once joked to our team that their main job was to “Con” and “Insult” you ( CONinSULTant ). Their main job is to promote what they know/sell and sow seeds of doubt about what you do. Having said that please take my advice with a grain of salt (I am just relaying what I know/prefer).
Consultants need to rapidly convert you to their way of thinking (and services), consultants gloss over what they don’t know and leave you down a happy part solution nirvana (often ignoring your legacy apps or processes, any roadblocks are relished as an opportunity for more money-making). This is great if you have endless buckets of money and want to rewrite things over and over.
Having consultants design as develop a solution is not all bad but that would make his developer-focused blog post boring.
Microsoft IIS, Apache, NGINX, Lighthttpd are all good web servers but each has a different memory footprint, performance, and features when delivering static v dynamic content and each platform has maximum concurrent users that they can handle a second for a given server configuration.
You don’t need expensive solutions, read this blog post on “How I built an app with 500,000 users in 5 days on a $100 server”
Snip: I assume my apps will be successful. There’s no point in building an app assuming it won’t be successful. I would not be able to sleep if my app gains traction and then dies due to bad tech. I bake minimum viable scalability principles into my app. It’s the difference between happiness and total panic. It’s what I think should be part of an app MVP (Minimum Viable Product).
Blind googling to find the best platform can be misleading as it is hard to compare apples to apples. Take your time and write some code and evaluate for yourself.
- This guide highly recommends Microsft.NET and IIS Web servers: https://www.ageofascent.com/2016/02/18/asp-net-core-exeeds-1-15-million-requests-12-6-gbps/
- This guide says G-WAN, NGINX and Apache are good http://gwan.com/benchmark
Once you start worrying about scalability you start to plan for multiple servers, load balancing, replication and caching be prepared to open your wallet.
I prefer the free NGINX and if I need more grunt down the track I can move to the NGINX Plus as it has loads of advanced scalability and caching options https://www.nginx.com/products/.
Alternatively, you can use XaaS for everything and have other people worry about the uptime/scaling and data storage but I find that it is inevitable you will need the flexibility of a self-managed server and FULL control of the core processes.
Golden rule = prove it is cheaper/faster/more reliable and don’t just trust someone.
Common PaaS, SaaS and Self-Managed Server Vendors
Amazon AWS and Azure are the go to cloud vendors who offer robust and flexible offerings.
Azure: https://azure.microsoft.com/en-us/
Amazon AWS: https://aws.amazon.com/
Google cloud has many cloud offerings but product selection is hard. Prices are high and Google tend to kill off products that don’t make money (e.g Google Gears etc).
Google Cloud:
Simple Self Managed Servers
If you want a server in the cloud on the cheap Linode and Digital Ocean have you covered.
- Digital Ocean: http://www.digitalocean.com
- Vultr: https://www.fearby.com/article/setting-vultr-vm-configuring/
- Linode: https://www.linode.com/
High-End Corporate vendors
- Rackspace: https://www.rackspace.com/en-au/cloud
- IBM Cloud: http://www.ibm.com/cloud-computing/au/#infrastructure
Other vendors
- Engineyard: http://www.engineyard.com/
- Heroku: https://www.heroku.com/
- Cloud66: http://www.cloud66.com/
- Parse: DEAD
Moving to Cloud Pro’s
- Lowers Risk
- Outsource talent
- Scale to millions of users/hits
- Pay for what you use
- Granular access
- Potential savings *
- Lower risk *
Moving to Cloud Con’s
- Usually billed in USD
- Limited upload/downloads or API hits a day
- Intentional tier pain points (Limited storage, hits, CPU, data transfers, Minimum servers).
- Cheaper multi-tenant servers v expensive dedicated servers with dedicated support
- Limited IOPS (g 30 API hits a second then $100 per additional 10 Req/sec)
- XaaS Price changes
- Not fully integrated (still need code)
- Latency between Services.
- Limited access for developers (not granular enough).
- Security
Vendors can change their prices whenever they want, I had a cluster of MongoDB servers running on AWS (via http://www.mongodb.com/cloud/ ) and one day they said they needed to increase their prices because they underestimated the costs for the AWS servers. They gave me some credit but I was instantly paying more and was also tied to USD (not AUD). A fall in the Australian dollar will impact bills in a big way.
Vendor Uptime:
Not all vendors are stable, do your research on who are the most reliable: https://cloudharmony.com/status
Quick Status Pages of leading vendors.
- AWS: https://status.aws.amazon.com/
- Azure: https://azure.microsoft.com/en-us/status/
- Vultr: https://www.fearby.com/article/setting-vultr-vm-configuring/
- Digital Ocean: https://status.digitalocean.com/
- Google: https://status.cloud.google.com/
- Heroku: https://status.heroku.com/
- LiNode: https://status.linode.com/
- Cloud66: http://status.cloud66.com/
Some vendors have patchy uptime
Management Software and Support:
Don’t lock in a vendor(s) until you have tested their services and management interfaces and can accurately forecast your future app costs.
I found that Digital Ocean was the simplest to get started, had capped prices and had the best documentation. However, Digital Ocean do not sell advanced services or advanced support and they did not have servers in Australia.
Google Cloud left a lot to be desired with product selection, setup and documentation. It did not take me long to realize I would be paying a lot more on Google platforms.
Azure was quite clean and crisp but lacked controls I was looking for. Azure is designed to be simple with a professional appearance (I found the default security was not high enough for me unmanaged Ubuntu Servers). Azure was 4x the cost of Digital Ocean servers and 2x the cost of AWS.
AWS management interfaces were very confusing at first but support was not far away online. AWS seemed to have the most accurate cost estimators and developer tools to make it my default choice.
Free Trials
When searching for a cloud provider to test look for free trials and have a play before you decide what is best.
https://aws.amazon.com/free/ – 12 Month free trial.
https://azure.microsoft.com/en-us/free/ – $200 credit.
Digital Ocean 2 moths free for new customers.
Cloudant offered $50 free a month for a single multi-tenant NoSQL database but after as IBM acquisition, the costs seem steep (Financing is available through so it must be expensive). I walked away from IBM because it was going to cost me $4,000 a month for 1 dedicated Cloudant CouchDB Node.
Costs
It is hard to forecast your costs if you do not know what components you will use, what the CPU activity will be and what data will be delivered.
Google and AWS have a confusing mix of base rates, CPU credits, and data costs. You can boost your credits and usage but it will cost you compared to a flat rate server cost.
Digital Ocean and Linode offer great low rates for unmanaged servers and reasonable extra charges other vendors will scalp from the get go but lack the global presence.
Azure is a tad more expensive than AWS and a lot higher than Digital Ocean
At some point you need to spin up some servers and play around and if you need to change to another vendor. I was tempted by IBM Cloud Ant CouchDB DBaaS but it would have been $4000 USD a month. (it did come with 24/7 techs that monitored the service for me).
Databases
Relational databases like MySQL and SQL Server are solid choices but replication can be tricky. See my guide here.
- NoSQL database are easier to scale up and out but more care has to be given to the software controlling the data and collisions, Relational databases are harder to scale but are by designed to enforce referential integrity.
Design what you need and then chose a Relational, NoSQL or Mix of databases. A good API will join a mix of databases but deliver the best of both worlds.
E.g Geographic data may best be served from MongoDB but related customer data from MySQL or MS SQL Server
Database cost will also impact your database decisions. E.g Why set up a SQL Server when a MySQL will do, why set up a Mongo DB cluster when a single MongoDB instance will do.
Also when you scale out the database capabilities vary.
- Availability – Each client can always read and write data.
- Consistency – All clients have the same view of the data
- Partition Tolerance – The System works well despite physical network partitions.
Database decisions will impact the code and complexity of your application.
Website and API Endpoint
The website will be the glue that sticks all the pieces together. An API on a web server ( e.g https://www.myserver.com/api/v1/do/domething/important ) may trigger these actions.
- Check the request origin (Ip ban) – Check IP cache or request new IP lookup
- Validate SSL status.
- Check the users login tokens (are they logged in) – log output
- Check a database (MYSQL)
- Check for permissions – is this action allowed to happen?
- Check for rate-limiting – had a threshold been exceeded.
- Check another database (MongoDB)
- Prepare data
- Resolve the API request – return the data.
A Web server then becomes very important as it is managing lot. If you decided to use a remote “as a service” ID management API or application endpoint would each of the steps happen in a reasonable time-frame. StormPath may be great service for IP auth but I had issues with reliability early on and costs were unpredictable, Google firebase is great at Application endpoints but they can be expensive.
Carefully evaluate the pro’s and cons of going DIY/self-managed versus a mix of “as a service” and full “as a service”.
I find that NGINX and NodeJS is the perfect balance between cost, flexibility, and scalability and risk [ link to my scalability guide ] NodeJS is great for integrating MySQL, API or MongoDB calls into the back end in a non-blocking way. NodeJS can easily integrate caching and connection pooling to enhance throughput.
Mulesoft is a good (but expensive) API development suite https://www.mulesoft.com/platform/api
Location, Latency and Local Networks.
You will want to try and keep all of your servers and services as close as possible, don’t spin up a digital ocean server in Singapore if your customers are in Australia (the NETFLIX effect will see latency drop off a cliff at night). Also having a database on one vendor and a web server on another vendor may add extra latency issues, try and use the same vendor in the same data centre.
Don’t forget SSL will add about 40ms to any request locally (and up to 200ms for overseas serves), that does impact maximum concurrent users (but you need strong SSL).
- Application scalability on a budget (my journey)
- Adding a commercial SSL certificate to a Digital Ocean VM
- Creating an AWS EC2 Ubuntu 14.04 server with NGINX, Node and MySQL and phpMyAdmin
- The quickest way to setup a scalable development ide and web server
- More here: https://fearby.com/
Also, remember the servers may have performance limitations (maximum IOPS ) sometimes you need to pay for higher IOPS or performance to get better throughput.
Security
Ensure that everything is secure, logged and you have some sort of IP banning or rate-limiting and session tokens/expiry and or auto log out.
Your servers need to be patched and potential exploits monitored, don’t delay updating software like MySQL and OpenSSL when exploits are known.
Consider getting advice from a company like https://www.whitehack.com.au/ where they can review your code and perform penetration testing.
- Beyond SSL with Content Security Policy, Public Key Pinning etc
- Update OpenSSL on a Digital Ocean VM
- Adding a commercial SSL certificate to a Digital Ocean VM
- Creating an AWS EC2 Ubuntu 14.04 server with NGINX, Node and MySQL and phpMyAdmin
You may want to limit the work you do on authorization management and get a third party to do https://www.okta.com/ or http://www.stormpath.com can help here.
You will certainly need to implement two-factor authentication, OAuth 2, session tokens, forward security, rate limiting, IP logging, polymorphic data return via API. Security is a big one.
Here is a benchmark for an API hit overseas with and without SSL
Moving my Digital Ocean Server from Singapore to AWS in Australia dropped my API requests to under 200ms (SSL, complete authorization, logging and payload delivery).
Monitoring and Benchmarking
Monitoring your website’s health (CPU, RAM and Memory) along with software and database monitoring is very important to maintain a service.
https://keymetrics.io/ is a great NodeJS service and API monitoring application.
PM2 is a great node module that integrated Key metrics with NodeJS.
Siege is a good command-line benchmark took, check out my guide here.
http://www.loader.io is a great service for hitting your website from across the world.
End to End Analytics
You should be capturing analytics from end to end (failed logins, invalid packets, user usage etc). Caching content and blocking bad uses can them be implemented to improve performance.
Developer access
All platforms have varied access to allow developers in to change things. I prefer the awesome http://www.c9.io for connecting to my servers.
If you go with high-level SaaS (Microsft CRM, Sitecore CRM etc) you may be locked into outdated software that is hard for developers to modify and support.
Don’t forget your customers.
At this point, you will have a million thoughts on possible solutions and problems but don’t forget to concentrate on what you are developing and it is viable. Do you have validated customer needs and will you be working to solve those problems?
Project Pre-Mortem
Don’t be afraid to research what could go wrong, are you about to spend money on adding another layer of software to improve something but not solve the problem at hand?
It is a good idea to quickly guess what could go wrong before deciding on a way forward.
- Server scalability
- Features not polished
- Does not meet customer needs
- Monetization Issues
- Unknown usage costs
- Bad advice from consultants
- Vendors collapsing or being bought out.
Long game
Make sure you choose a vendor that won’t go broke? Smaller vendors like Parse were gobbled up by Facebook and Facebook closed their doors leaving customers in the lurch. Even C9.io has been purchased by AWS and their future is uncertain. Will Linode and Digital Ocean be able to compete against AWS and Azure? Don’t lock yourself into one solution and always have a backup plan.
Do
- Do know what your goal is.
- Make a start.
- Iterate in public.
- Test everything.
Don’t
- Don’t trust what you have been told.
- Don’t develop without a goal.
- Don’t be attracted to buzzwords, new tech and shiny objects.
Good luck and happy coding.
Donate and make this blog better
Ask a question or recommend an article
[contact-form-7 id=”30″ title=”Ask a Question”]
Edit v1.11