So you want to be a tech lead? Have you ever started a project from scratch? This post will help you learn how to get started so that you and your team can have a successful project under your direction. And even better, have a happy boss that gives you the space you need to work.
Before You Begin Your First Project as a Tech Lead
You need to know what you are trying to accomplish. Is this a project solving a well-defined need? Is it to rewrite an existing application to be more scalable? Is it a proof of concept you’re trying to push to management to endorse the project full time?
How many developers will be working on it? Is it a solo effort or is immediate collaboration imminent? These questions should shape how you prioritize building your project. If you have many people working on the project you absolutely need to make sure it will build on their systems, setup is a breeze (maven/gradle, npm, pip, windows/mac, database installations etc.), and you have features or lines of inquiry that could be worked on. If it’s a solo effort you need to balance showing traction with behind the scenes improvements so that your boss can effectively manage external expectations and give you room to breathe — more on managing your boss later. It’s important.
Lastly, do you know how you will solve the problem? A couple things to keep in mind:
- What frameworks?
- What language?
- What infrastructure will you need? When?
Many projects have a large degree of uncertainty. The frameworks you could use always end up missing a feature once you start implementing and you need to evaluate which one will give you and your team the best chance of success. That’s why in the beginning I recommend you do a flurry of framework evaluations first by looking at the features but more importantly actually build a quick and dirty prototype. Building the prototype will do so much more for your project than sitting around arguing language wars/framework wars with a bunch of developers; that’s not what you should be doing as a tech lead. And your boss will appreciate the concrete evaluation.
Actually Starting Development
Now that you know what’s expected and have an idea what’s on the roadmap for your project you can begin developing. For this example, I’m going to walk through a Java REST API for sports data to be used by customers and external web sites for fantasy sports and betting. It needs to control access to our database, reduce the load through caching common queries, and be easily documented.
I’m starting this as a solo effort and will be adding developers in a few weeks so I will optimize for speed of results over identifying orthogonal features and ease of deployment.
- Spring-boot (API)
- MySQL on Amazon RDS (Already have)
- Swagger (API Documentation)
- OAauth2 tokens
- ORM is still TDB
- Hibernate with Hazelcast
- No ORM?
Notice how I haven’t settled on an ORM and that’s OK. I’m comfortable enough that other Java developers have handled this type of application before (not something you can do as much with newer languages like Go, Python, and Node). As the project takes shape, I can follow appropriate design patterns to make sure evaluating ORM’s while balancing my needs for results and quality code.
Spring documentation is well supported and comes with a project template creator. (While this is Java specific node and python libraries like django have functions like this too).
I’m creating a Maven project with the latest version of spring boot, with rest web modules and the spring security module. I extract the zip and then use IntelliJ “Create from Existing Sources -> Maven” to install.
Next up I’ll add swagger
That’s it. Now you know how to start your first project and are well on your way to becoming a successful tech lead. In a few weeks I’ll touch base and update this post with things to remember as your project matures. First things first I need to start looking into ORM and caching options. As a parallel task a teammate or I could look into how to manage authentication to the API most likely using OAuth2.
Repo for this project here: https://github.com/rogerfitz/sport_api/tree/v1.0