Pros
(line breaks are removed, sorry for the wall of text) The main aspects of the office that keep me here are the variety, constancy, and independence of the work. There is a strong commitment to working while you're there, but once the day/week is up, there's no pressure or long days, the work will still be there to do tomorrow. There's an exceptional level of independence, ownership, and progress that's fun to be a part of. The hours are flexible outside of some core hours (10.30-3.30, most clients are production or 9-5 oriented, so that needs to be supported within reason). There is always work to do and you're generally given free reign with how to estimate and implement - the frameworks, technology, and implementation specifics are open for discussion at all points. It's very rewarding to be able to sit down with tasks every day and have input on both client workflow processes and technical development for a product, often from the ground up. There's obviously cases where that's constrained or where there's awful legacy stuff to maintain, but that's any job. I'd say 90% of the job is development, 10% documentation/estimation/maintenance tasks. We do mostly .Net (app and web), mostly SQL server, some Android, some iOS, some embedded systems, some C++ apps, some Java, you name it, and they're generally open for all developers to work on, as the schedules become available. The variety of tasks are everything from personnel or facility management, to sales software, to heavy duty manufacturing QA, to embedded systems, and more. The pay and vacation are competitive. The workplace is generally very quiet, which I personally enjoy. The hours and actual work are fantastic - I've never been asked to do overtime here, though when there's work to do, it's open if you ask for it. There's odds and ends that are little perks, such as lunches for everyone's birthdays and hiring anniversaries, we're building a gym in the backroom, work from home a day a week, and little things like custom mice/desks/monitors are never an issue to get ordered. There's also some definite allowances to figure out best practices or new technology on the clock as well, which has helped when trying to figure out what the best choice for a particular project would be. Overall, I find it an ideal place to work. I left previous work because I found that work was too often replaced with meetings, or that there just wasn't enough to do, or other things like that. Here, you get to know clients personally, you take ownership and responsibility for the development, have a huge variety of work to do (technical and workflow wise), and you have a great work-life balance.
Cons
The primary challenge is that the volume of work that comes in and needs to be juggled, often times with a short schedule but insufficient clarification, can be frustrating at times. We have a lot of active clients and often times we are both trying to understand business processes as well as figure out the technical pitfalls of one, when a more urgent request comes in from another, which requires all the mental work to be unloaded and re-loaded. It's not all the time, but it can be challenging, particularly as we often have direct phone and email contact with the client including those in production capacity. There is also a high learning curve to the workflow process and independence, though disappears with experience. For example, work may be handed off with a few sentences for a client with whom you have limited interaction with and there's an expectation to "figure it out" and come up with a solution, which can make it a tall barrier early on. It can take several months of work on a single client to feel like you've figured it out, and if you've got 4 or 5 clients crossing your desk every month, it can be overwhelming. This is something both management and the senior developers can improve on. The benefits are on the more limited side. There's no 401k, but there is a SIMPLE IRA with contribution %s, which is close; there's also no HSA or FSA, and while there is a group policy for health care, it's on a "pay and partial reimbursement" basis - I'm not on that plan, so I can't speak to the pros and cons of that. With that said, I find the hours/pay/environment make up for it - a previous company I worked for was one of the top Fortune companies with exceptional benefits in all areas, but it's balanced with the other aspects of large and involved companies. This is a small company - if you're looking to develop code, manage projects, client interaction, learn new software, it's great; I don't see this as a direct transition spot for project management careers (at this point).