After spending 4 years working for a software agency that built websites and apps for other people I wanted to try out working for a software company that built their own product. I recently hit my two year anniversary at the product company, and I'm here to talk about what it's like to work in these two different environments.
First, some background on the two companies. Both companies are fairly small: the agency being about 25 people and the product company closer to 150. The agency has one office everyone works from, and the product company has a main office in the US, an office abroad, a satellite office, and several remote workers (like me). The agency is almost all developers with a couple sales people, project managers, one marketing person, and couple support staff. The product company has quite a few more non-developers: more sales people, product managers, a marketing department, a customer support team, and a managed services team.
Working on something you don't like? If you're at an agency, wait a few months until the project ends and you can start something completely new. At the agency, I worked on projects for organizations ranging from a local union to a Fortune 500 company. Many projects started as beautiful blank slates just waiting for my code. There's nothing like spinning up a brand new project. At the product company, I've spent the majority of my time working on the same application, which luckily for me, I enjoy a lot.
This is a pro and a con for both types of companies.
As a lead dev at an agency I regularly met with the people who would be using what I was building. It's obvious why less client interaction would seem appealing, and it definitely reduces stress and gives me more time to focus on coding. But it came with some benefits: firstly, I built connections and relationships with some of those clients. I practiced my communication skills. The biggest benefit was that working with them directly on their apps gave me insight onto how they were using them that I never would've gotten without talking with them directly. My user insights at the product company come second-hand from customer support team members or tools like Fullstory.
One of the best things about working at the agency was the feeling when you show the final product to the clients and they love it. You built what they wanted and you can get that feedback right away, which is more instantly gratifying than deploying something and waiting to see if the users are actually clicking on the right things.
At the agency, we wanted to try typescript. When the next project came up, we used typescript. At the product company, people were curious about typescript. My experience was fairly positive. We decided next time we started a new product, we'd seriously consider using typescript. The opportunity to create something brand new from scratch with typescript has not come up. And even if we do, we know we might be working on that product for years to come--do we really want to commit to typescript? We also have to consider how much more difficult using typescript might be when on boarding new employees. There's a lot more to consider.
On the other hand, at the agency we wanted to use .NET Core. The next project came in and the clients were very technical themselves, and wanted us to use ASP.NET, because they were familiar with it. At the agency we often had requirements to use specific tools because the company CEO heard about it somewhere. Product users usually don't care so much what tech stack the software product is built on as long as it works.
One of the biggest culture clashes I experienced coming from an agency to a product company was the difference in how deadlines are treated. At the agency, we had paying clients expecting certain things to be done by a certain time. Deadlines were written in stone. At the product company deadlines felt more like they were written in pencil.
At a sprint retro I expressed distress that we weren't going to meet a deadline for a particular set of features. I was told not to worry, the deadline had been removed. Deadline? Removed? These two words did not belong together. I learned that deadlines were often created somewhat arbitrarily and then ignored by the developers. I've worked with the team to help create a healthier relationship with deadlines: creating them based on estimates using team velocity and actually paying attention to them. I like having them not as rigid, but making them meaningless removes their motivation. Other product companies are likely more deadline-driven, but it doesn't compare to an actual customer expectation.
When I started at the agency, everything was pure waterfall. At the end of a project, we'd present this result the client hadn't seen before in its entirety and then wait for the long list of things we did wrong. It didn't work. I was (still am) a Certified Scrum Master at the time and I presented the concept of agile and the scrum methodology to the company. The agile concept was easy to sell: we needed to show in-progress work to clients sooner so changes could be made iteratively instead of reworking large pieces of a project at the very end. We tried out scrum briefly, but with clients paying for work estimated in hours and being billed by the hour, the company was very hour-focused and couldn't leave that behind. Instead, we developed a modified approach that worked better with prescriptive budgets and timelines.
At the product company, scrum is followed almost by-the-book. Occasionally we break the rules, but there's always a good reason.
I've been working on the same application for two years and I'm the tech lead for the product. It's mine. At the agency, I felt ownership of projects when I worked on them, but after handing them off to the clients and time passing, the ownership felt less immediate. It went from "this is my project" to "that was that app I built a couple years ago." It wasn't something I was working on improving anymore. This doesn't mean my current product is perfect: far from it. I'm constantly improving user experiences and adding new features.
I'm not here to say what environment is better. I love continuing to improve a product I know inside and out, but I miss the instant feedback of showing a finished app to paying clients.
Would you rather work at product company or an agency? Let me know your thoughts in the comments!
Cover image via the wocintech stock photo library.