For a given project, you’ve likely heard that whole spiel about you have:
Then you tell a person to pick two. In my experience, this tends to be true, especially when working with tight constraints or smaller budgets. And that’s okay! It’s not a complaint and that doesn’t mean we can’t still do a job well done given said constraints.
But this post is not about that (although it might be fun to discuss). Instead, it’s about a follow-up question that I’ll occasionally get around this same topic:
Once you’ve landed the project, what is development? How do you know how to solve problems for different people?
And I think, at first, it’s an interesting question. I mean, if we all went into a project not knowing what we were doing – regardless of the industry – then that’s a little scary.
In programming it’s its own beast, isn’t it?
I mean, we know what the client wants and we know we can build it, but how do we express that we don’t necessarily yet know the code we’re going to write or how we’re going to write it?
What is Development?
I bring this up because there are times where I talk to beginner developers who are curious about the whole development process: From concept to delivery.
And I love that because these are the people who are really eager to figure this stuff out (for lack of a more formal term).
They have the sense to know that development is not about Googling a solution, copy and pasting code, and then seeing if it works.
What is development? It’s not that.
Instead, programming is about understanding:
- the problem domain,
- the platform on which you’re building a solution
- the tools with which you’re working,
- that a program is made of up components assembled with your tools using functionality provided by a platform.
So when it comes time to implement a solution, we have to figure out things like:
- how are we going to organize our classes and namespaces?
- how tightly coupled are the components going to be?
- where will our assets reside?
- do we need to split things into libraries, use third-party libraries, dependency management, etc.?
- what about some type of testing?
- what type of data structures, caching, and performance-related tasks do we need to implement?
And there’s more. But the thing that programmers don’t often publicly say is:
I’m not sure how I’m going to build it.
Instead, we know we can do it because it’s within our skill set and we’ve done this before. Furthermore, there are times where we will take a project and try to implement a new technique or technology we’ve learned. And we have to figure it out.
So What Is Development and What’s the Point?
So the point that I’m trying to make to those who are aspiring developers is this:
We don’t don’t always know how we’re going to build something, but we know the languages and tools that we have and the features they offer. We know those features can help us assemble a solution. And sometimes we’ll introduce a new technique and technology for the sake of learning something new.
If you’re someone who’s just starting out with programming, asking what is development, who’s learning a new language or framework or foundation, or something who is just looking to see “how do programmers know how to implement what they are implementing?”
Understand that much of what we do is spent in figuring out the ways to assemble the solution using the tools and understanding of the language that we have. We rarely solve the same problem twice – if we do, we generally create a solution we can reuse.
But that’s a topic for another post.