What is Software Development?

Post #02

If you’re not sure what to expect from a life-long career as a software developer and haven’t read the previous article you should give it a read here . We discussed some of the reasons why I made the decision to transition careers to software development, and what a career in software development offers that you might want or need in a life-long career.

Now that you know some aspects of software development that might appeal to you, you might still be left thinking “Sure, sounds great Dorian but what exactly is software development?”. After doing a little bit of research myself, I thought “great! This software stuff seems like it could be for me” but, I didn’t know exactly what software development was. What did it mean to develop software? Sure, I knew what it meant to develop and what software was, for the most part. Nevertheless, if someone asked me what a software developer did or to give them a good definition of what software development was, I wouldn’t have been able to give them a good answer at the time. This is what I aim to explain in this article by giving you a quick, high up look at software development. I aim to answer what software development is and what kinds of software development there are.  

What is software DEVELOPMENT?

As defined by Wikipedia *

Software Development: is the process of conceiving, specifying, designing, programming, documenting, testing, and bud fixing involved in creating and maintaining applications, frameworks, or other software components.    

For anyone deciding on whether software development was going to be what they do for the foreseeable future, that simple definition isn’t enough. Best worse case scenario, you spend a bunch of money on learning a skill that you end up realizing isn’t for you. Worse case you spend a bunch of time and money on becoming a software developer and wind up being stuck in a job you hate just as much as the last. Best case you make the decision to not pursue software development or, in my case and hopefully yours, you decide to jump headfirst into the craft knowing that you’ll be happy being part of the awesome software development community that’s out there.

I suppose what we’re really looking for is a better understanding of what exactly being a software developer entails. What are you going to do for the rest of your life as a software developer?

what is software? why software?

To give a less than in depth definition of software, software is a computer coded program that solves a business problem. You might be wondering how some bit of software you’re familiar with solved a business problem. Well if you look hard enough, you’ll be able to find the business decisions behind every program. It’s better to think of software as a value-adding program. When you sign into YouTube for example and you see a list videos that are recommended to you. Well that’s software programmed into YouTube that selects videos that it thinks you might want to watch based on several variables that after being calculated, videos are spat out on your recommended list.

Another example is a business that sends a company wide email with all company job postings. Software can be written that automates the process by creating a templated email, gathering all the open jobs and employee emails, inputting that information in the appropriate places and sending it off.

Can you see how those examples of software solve business problems or rather, add value to a business? Well, allow me to break it down for you. In the case of our YouTube example, the software described basically shows you videos the program thinks you might want to watch. If the company can get you to spend more time watching videos, they can in turn, sell more ads to advertising companies. So, writing software that can accurately predict which videos you might like to watch next might just make you stay up a little longer than you should and watch the next video and another ad instead of going to bed. More videos watched = more ads sold = more $$$.

Our email example on the other hand is a little more indirectly value adding than our last example. In this example software is being used to automate a process. Depending on the size of our example company, there might be a team that spends hours gathering all the relevant information, composing an email for the company that could be 500+ people, and manually entering everyone’s email addresses into the system before the email is sent off. Imagine how much time this would take for a company to send just this one email bi-weekly. Never fear though, with software designed to gather all the relevant job and employee information, the software has all the ingredients to send off a company wide email with little to no human interaction. Automation software = less person hours = money saved and value added.

Unlike our first example, our email example doesn’t directly make the company money in terms of sales but nevertheless, due to the freed-up time our software provides the company, money is saved. Of course, in every situation the feasibility of creating the software must be decided upon. If the development cost heavily outweighs the potential benefit it doesn’t make much sense to develop that software from a business standpoint. Software developers, however, generally won’t need to understand why the business decision is made rather, what your role is in developing the software after those decisions have been made.

DIFFERENT KINDS OF SOFTWARE DEVELOPMENT

