The one with tech leading
Act 1
Carlos switched his job from WeShop, an e-commerce company to AtPoint Health, a startup that serves health care content and pharmaceutical ads at clinics. It has only 100+ people, and Carlos is the second engineer that joined the platform team. Carlos started to get the sense of the culture and its tech stack.
The lobby is bright and ambient music is playing in the background. The girl at the front desk gave Carlos a broad smile as she showed him a chair in the lobby. She has a long, thick brown hair and big dark eyes, she reminded Carlos of the actress from Black Swan. It is orientation day at AtPoint Health, 10 more employees joined this booming health care startup today, including Carlos.
Carlos first heard about AtPoint Health two months ago when he was still at WeShop, an e-commerce company at the other side of the town, as the software engineer. He was at WeShop for a while and thinking about a change. His friend Liz is a technical recruiter, and Carlos reached out to her. Coincidentally, Liz is now working at AtPoint Health and it was one of the companies on Carlos’s list, the two met up for lunch. And from what Liz told him about the company, he’s pretty happy and excited and happy about the company culture - it’s young, it’s ambitious, and it’s hiring a lot of people. On the other hand, WeShop has been stagnant, there’s no exciting new product, and most of what Carlos do now is support and refactoring. He’s definitely looking to something new and to grow.
The first day Carlos walked around the office space - it’s a small floor yet carefully decorated. There are super heroes on the way - cat woman, bat man, hulk etc. Within the cafeteria, there’s a big slogan that says “what’s your superpower?”. The on boarding staff Phil, a 30-something with gregarious energy, told the new employee that the founders think a company’s growth as “hero’s journey” - a hero has a vision and embarks on a journey, the hero faces extreme obstacles on that journey and getting their ass beat, and eventually hero conquered the obstacles and came at top, and grew stronger as the result.
Carlos also learned the stories of the two young founders - Patrick and Molly. Patrick came from a family of doctors and saw the lack of information at clinics. Being good friends in college and being entrepreneurial, the two launched the business while they were in school and continue to work on it after they graduated. It took them 6 years to finally make a breakthrough when they started to launch their own custom made devices and ship them to various clinics throughout United States. To Carlos, it is a very inspiring story and it showcased the entrepreneurial spirit of this country, and he’s excited to be part of this journey.
AtPoint Health’s business primarily consists of two components - the devices that are in the clinics and hospitals, and the server that talks to those devices. The devices have Android software installed on them, and the server gives them instructions about what content to show, and how to adjust the volumes, etc. Carlos is going to join the developer teams that build new things on the server. He’s excited about that because he will be the second developer that is the on the server side team. He met up with Brian, the first developer who has been working the server, and Brian told him that there are a lot of work to do.
“The company started this project with an offshore company in India,” When Carlos started to settle in next to Brian, Brian started to give him an overview of the project side codebase, “and I am the first developer they hired when they had money and decided to move the codebase back to the U.S.” Brian said with a sense of pride. Carlos felt that Brian is a bit egoistic, but just nodded and listened to Brian’s comments. He figured that he will have time to settle, and really learn how to operate within a startup.
Act 2
The company continues to grow rapidly, the existing platform has problem scaling and Carlos identified one area to improve. The company makes a big bet on the new service-oriented architecture.
AtPoint Health continues to grow rapidly. Every two weeks the company welcomes a batch of 10 to 15 people. Most of them are in sales or operations, but slowly more engineers start to join as well.
For the first 2 months, on the server side, it was just Carlos and Brian. The two worked on refactoring and new features on the server side without much guidance from the rest of the company. Carlos used to have product managers and test engineers working side by side at WeShop, although it felt a bit uneasy to mostly work solo, it also felt kind of liberating.
The server code is written in Ruby on Rails, a popular software framework that allows people to build features quickly. It’s a highly flexible framework with less restrictions (e.g. no type checking). Because it was first developed by off-shore team about two years ago, and the business has evolved dramatically since then, the code is like a teenager’s messy bedroom - lots of stuff in there and very unorganized.
Every now and then, Brian would grunt and complained to Carlos on the badness of the code base, “It’s just really poorly written.” Brian often says it without frustration. In Carlos mind, messy codebase is a symptom not a cause, the team who wrote the software probably made decisions with limited informations they were given, and as the business requirements change overtime, the gap between their understanding and the reality widened. In addition, having the developers being off-shore and not part of the core team didn’t help.
One big defect Carlos noticed is that the server is trying to do too many things - in this single codebase, the server handles various core functionalities around the device. Each physical device is deployed to a medical clinic or a hospital, and it runs Android-based applications to serve various needs: showing video contents, displaying static pictures, allow interactions with a 3-D human anatomy model etc. And the server is the commander for each device throughout their entire lifecycle - from registering a device when it comes online, to controlling display configurations and sound volumes, to determining what to display on a device at any given time.
What should the server be in charge of? What are servers they need to build? These are the questions Carlos kept in the back of his mind as he wrote out more features within the existing server code. One feature the business asked is to be able to deliver a special customized video playlist to a specific device. Right now the videos are delivered by categories, and to specific clinics or health systems. However, the business wants to have the ability to deliver a selected group of videos to a specific device.
As Carlos started building this feature, he noticed that the way media content delivered to a device can be separated from the rest of the logic that is in the code. For content delivery, besides content, the only that it needs is a way to identify a device. And if they can identify a device, and server knows which clinics or hospital it belongs to, then it’s easy to deliver content at different levels - be it a device, a clinic, a group of clinics, or a group of hospitals.
Excited, Carlos started to draft out his technical vision during his spare time. He knows that any big changes like this takes time, and he can’t delay the current feature work in order to make this big change - the business will view this as a ‘significant delay’ on feature delivery, or even regression of the current functionality. But Carlos knew that in the long term, having them separated is the right call, and with his excitement in making his dent at this startup, he’s willing to spend extra time for work. Carlos’s boss, Lee, is a middle aged man with a can-do attitude. Carlos and Lee has personal face-to-face meetings every two weeks where they talked about how things went for Carlos at work. The first four months passed, Lee was very pleased with Carlos’s work - Carlos picked up quickly and hit the ground running. Lee is pleased to find out that he doesn’t have to ‘supervise’ Carlos, and overtime Carlos has gained Lee’s trust.
As Carlos implemented the feature around customized videos, he started to form the idea to break content delivery off from the existing code and have it form its own code. He brought this up to Lee, further explaining that media content is a separate business domain all together, and in the longer term should require separate attention, and growth.
Lee agreed with Carlos that how the company delivers video content can be better, however as a manager he lacked the visibility to fully understand how the code is structured. Lee’s instinct told him that Carlos is right, and he started to think how to move forward based on Carlo’s feedback.
Six months passed quickly, and Carlos felt like he had been at the company for more than 2 years. It’s the beginning of a new year, the whole engineering team just came back from vacation and Lee scheduled an all-staff meeting.
“Hope everyone had a great holiday!” Lee said cheerfully, “And I hope everyone is ready to come back and tackle more challenges at AtPoint this year!”
The whole crowd nodded, wondering what to come next.
“As the company grows, our technology stack starts to crack because the way it was developed isn’t scalable.” Lee said as he looked at the crowd, “So this year, we are moving to more service-oriented architecture, and we plan to break out media content delivery and device registration into their own services.” Lee went on explaining that Brian will be heading the initiative of device registration, and Carlos will be heading the initiative of media content delivery. Carlos felt his heart pumping fast with excitement.
“Service-oriented architecture is a buzz word, and moving from a single code base to multiple services isn’t easy to do.” Lee looked at Brian and Carlos, and then to the rest of the crowd, “it’s a big bet that leadership agrees to take, and we know that such architecture will benefit the company in the long term. We have a great team, and I’m certain that we can achieve it this year!”
Carlos nodded at Lee’s speech, he’s excited and nervous at the same time. It is a great opportunity for him to build out the vision from scratch, and he’s looking forward to the emotional roller coaster ride ahead.
Act 3
Carlos’s team grew and he became the natural tech lead for the team. However, as the system grew, more components need to be built across multiple applications, and politics between developers kick in.
To start a separate application isn’t easy. It’s not so much how to start an application but what to build within it. Because the company has no context or architecture prior, Carlos found that he had to find out many answers himself - e.g. which data models to include in this application, and how can devices interact with such services, etc.
One nice thing is that Carlos get to name the application or project, he named it “Content Delivery Service”, he chose the name because it indicates what the application actually does. As the company grew, Carlos also got another developer onto his team, Chris, and the two can discuss and bounce idea off each other.
To start the data modeling, Carlos drafted out a document that outlines domains, and then go deeper into data models and specific attributes on each data model. Chris has a lot of development experience too and quickly started to contribute to designing the system as well. The first few data model creation went extremely well - they are obvious and with little outside constraints, and the first few months Carlos and Chris really enjoyed the project collaboration and working on a green field project.
One thing Carlos felt uncomfortable about is the lack of direction. Sure people at the company understand the big picture behind the Content Delivery Service (CDS) - to deliver media content to devices. But no one seems to be in charge of the specifics. There are numerous times when Chris and Carlos have specific questions about CDS, for example, should they limit the size and type of the pictures, and no one can give a clear answer. Meantime, Carlos’s Lee often asks the timeline of the project, when the project can get done. Both Carlos and Chris feel the pressure to “get CDS done”, but in order to do that, they need a clear big picture, as well as detailed planning for specifics.
Proactive as Carlos, he decided that he will hash out the specifics himself. If no one can give clear direction to the engineering, then the next best thing is the engineering comes up the best product decision possible, document and share it, and then implement it. So Carlos spent the next two weeks talking to content managers, sales people, and the rest of the product team to understand the current pain points, take notes, and work on a document that prescribes a solution. It takes a few rounds of trial and error for Carlos to get a hold of it, but slowly he started to enjoy the exploration. In addition, both Chris and Carlos feel clearer about what to build next, and the development cycle of CDS starts to hum along.
Two months passed by quickly, and Chris and Carlos had a working product that covered basic requirements - it can store videos and categorize them in the database and the cloud (AWS S3 storage), and it has a UI interface that allow users to arrange multiple videos into a playlist. They were quite happy with their progress, and so is their manager Lee. It felt like everything is finally coming together. Lee asked how soon they expect CDS to go into production, the business people have been eager to use this new system to improve their work efficiency in scheduling videos to devices.
“Well, before we go into production, we need to perform end to end testing first.” Carlos explained, the new system relies on the existing system to provide device information, and such system integration has not been tested yet.
Lee urged Carlos to perform end to end as soon as possible. The term “ASAP” has been thrown around a lot these days. Carlos also heard that AtPoint Health is raising another round of funding, which can explain the pressure of getting the new system launched - the managers need to show the investors that the system can scale and grow more business.
Carlos scheduled a meeting with Brian and Chris right away, aiming to draft out a plan for integration testing between existing system and CDS. Both Carlos and Chris felt the time pressure to start ASAP. As stressful as it sounds, Carlos is also excited to deploy an application into production that he helped build from scratch.
Brian, however, was not as enthusiastic. Since Chris and Carlos have been commissioned to work on CDS, Brian has been the solo developer on the existing system, which means that he is drowned with all the support work he has to do. Adding another integration work on his plate is the last thing he wants to do, and he questions the timeline of CDS as a whole.
“This project didn’t have a clear objective from the beginning,” Brian said with a semi-frustrated tone, “Frankly it came to me as a surprise that we want to integrate the two systems now.”
Chris and Carlos both sat there silently, neither knew what to say next. Should they get Lee involved? Carlos felt that this can be resolved among engineers. After all, Carlos also had context on the legacy system, so he offered to help in writing the integration component within the legacy system.
“That’s fine, and I can help review the code. Let’s make sure we do this right.” Brian nodded, Carlos speculated that Brian was happy that he didn’t have to write any code, but wanted to make it seem like he made a great contribution. However, Carlos bubbled up his emotions and determined to transform such frustration into motivation. “I will succeed with or without Brian’s help.” Carlos left the meeting thinking to himself.
The next few weeks Carlos decided to work weekends. He is single guy living in the city so besides calling off a few dinner or drinks with his friends, he didn’t have to adjust his schedule much. While during work hours he works on specific tasks in CDS, during weekends he will continue coding the integration piece in the old system, and by Monday he will have code reviews ready for Brian to sign off. After two weeks of this extended routine, almost all parts are ready for end to end testing, and Carlos felt more like a zombie every time he walks into the office - he definitely feels that burnout.
Three weeks after that meeting, the whole engineering team is ready for end to end testing. To make sure everything goes smoothly, Lee booked a big conference room for three days that hold 10 plus people. He brought fresh fruits, coffee, and doughnuts for the whole team. Everything is set in motion.
Brian, Chris, and Carlos are all present in the meeting room, and they have one goal only - to schedule a playlist of videos on to a testing device in the meeting room using CDS. In order to do that, the legacy system needs to let CDS know that such device exists first, and when CDS schedules the playlist, it needs to let the legacy system know about the new playlist and send it to the device.
No one has expected some bugs that were discovered: for example, even though the legacy system is talking with CDS about device information, but the format in which legacy system used is different from what CDS expected. It was an ambiguous bug, and given legacy system is lacking logging, for a while it remained mysterious why both systems reported good communication but no device data is synced. Brian had to hard code a few system printing statement and deploy the system multiple times before they eventually find the bug.
Throughout the whole time, Carlos was in a “war state” trying to get everything working. Sometimes he felt that he was in a maze without a clear direction to go, but he also felt that he was getting close to finding a final solution. Sometimes Chris and Brian will have some findings that are helpful, and they discover random things here and there. Lee will periodically pop up into the meeting room from his busy schedule to check on the progress. The whole team didn’t solve the everything in the first day, but on the second day, they finally got a device a new video playlist from CDS. The team cheered, Carlos was happy but at the same time exhausted. CDS is on schedule to deploy into production, it was a huge achievement for the team and the company.
That day after work, Carlos ordered himself a big round of Thai food, turned on Netflix and watched his favorite show “Friends” while eating Thai chicken curry. After that, he laid down on bed happy and every soon fell asleep. Later on he reflected on his journey of building CDS as a tech lead - tech leading is so much more than just writing code, it’s also about having the team of engineers on the same page, and foster an environment where collaboration is encouraged and welcomed. Carlos felt that there are many things that he can do differently as a tech lead, for one, he could have shared more about how he felt so that he didn’t have to work on weekends, he could have communicated his plans better with Chris, Brian, and Lee so that together they can march towards the same goal.
Carlos is glad that he had this experience, and felt hopeful for the future journey in tech he is yet to embark on.