Sunday, November 12, 2017

Building a software product - what's one of the secret ingredients?

Recently I am thinking over what are the important ingredients when building a software product in order  to be a success. Investigating my previous experience at work and considering many open source projects, I've came to conclusion that one of the things, that is key in order to make a product people love is:

Dogfooding - Eating your own dog food is a slang term used to reference a scenario in which a company uses its own product to test and promote the product.

Several arguments supporting my claim:

  • Case study - when I evaluate a technology/product, one of the important things is who is using it and for what. No better validation but presenting to the world what you've built with the product or some exposure on how your organization is using the product internally.
  • Instant Feedback - when your company uses your product, internal teams are using it on a daily basis and give you instant and honest feedback. In most cases the feedback is for improvements and bugs.
  • UX testability - everyone wants to complete his work in the most efficient and seamless way, therefore things you don't note cause you're not using the product constantly, but developing it, are noticed easy by people who are trying to optimize their workflow.
  • Upgrades - for On Premise and even for SaaS solutions, upgrading the product may cause various problems to users. It would be hard to cover many real-world scenarios, without having some inside. 
  • Commitment - if you are using your product, it means you won't shut it down - tomorrow. This is more or less tentative, as services are being shutdown anyway. But still shows some good signs to me.

Are you dogfooding your product? If not, what's the reason?

Tuesday, August 1, 2017

Create HLSv3 videos in AWS from S3 via Lambda and ElasticTranscoder

Working on HTTP Live Streaming I've followed the AWS Mobile Blog article:

where a nice serverless architecture is presented:

  1. Upload mp4 file to an s3 bucket
  2. A trigger watching the s3 bucket invokes a Lambda function
  3. Which invokes the Elastic Transcoder to turn the video from mp4 to HLS and saves to another s3 bucket for your usage
  4. Use in your website/mobile app via CloudFront

After I've went through all the steps I've ended up with HLSv4 videos in my Target S3 folder. They are working great in Safari or with the Chrome's Native HLS Playback extension. But, when I tried in:

  • VLC - I've got an error after loading the master-file *.m3u8. I've examined the VLC Messages console and got to the cause of the error, which       

            httplive error: #EXT-X-VERSION should be version 1, 2 or 3 iso 4

         The error means that the HLSv4 is not supported in VLC 2.x. It will be supported in VLC 3.x, which is not yet released.
          AVFoundationErrorDomain -11800 HLS

So I had to modify my Lambda function to produce HLSv3 instead of HLSv4. It's a little bit tweaking of the Presets used when encoding the video. As I've spent some time reading through the ElasticTranscoder SDK documentation and the Presets, I think it's worth sharing the lambda code for HLSv3 encoding to save some time:

Happy transcoding!