This is a story of two companies that affected the way I view software creation today.
Shortly after I graduated College I started working at a Qualitative Research company call it "Company Q". Company Q is what I like to call a product company (meaning the dev team work on a specific product not contracts), Company Q helps other companies gain insights into what is causing them problems or help them develop ideas for things they want to sell. For example if Starbucks had the best coffee in the world but had problem selling it to black people it would be our job to find out why Starbucks is not resonating with the black community or if Apple invented a new car geared towards teens we would help them find out how to execute this idea using strong reproducible research... you get the idea. There are a quite a number of companies that provide this service but what set us apart was the technology we used to execute this process. This is traditionally a very human intensive process which company Q was able to use technology to reduce the human factor. This was a dream company for a developer to work at, we never really had any serious competition in our space, we had a play ground we called an office and we had unlimited paid vacation (Yes you read that right). The developers here came to work everyday trying to invent the future. Developers sometimes just stayed late and worked on features they thought were cool, they showed it to management the next day and if they also thought it were cool, the feature would stay. For the most part developers had a voice, we did not have lists of stories of how to catch up to our competitors features, we went home everyday thinking about how to change the Qualitative Research space I learned the following things working at Company Q:
- Code should not be shipped until it is entirely complete, tested and polished with marketing campaigns to match
- Deadlines can be arbitrary
- Code was an art, and fostering innovative long-term thinking and creative software were paramount in our business
- You need to predict the future and know what your customers want before they want it
- As a developer, your value to the company was in creating quality code and being on top on the latest technology to know how the changes happening in the tech industry affect our business
After some management changes, Company Q was no longer fun and so I moved on to "Company C". Company C was a Software Consultancy, we dealt with contracts and mainly built custom web applications for Fortune 1000 companies, this was a culture shock transiting from a product company. In Company C we were typically called on to build software for non-tech companies like Coca-Cola and P&G that needed a one off web app to make a process in their company more efficient, or what I found amusing was we also got called by software companies like Google or Intuit to build stuff for their marketing or HR teams because their developers were too busy working on company initiatives. This was a fun company to work at because developers where in the front lines of the battlefield. Unlike Company Q where the sales team where the ones that brought in the cash by hyping our software, Company C the developers where the ones bringing in the cash by billing hours creating amazing solutions for various company problems and upselling these companies to buy more development for potential cost saving enhamcements we have observed. It was an interesting perspective on software because here you could literally calculate how much you have lost Company C by watching that cat video on YouTube, and because the developers are the money making factory rather than the idea machines, it turned priorities I had previously learned on its head. This is what I learned from working at company C:
- Just get something working out to the client, show you are working!
- Deadlines are REAL, people may die, lose their jobs or you can ruin a business if your code is not ready on time
- Code is a tool, it does not have to look pretty, we do not need to care about
the futuremaintainability, it just has to work
- Do ONLY what the customer wants, nothing more nothing less. Definitely not more, they probably should pay for that :)
- As a developer your value is in the number of hours you bill, being innovative and reducing the time for a job is cool for you but not a priority.
I found the priorities of these companies to be polar opposites in so many ways, overtime I found that the secret is to be somewhere in the middle and varies depending on the context of the situation. I found it very interesting how very opposing ideologies on the same thing (software development) and in the same environment can succeed side by side. Like most things in the world, the I found the 🔑 is moderation.