“I’m a software developer” might not go a long way in describing what you do when asked at the next social party you attend. Someone less technical might be satisfied with this answer but for the purpose of understanding what a software developer is, that doesn’t quite cut it. Let’s look at it from a different perspective for a moment. Let’s say you’re at some party engaging in some small talk and ask the person you’re talking to what they do for a living. “I’m an athlete” they respond. I for one might think this to be a strange answer because of the lack of specificity. You would expect someone to be a little more specific and say something more along the line of “I’m a football player”, soccer player, tennis, what have you.

The point I’m trying to make is that the term “software developer” is an extremely general term. Saying that you’re a software developer is much like saying you’re an athlete or doctor in the sense that all these terms are a very generalized way of describing an occupation. Doctors for example, have specific specialties much like athletes or software developers. To say you’re an athlete doesn’t give much of a specific answer. When another doctor is talking to another doctor answering with “I’m a doctor” seems out of place due to lack of specificity when talking to another doc. Keep in mind there’s a time and place to be specific. There are different kinds of software developers much like there are different kinds of doctors or athletes and the list of different developers out there is equally as long if not longer.

STARTING WITH THE MOST GENERAL

I thought I’d start breaking down the types of software developers out there by starting from the most general types and then getting a little more specific. Also, I’d like you to keep in mind that the following lists are not exhaustive but are more of the common types of software developers that you might hear about when researching what kind of developer you want to become.

Web Development

One of the most popular and probably the best-known type of development is web development. Web development put simply, is developing anything that you see on the internet or web. Despite what comes to most people’s mind when hearing web development, website development is by far not the only aspect of web development but, it is a large part. Another popular part of web development is web apps. These are applications that run in most cases, in web browsers. Running in the browser this makes cross platform development easier as most operation systems (Windows, Mac OS, Linux) support a lot of these web browsers.

Mobile Development

Mobile development is something that we can all in some way relate to because of those phones we carry in our pockets every day. Mobile development is as it sounds, development for mobile devices. Relative to the desktop computer, mobile development is a fairly new type of development that took off when the first Apple iPhone hit the market. Today though, with mobile devices everywhere, so is mobile development. More specifically mobile development encompasses a great range of things such as mobile games, business applications, to the actual operating system your phone or other mobile device runs on and more but, we won’t cover that here.

Desktop Development

Desktop development is, or at least used to be one of the most popular types of development. Desktop development is the development of applications that run stand-alone on desktop and laptop computers. Usually, these applications unlike web apps, are developed for a specific operating system usually Windows, Mac OS, or Linux. Of course, you can have the same application on different operating systems however, in most cases doing this requires developing a totally separate code base specifically targeted at the different platforms but, is not always the case.

Game Development

I’d be willing to bet that most developers at one point or another in their journeys to software development thought about becoming a game developer. I mean come on! Working for a company like Ubisoft developing the next edition of your favorite game, Assassins Creed sounds like a blast doesn’t it? Well sure it might sound appealing at first but the pros and cons of what you can expect in each of these types of development is a little outside the scope of this article. Don’t worry though, that will be coming up in later posts. We are all familiar with the billion dollar a year industry that is gaming. Game development could involve developing VR games, PC, Xbox, PlayStation, mobile games and more. Again, this one encompasses a lot of more specific areas of development because let’s face it, there’s all kinds of things involved in gaming. Platform design, maps, DLC, Physics, AI, general gameplay, Ui, the list goes on.

Like I said before, this list is not exhaustive. There are other areas of software development that might interest you that I haven’t mentioned above, and it’s worth doing some extra research on the topic to find the best fit for you. Not only do I make that suggestion because you might find something you like more than the areas of development listed above but also, because deciding what kind of software developer you want to become before buckling down and learning the craft is of upmost importance. I’ll be explaining what I mean by this in later posts however, sufficed to say, each different type of software development requires a range of different skill sets which you will have to learn and doing this allows for better focus.  

A LITTLE MORE SPECIFIC

You now know a couple areas of software development out there. But, like I mentioned before, there are different kinds of development within each area. There’s a lot involved in a general area such as web development. Front-end, back-end, security, database etc. I thought I’d give a little insight into what some of these common terms mean.

Front-end development

