Don’t just be a programmer, be a thinker!

Don’t just be a programmer, be a thinker!

Do you know how to think about problems at a high level? To see the big picture and then narrow it down into small actionable steps? I want to go over the idea of tackling problems from a high level and how important it is to develop this skill for your future in Software Development.

There’s a saying:

“Those who can, do; those who can’t, teach”

This statement means that those who are able to do things like write source code, engineer, and build things create tangible products and services for a living. Others without the skills to implement end up just teaching…or talking about creating.

Personally, I think it’s a load of s***. I’ve been developing software for over 12 years and it’s taught me that being able to develop hardware and software is an excellent skill that I possess, but without the ability to think at a high level, these skills would just be sitting in my figurative toolbox getting rusty.

Let’s use an example:

When you are an entry-level construction worker, you begin in a position where you are working closely with more experienced individuals. Normally, you following instructions from your superior, and as you become more experienced additional responsibility may be added on to your plate. As a construction worker, especially when you’re entry level, you’ll be expected to do particular jobs using traditional construction tools ore excavation tools. If you want to move up in the field of construction then maybe you will want to become a foreman or a manager. To move up in the construction ranks, you’re going to have to learn skills you probably didn’t have when you first started in construction. Many of these skills are what we would consider to be high-level skills which may not include implementing or what people like call “doing”.

So how does this relate to Software Development?

Like construction, when you first begin your software development career the expectation is that you can program in particular languages.  And, your first few years as a programmer are when you become acquainted with implementing solutions in code. It during this time that you’re likely to develop your confidence as a developer, and become comfortable with the languages that you’re regularly using in your job.

As you continue in your career as a software developer, you’ll begin to better understand the software development process and see how others contribute to projects as programmers, architects, test-engineers, and managers. At this point, you begin to see that without the higher-level knowledge of software development, many of the projects that you’ve been working on would never be completed. 

Software is complex and requires thought and planning if you desire to finish a project well, on-time, and within budget. 

So, as you become a better developer and gain industry experience, you may begin to respect the idea that being able to conceptualize solutions at a high-level is invaluable to the implementation process. With the ability to think and problem solve at a high level, you’re able to make logical decisions on the method of implementation, based on the technical requirements, before you implement costly and time staking solutions. 

So, why do I claim that “Tackling the problem from a high level is more important than the implementation”?

Well, the truth is that both skills are necessary, but the higher paying roles of the two normally belongs to the high level thinker. In order to implement software solutions you have to be able to write code. To think at a high level, you need to understand a problem and form a solution using your programming skills and background knowledge. In the case of complex software problems, perhaps your team is taking on a large web development project. To best analyze the project requirements and formulate an engineering plan you need to have some background knowledge and practical experience in web development. 

Now, you may be asking what sort of problems or issues are considered complex and require high level thinking?

Well, as you work on more projects throughout your career you see how quickly projects can go from being simple ideas to extremely complex solutions.

Let’s use an example of developing a small business website:

In this example, you work at a firm that provides software development solutions in the form of website.  The client wants to develop a website for their small business that sells sneakers for high school athletes. 

At short glance, this project may seem simple. What you don’t know yeah it is that this client has gone through an exploratory phase with a senior developer or architect and the trust is that the client is not expecting your standard landing page website. This client, wants the website to be an all-encompassing e-commerce website that has connections with social media, automatically updates product images based on an API driven by a custom content management system (CMS), and expect the e-commerce purchasing to automatically accept payments and print the shipping labels for a customer’s order.

Now, this website has become complex enough that you’re going to have a front-end and back-end to implement with some hardware communication with a printing device. You’re going to need to integrate an API, you’ll need to advise and integrate a shopping cart functionality,  then, you’ll have to develop a method or find a solution for turning a order from the shopping cart into a printed shipping label. This way, the client may simply ship their customers sneakers after a purchase has been made without having to manually create labels. 

As an entry-level developer, this amount of complexity will be overwhelming. And, you shouldn’t feel bad if you do feel overwhelmed with the many requirements associated with this project.

To implement projects like these, you really do have to think about them from a high-level. As mentioned early on in this example, at short glance this project could have been really simple.  The client could have expected a simple website with a few pages that redirect his customers to his address and a contact form. But the project evolved into something greater, and that is why I mentioned there was an exploratory phase with a senior developer. in that exploratory phase, the project evolved into something complex because the senior developer was able to work with the client to understand the real complexity and estimate the project timeline based on their  prior experience and knowledge. Note: This process of exploration, is a part of being a professional and attempting to better understand and elaborate on client expectations so that a project is more likely to succeed. 

So, Eissa, how does this relate to the topic of this article?

Well, the idea behind my example is that I want you to see how not understanding the high level side of software development means that you will be at a disadvantage when it comes to  implementation. Almost every experience software engineer that I know would agree that what really differentiates a beginner from someone more experienced is that a more experienced engineer tends to spend more time thinking about the  project prior to implementing anything. This is why for both software development teams, you have a lead developer or a senior developer on your team that leads the overall implementation. 

On very large projects, you’ll sometimes have multiple teams implementing a large solution with multiple sub-projects that all come together to form one product. These teams are led by someone like a director of engineering and a software architect who will coordinate with individual team leads and managers to construct a complex multifaceted solution. 

Now, why do I say that tackling the problem from a high-level is more important than the implementation?

Well the reality of it is that the person tackling the high-level  strategy for implementation is usually someone with more experience and confidence that is in a leadership position. They have to make decisions with confidence and deal with the repercussions when they are wrong. Therefore, their high-level decisions or very important for the implementation teams. And, therefore they are usually paid a fairly sizable salary