Senior Software Engineer • Former Employee
Pros: - Work on some high-scale systems.
- Decent pay and great benefits.
- The CEO is good.
Cons: - The bureaucracy is very bad. You have to talk to so many people for every little thing.
- The tech stack is cumbersome. Dev environments are down a lot, with tons of manual steps. Tooling is slow and painful. Devs don't get much time to build tooling to make their lives, or their QA lives, easier.
- Processes are very complex, manual, and poorly documented.
- Developer velocity is very slow.
- Code quality is a joke most of the time. Things tend to get shoved together because of a deadline coming up. Frameworks get used incorrectly. Then things get re-written since they become an unmaintainable nightmare, and the process repeats.
- Some management initiatives are a net loss (i.e., required code coverage, absolutely NO rollbacks).
- You have to enter every hour you spend on every project into a tracking system (Rally), which "is not used for performance" but feels like it is. Then you use another tracking system to track code changes (Jira), and possibly other tracking systems (Wiki/Teams). It is an unorganized mess.
- The wiki is slow, and search is very bad. Finding accurate information is difficult.
- Tons of gatekeepers and "onboarding" processes for integrating with other teams. These processes suck. When new infrastructure is built, it is not built in a way to be easy to integrate (i.e., lots of meetings and manual steps).
- The release process is terrible. Use of wikis to keep track of release information and release instructions. The process is not automated or consistent. Some of the releases have Jenkins jobs, but even then you need to add your instructions on how to trigger the job for every release, and a guy in Ops must do the release. Teams can't release without Ops involvement. Releases take a long time and are error-prone. It takes days to prepare for a release and must involve several people.
- A case in point with the release process: it once took 3 months to get out a trivial bug fix that customers were running into (there was a workaround, but still, a bad experience), simply because the release process was so terrible and we have "code freezes." The change was fixed for months in lower environments but kept getting de-prioritized due to the work required to do the release!
- Since releases are so difficult, rollbacks are expensive. There is a lot of pressure to get it right, which means development moves slow. Also, upper management (i.e., 3 levels above my boss) criticize me and my boss if you do end up making a mistake which requires a rollback. Stressful! Sometimes I wouldn't be able to sleep at night because I was worried about a release going bad!
- Since there is so much pressure to get releases right, and it is so difficult, lots of changes end up getting bunched together, decreasing velocity, increasing coordination, and increasing risk.
- Gatekeeping by humans in testing environments! You have access to do stuff in dev, but in QA, signoff (pre-pre-prod), SIT (dev integration), and CAS (pre-prod) you don't have control. You have to make a bunch of Jira tickets to get something done, then you need to ping the person assigned to the ticket to work on it because they are super busy with other stuff. It should be automated!
- Bangalore collaboration is a pain (I worked in the US office). Some work, like perf testing or tightly coupled dev work, is done by a counterpart team in Bangalore. This means you need to stay up anywhere from 8 PM to 12 AM to work with them, while they also have to wake up early or stay work late in order to meet with you (the time zone is about a 10-12 hour difference). I have even seen some engineers from Bangalore staying until 2 AM (their time) just to meet with our team here in the USA (how is that okay for non-emergencies?). What doesn't get done in person must get done over email, so it slows the process even more. The Bangalore teams have excellent engineers, but the time difference makes high collaboration work stressful!
- Lots of penny pinching for projects. I guess it is somewhat normal since companies can't just spend money on whatever, but getting a project funded is a long and painful process.
- So many approvals, including getting rubber stamps from architects that are very disconnected from your projects. It seems to rarely catch problems or enhance the designs (in my experience) and ends up being a big time waster.
- A bunch of TOI (transfer of information) sessions. Rather than having everything clearly documented and easy to find, you need to schedule a meeting with someone to learn how stuff works, almost on a daily basis. This takes a lot of time.