Buy or Build?
One of the decisions a CTO has to frequently make is whether to build some piece of functionality in-house or buy it from a third party vendor. In this post, I share my framework for making these decisions.
I also include a case study each for a buy decision and a build decision. Added bonus – some thoughts on whether you should sell something you’ve decided to build.
Functional Complexity
One of the most important determinants of buy-vs-build decisions will be the ability to spec out the entire functionality. Often we know what the primary functionality should be – e.g. being able to show metrics on a graph (a monitoring solution). The devil is in the details, though, and spending some time in discovering peripheral functionality is very helpful in avoiding a situation where you jump head-first into building something seemingly simple and then get stuck.
5 Competitive Advantages in Technology
The technology universe is in a constant state of flux with new advancements arriving faster than one could keep up. A technology leader, in this scenario, needs to look for something durable to build the foundation of their new (or improved) technology organisation.
Spending 36 months leading the charge (and occasionally failing) at a fast growing business that’s powered by technology can teach a lot. Coming off the back of a career built with customer-facing development teams at companies serving over 100 million customers, I now have some idea of what it takes to make a strong technology foundation for a modern business.
The Best Feature of Go
I’ve been programming since the late 90’s and I’ve done quite a bit of coding in C, C++, a lot of it in PHP and some in Python as well. On the front-end I’ve done some JavaScript and I’ve also had the misfortune of programming in Java 😉
I started programming in Go in 2012 and since then I haven’t wanted to program in any other language. I’ve had a handful of large Go implementations across two companies and by now I have my own short list of favourite features.
D7100 and AF-P DX 70-300 VR on an Airshow
Aero India is a biennial air show that takes place on an airfield on the outskirts of Bangalore. As per Wikipedia, it’s the world’s largest air show after the one in Paris. I first came to know of it when a friend of mine armed with a Nikon D70s and a non-VR 70-300 f/4-5.6 came back with some fabulous shots way back in 2007. Ten years later, I got to visit the show with a Nikon D7100 and an AF-P DX 70-300mm f/4.5-6.3G VR.
Factoring the Crop
Here’s a picture whose EXIF I have stripped so you won’t know what equipment was used to shoot it.
If you had to guess the sensor size, considering that this is a minimally edited photo, what would be your guess? FX? DX? m43? 1″? 1/1.7″? 1/2.3″?
Small sensor systems are all the rage these days. 24-1200mm zoom in a handy little package. How about that? The problem is, tiny sensors come with compromises. You have to bear with the compromises in every situation. How would it be, if you could deal with the compromises only when you needed to?
AF-S Nikkor 20mm ƒ/1.8G on DX
Early this year, I acquired a used 20mm ƒ/1.8G Nikkor lens. I only have DX bodies and the 20mm works more like a wide-normal prime than an ultra-wide, as on FX.
Why use 20mm ƒ/1.8G? on DX?
I had long wanted to have a small, fast 24mm prime for my DX bodies. While the 35mm ƒ/1.8 DX is compact enough, I don’t like it that much. The FoV (51mm FX equivalent) is too narrow for general photography and too wide for portraits. I do most of my portrait work with a 50mm ƒ/1.8G, so I need something to cover the wider end.
Nikon D750 + 20mm f/1.8G Nikkor
A few days ago I got the opportunity to try out a Nikon D750, along with the new 20mm f/1.8G Nikkor lens. It wasn’t the best of times for trying out new toys for me, because of which I couldn’t get any presentable shots. I still got some shooting to do with it and I would go ahead to include those non-presentable shots anyway.
Carrying Cameras
The Problem
One of the big issues I face while photographing outdoors is that of having to carry a big 1.5 kg camera, and usually additional lenses and accessories weighing another 1-2 kg, all the time while out shooting for the day. The default carrying solution – neck strap – has a couple of disadvantages:
- It’s extremely tiring for the neck muscles
- It’s very fiddly, and gets in the way too much
Most of you might already have faced problem #1. Problem #2 is something you might not realise, until you start shooting without the camera strap. I let my cameras go without the strap a couple of years ago, and now I can’t even think of having to shoot with the strap on the body.
Farewell, Photography
Update: I couldn’t stay away for long. That, and I conquered the sharpness gremlins plaguing my experience with the heavily used AF-S DX 16-85mm f/3.5-5.6G VR.
We had a good thing going for eight years or so, but it’s time now to bring it to a halt.
Back when I started, I had no dearth of time to give to myself and I had no one but myself to spend money on. It was meant to be all for fun, nothing serious.
Inheritance Semantics in Go
Contemporary application design discipline is deeply rooted in Object Oriented Analysis and Design and inheritance is a key concept in OOAD. Go does not support classes and inheritance in their classic OOP sense but since many of us are trained in OOP, the loss of an important design concept sometimes feels restrictive.
Even though I knew about embedding and interfaces, their connection with classic inheritance wasn’t quite obvious. I set out to understand how I could emulate the coarse inheritance semantics in Go, without going into fine nuances. That in turn has helped me understand embedding and interfaces in a deeper way and I hope it would help me better design Go types and methods for extensibility.