Starting a software project on the right foot

Software projects are complex. Often the goal of an application looks simple, but as time progresses, the participants realise how complex the it actually is. Usually they fail to consider every type of input and the corresponding output. Fringe cases are often ignored and suddenly need to be accounted for. The most overlooked flaw is a lack of communication between the one who wants to use the software and the one who builds it. Requirements are not fully discussed and expectations are not fully set.

Most projects are difficult because they are not started the right way. The project starts in a direction that has already drifted from the desired outcome. It continues to drift until a lot of changes or even a ‘scrap and rewrite’ are needed to bring it back to course at a much later stage. In this post, I would like to discuss the points which should be taken care of so that you start a software project the right way. Continue reading “Starting a software project on the right foot”

6 practices that keep your software masterpiece from seeing the light of day

Software engineers switch between two modes: painful perfectionists and band-aid stickers. During the start of a project, software engineers discuss things to painful detail on whiteboards, Post-It notes, restaurant napkins and even glass doors. This eats away precious time that could have been spent on actual development. But as the deadline looms, the whiteboards and glass doors are rubbed, Post-It notes are torn apart and restaurant napkins are trashed. The plans are chucked in favour of anything that makes the application work.

Often, the released solution has plenty of duct tape code that holds the functionality together. After all the over-planning, duct-tape coding is the only thing possible in the limited time that the programmers leave for themselves. Software teams hardly release anything during the early phase of a software project as everything is put in meticulous detail on paper only. But as the deadline approaches, frenetic releases are made everyday or even every few hours, causing confusion among the developers, project managers, testing teams and the clients.

Continue reading “6 practices that keep your software masterpiece from seeing the light of day”

Making your photos look good with post-processing

My wife Priya and I went on a year-long trip named India 360. We clicked tens of thousands of photos during the trip. We share them on our Facebook page and Instagram channel. But, we realised that the quality of the photos we shared weren’t high. Sure, the resolution was great and the most of the photos were good. But we weren’t getting the photos to look like what professional travel photographers do.

Late last year we met Aravind, my brother-in-law (Priya’s brother), who is an excellent photographer. He is also good with post-processing using software tools like Snapseed and Lightroom. In a span of half an hour, Aravind taught me how to make my travel photos look good…. really good. He didn’t fiddle with gimmicky settings, nor use jargon. He taught me 5… just 5…. steps that make every photo look great after post-processing. There was a bonus 6th step which should be used sparingly.

Since then, I have learnt from his principles and edited 100s of photos from our travel, making them look much better than the original shot. I even added some steps of my own to the process. I edit my photos from two places. On my Android phone, I use an app called Snapseed. I use neither Mac OS, nor Windows. On Ubuntu Linux, Adobe Lightroom doesn’t work. So my desktop photo-processing app of choice is Gimp. Continue reading “Making your photos look good with post-processing”

Dipping your toes in the water with test-driven development

Akshay is anxious to have cutlets. He can’t wait to sink his tooth into the cripsy, brown delicacies. He  quickly boils some potatoes in a pot, mixes them hurriedly with some chilly, salt and pepper, pats the mixture into round shaped patties and sautes them on the pan greased with oil. Finally, he eats them. Oops. The potatoes are only half-boiled. He has added too little chilly, too much salt. The oil had not heated properly before Akshay tossed the cutlets in it for shallow frying. Some cutlets are still raw. Akshay thinks to himself: “Next time I should test the results after each step of cooking.”

Bharani is more methodical. She starts with a skewer. The skewer bounces off the surface of the potato. “So this is how hard they are”, she thinks, “They need a 10-minute boiling. After that, the skewer should go 2 inches inside”. After the potatoes are done, she tests with the skewer again and is satisfied with the texture. She mashes them and puts a small sample of the mash into her mouth. The bland taste gives her an estimate of how much spices should be added. She starts with a teaspoon of chilly and salt, kneads the mash well. After 10 seconds of mashing, she tastes a sample. She adjusts the chilly and salt as per her liking and then pats the mash into round shaped patties. Next she heats some oil on a pan. She waits until the oil sizzles. Then she drops a tiny piece from one of the patties and checks how it fries. The piece comes out golden brown and cripsy. Now Bharani is ready to lay all the patties on the pan. In the end,  she enjoys some tasty cutlets.

Continue reading “Dipping your toes in the water with test-driven development”

5 online tools for random data

If you are a software developer or someone who is testing a system that will be deployed, you will often enter plenty of data in user entry fields, such as the name of a person, date of birth, telephone number, etc. We call these dummy data. If you need to input only one or two times, you will often allow your brain to take shortcuts, using names like John Doe, Jane Doe, Tom, Dick and Harry. You resort to phone numbers like 9123456780 or a date of birth like 1-1-1980. However, what happens when you need to enter more than 5 records. That’s when your brain starts ‘thinking’. You will take the effort of coining names or numbers and make sure that you aren’t repeating them across records.

Frankly, I don’t recommend wasting precious brain cells on thinking up unique names, phone numbers or birthdays. Coining values for mundane fields should best be left to automation and your brain should be preserved to do what you do best. Product design, software development and quality assurance.

Today, I present to you my 5 favourite online tools for generating random data for filling in mundane input fields. Some of them generate data that as random as nature itself and hence things feel real. Continue reading “5 online tools for random data”

Using PayTM: India’s most popular cashless wallet

We saw how to use BHIM app for payments and receipts in our last post. Today we shall see how to use India’s most popular digital payment app, i.e. PayTM. While BHIM is a link-up interface to use your bank account, PayTM has its own money wallet where one can keep money. Using that wallet is the fastest way to pay, since it uses the money stored inside and does not have to connect to any banks. Plus, there are plenty of offers, deals and cashbacks if you use PayTM to pay for several services. And the best benefit of all is that you use no cash. Continue reading “Using PayTM: India’s most popular cashless wallet”

Using BHIM for cashless transactions

BHIM stands for BHarat Interface for Money. It is an app that uses the Indian government initiated UPI (Uniform Payment Interface) to transfer money between two bank accounts in real time. The Indian government’s arm named NPCI (National Payments Corporation of India) is responsible for the development and maintenance of UPI and BHIM. Continue reading “Using BHIM for cashless transactions”

Putting traditional APIs to REST

In the last post, we saw how every company is building an API for its services. Other companies can then access the services in their own apps. This builds an ecosystem around the company’s services and the company builds both its reputation and its business. But you will see that companies are now building ‘REST’ APIs. REST stands for REpresentational State Tranformation. It is a clunky, overly technical term that even those from technology fail to understand, let alone hope to build an API which is ‘REST-compliant’. In this post, I will completely dejargonise the term and explain to you what it means by taking a very common activity: Reading a book, inserting bookmarks and marking with a highlighter.

Continue reading “Putting traditional APIs to REST”

Make your data more context-aware with JSON-LD

Over the last few years, you would have noticed that GMail got smarter. If an e-mail is about a flight ticket, then GMail shows a short summary with the flight number, destination, timing and seat information. It will also offer to create a reminder for when you should leave based on your location relative to the airport. For an e-Commerce purchase, there is a summary in an invoice format, showing the item particulars and the price. How does Google know that a particular mail is about a certain topic? Has Google gotten so smart with language processing that they understand the context from mail content? Not only GMail, but even Google Search does smart things like automatically showing nutrition info when you type in the name of a food item. Continue reading “Make your data more context-aware with JSON-LD”