As discussed before, front end or client-side development is what you, the user, sees when you visit your favorite website or use your favorite application. The main goal of a front-end developer is to make the application as appealing and as user friendly as possible. Another term you’ll come across when talking about front end development is UI or user interface. Same concept except I think of the user interface the things that the user uses in an application such as buttons, menus and anything else users can interact with directly, rather than appearance. Be aware though, UI in some cases is easily confused with UX or user experience. I won’t go into the details of what UX is or what’s involved except to point out that the user interface is part of the user experience but not all that user experience is.

Back-end development

Again, we briefly touched on what back-end or, server-side development is in the last article so I won’t get into the weeds too much here, but I will leave you with this. Back-end development is what goes on behind the scenes. Back-end development works in close relation with the applications UI. When you share your friends latest and greatest tweet, you use the user interface to navigate the menus to eventually retweet the post for all your followers to see. The back end, to sum up quickly is where all the logic happens, it makes the user interface work or in this example, what actually makes the tweet retweet..ed.

Security development

Software is like anything else of value, you want to keep it safe. You sometimes hear of malware or ransomware attacks on people, business, or governments all over the world. So how do we keep our software and vital systems safe? Enter security development. A security developer could be summarized as someone who develops software specifically targeted toward system security or, someone who integrates security into software. This is done by creating tools that prevent things like viruses or malware from ravaging a system or application (think anti-virus software). When integrating security in applications, a security developer ensures that security measures are part of, integrated into, or baked into software programs. Security is a huge part of computers, networks, and computer programs. In this information age, information is of upmost value to those that hold it and therefore must be accordingly protected. I think that even if you don’t decide to become a security developer, or even a software developer at all, it’s worth your time to familiarize yourself with some level of security to protect yourself when you’re out there on the world wide web.

Full Stack development

Full stack development is probably the most debated type of developer out there. Some would argue that there is no such thing as a true full stack developer because no one person can know it all. However, for our purposes we’ll hop over to the other side of the fence and assume that there are such things as full stack developers. So, what is it? A full stack developer is competent and able in all the different kinds of development required to bring an application from conception to deployment. They’re mostly summarized as someone who is proficient in front end, server side, and database development. One thing that can’t be debated though, and I would suggest you keep in mind is that because full stack development covers a wide range of technologies, a full stack developer might not be as specialized in the areas they cover. For example, someone who specializes heavily in front-end web development and someone else who specialized in back-end would very likely be able to do a far more specialized job than a full stack developer. On the other hand, a full stack developer will still very likely be able to do more of the general tasks required and only take one person to do so.

Your level of specialization is something that needs consideration when thinking about what kind of developer you want to become. There’s much to be said on the topic of specialization which requires a full in-depth article later.

WHAT to EXPECT in A software development career?

Despite there being so many kinds of software development, some things hold true no matter which area of development you decide to pursue. The things I’ll touch on here will be high level looks at the things you can expect to see in software development. Later, I plan on spending a whole article on low level looks at each of these topics but for now here are some of the things that you’ll see in all fields of software development.

Learning

One of the things we touched on in the last post was the fact the technology and software and therefore software development changes at a blindingly fast rate. Like I said in the last article, this is one of the reasons that made me love the idea of what software development was. Because everything in the tech world is changing so quickly, you’re always required to learn a new technological skill in order to do your job better and learn them fast. They say that you never stop learning and that is doubly true for software developers. For example, just as you read that last paragraph a new JavaScript framework was released. There are always new methodologies, frameworks, languages, and tools coming out so fast and so often that it’s impossible to learn everything software development even if you had lifetimes to do it. Don’t let that scare you though. Out of the hundreds of languages for example, you’re not going to have to learn the ins and outs of each of them along with their libraries and frameworks to be an outstanding software developer.

CHALLENGES

