Imagine you’re building some software. What’s the first thing you need to do? Discover what you’re building right? In a software engineering role, software is built for a reason. No one builds software for no reason. So, the first thing you need to do is figure out who you’re building software for. Once you know who you’re building for you have to know what they want done. This is hard. I know, it sounds easy, but why is it hard? Communication between people is hard enough to begin with, but here we’ve got to translate product talk into engineering specifications.
For example, you may be told something like “I want to be able to recognize the digits written in these images”. How do you turn that into engineering specifications? Let’s break it down. What do we have to do? We need to process an image and classify the contents of an image. How do we process an image? We break it down into pixels. How do we classify the contents of an image? Well, there are many approaches, perhaps we use some sort of fundamental machine learning classification algorithm like K-Means, K-Nearest Neighbors, or Logistic Regression. Perhaps we should use a more complex machine learning technique like a neural network.
Ask the Right Questions
“Ask the right questions, and the answers will always reveal themselves.”Oprah Winfrey
This quote doesn’t just apply to life. It applies to software engineering as well.
Back to our example, how do we pick our approach? Well we’ve got to ask the right questions. Look what I’ve been doing so far in that paragraph above. I’ve been asking questions. I’ve been asking questions about the process, I’ve been asking questions about what we’re doing. We already know who we’re building it for, ourselves to get an example of how to discover software engineering requirements.
What am I asking questions to discover? We’ve already broken down the product description into a couple engineering specifications. Now let’s discover which of those methods I listed above we should implement. How can we decide which technique to go with? We’ll need to know what the input of the image looks like. Let’s say we’re working with the MNIST dataset. Those images are 784 pixels, we’ll probably want to use a neural network. We could use a more fundamental machine learning technique, but we’ll need to augment the data. Maybe we could do it with K-NN or K-Means if we apply principal component analysis on it. Anyway, to get to the next step, we have to pick one, so let’s pick the neural network.
Once we’ve picked the technique, we have to pick a way to execute the technique. We can use a library like PyTorch or TensorFlow, or we could build it from scratch. That’s all there is to the discovery section of software engineering. From here we’re going to create a design document and then build the software. For more information, check out the book Discover, Design, Deliver – the Blueprint for Building Software.
I run this site to help you and others like you find cool projects and practice software skills. If this is helpful for you and you enjoy your ad free site, please help fund this site by donating below! If you can’t donate right now, please think of us next time.