As we discussed above, software is almost always used to solve a business need or solve some sort of problem. Not all the time are you singlehandedly going to be able to solve the next problem of creating the nav program that takes us to mars, there’s teams of people for that. My point is, every program solves a problem of some scale. That problem might be broken down into smaller, manageable problems that smaller teams or even an individual can solve. Software problems are often extremely challenging, and, will regularly test every aspect of your problem-solving ability. The difficulty of these problems spur innovation among developers, causing new tools, at times, new languages and more so I would venture to say because of the continual challenges all software developers face from day to day, requires us to keep our skills sharp and constantly learn new technologies.

Deadlines and pressures

When you’re working for a company or, for that matter, yourself, clients will come to you with a request for a bug fix, new software, new features or whatever request they might have, they’ll expect a delivery date. Now at first glance you might be thinking deadlines and delivery dates are nothing to fear, you make them all the time. The thing is, with software you never really know what the future holds. Adding a feature to an existing application for example, might seem like something trivial that experienced developers would have no problem determining how long that would take. However, without a deep dive into the application and a deep understanding of what your client wants will very often cause you to under or overshoot your estimates or, cause your boss to give you unreasonable deadlines. Every situation is different. Despite what every customer service pep talk would have you believe; customers often don’t have any idea of what they want or how to explain it. That is to say for example, a customer wants an application built that does x,y, and z . You’ve done similar projects that do just that and you know how long this one will take so you sign a contract for x amount of dollars saying you’ll have the application ready for them in x amount of time. Your phone rings after weeks or months of work and your client suddenly wants to add another feature to the application, or, a feature you’ve built into the application isn’t quite what they thought they wanted or thought they explained to you. You can see how suddenly there can be weeks, months or even years added to the project and how that might make things a little complicated.

This is more of a self-employed point if view, but the concept can easily be translated to the point of view of an employee to employer. Your boss wants a feature added with a quick explanation of how they want it done and you give him a timeline you think works. Maybe your boss thinks that it’s too long and they need the feature done by this Friday, or maybe he agrees and halfway into adding this new feature something interferes with a critical part of the overall application. Now you have a problem on your hands. A problem that leads into researching how to solve the problem, maybe learning something new, and implementing that solution to continue with the feature addition adding more time required to complete your assignment. Now you’ve got to explain to your boss and team why this has happened which segues nicely into my next bit.  

People, and soft skills

Whether you’re working alone or with a team, you’ll always have someone, clients or bosses to answer to. When things go wrong, deadlines need to be pushed back, the “finished” product is not what the client thought it would be, you must know how to deal with people in order to come to a resolution or consensus. As strange as it might be to think, soft skills are just as important, if not more important than your ability to code. Why is that? Well anyone willing to put in the time and effort can learn how to code. However, it is far harder to teach someone how to effectively communicate ideas, problems and plans with a team in order to solve whatever situation they may be facing.

You’re working with teams or clients on how to solve a problem. Most often revisions need to be made, problems come up and the better you are at dealing with people and communicating the smoother a project will go, and, you’ll probably have a better quality of life when you have the ability to do so. Collaboration is a key part of software development and your ability to communicate, collaborate, bring a team together and coming to a consensus will likely play a large part in your success in the industry. Don’t get me wrong, if you can’t code your way out of a wet paper bag you could be the nicest person with the best kind of soft skills and never get a job in software development but, I just want to underline how important your soft skills and ability to communicate are in this field. Soft skills are a topic that I simply can’t do justice in just a few short paragraphs so make sure to stay tuned to the post coming soon dedicated to what soft skills are, and how to get better and them.

Now you have a better idea of the different general, and specific kinds of developers there are out there. It’s up to you what path you take but hopefully this article has helped you get an idea of what area you think you’d be most happy in. The best advice I can give to anyone starting out is continue your research, be sure about the field you’re looking at going into and when you’re sure, buckle down and get started!

Don’t forget to leave a comment or send us feedback on what you’ve read here and let us know how we did or where we can improve, maybe you want a even more in depth look at one or all of these software development categories, let us know! Until the next article in two weeks remember, keep learning, keep coding and keep creating!

-Dorian



*Software Development as defined by Wikipedia

One thought on “What is Software Development?

Leave a comment