I’m too slow to be a good developer…

I’m a college dropout. I had decent grades. Problem is, I ran out of money.
I’m in that rare category of people who actually can’t afford to finish school.

After I left college, I began working at a foundry (80 Acres), doing landscaping. It was hard work, but it was satisfying. I got to work by myself, the work kept me in shape, and it paid ok. (For a manual labor job, 10 -12 USD an hour.)

Eventually though, the people I was working with found out that I was intelligent. This was unfortunate, because I was only able to enjoy landscaping for about six months. They pay more now, since I’m working in the IT department, but only about 3 USD more per hour.

They also talked me into building a RoR application for them. Essentially, it’s an application that makes tracking preventative maintenance of the factory equipment more convenient. It works pretty well.

However, I’m not happy with it. As more and more requirements have been added, the application has grown. It started out simple, but now I have added role based authentication, charts and graphics with javascript, an alert system using twillio, a few small pdf reports, qr-codes, etc. The list goes on and on.

There are now more than thirty models in this application. Despite my best efforts, I am finding this app impossible to maintain. I tried TDD, but I just can’t keep up with it. Between trying to write tests, maintaining backups, maintain the IT infrastructure at work, and coding new features, I’ve have been finding it increasingly hard to maintain this application. I’ve simply been unable to write documentation, and work fast enough.

I feel completely inadequate. I simply can’t work fast enough to keep this application up to the standards I would like. I’m already a perfectionist, which doesn’t help at all.

Sometimes I waste hours writing simple view code, trudging through it, when I really would like to be working on something else. I’ve tried to keep my code as DRY as possible, but I find that the number of unique features I’m expected to worry about overwhelming.

I often work on it during personal time, but It’s still not enough. Sometimes I wonder how large enterprise apps are ever finished. If I was faster I feel like I would be finished already, but I just can’t seem to make any ground.

I’ve been looking for another job, intending to continue nothing but the bare minimum maintenance for this application. (Without requests for new features, prawn reports, etc.)

However, my resume has little work history and never goes anywhere. I never get called back. I couldn’t even get hired at Best Buy.

I don’t know why. I’ve been tinkering with tech since I was 11 years old. I began playing with Linux since I was about 13, I have built my own computers, and started programming at 15. Yet I simply can’t even find a manageable support job, let alone a developer position.

Everyone says that their are lots of jobs available in tech, but I’m starting to believe otherwise. I see people getting hired every day for lower stress, easy jobs like lawn care and data entry, and yet, I can’t even find one of those.

I’m not even that good of a developer anyway. Sometimes I feel like a framework-pusher, unable to make a meaningful contribution.

1 Like

Thanks for sharing your stuff with us. Regardless of the rest of my feedback, I think people sharing their struggles is very valuable.

I think your description of working with tech is accurate, and the struggle with pace reflects my experience as well. There’s something about the intangible nature of an application that artificially inflates our expectations to cope with it, I think. I wouldn’t judge you as slow, it sounds like you have grown a large application for one dev and those simply take time to maintain. Every new feature is not something that’s done and finite, it’s one more thing to care for.

I sometimes wonder how large enterprise apps are ever finished as well.

I’ve posted this before, but I collected many of my thoughts I use to encourage myself about working with tech in this lightning talk and you may find it useful too: https://www.youtube.com/watch?v=i4cryg-q_YM

As far as getting hired - there is a bit of weirdness within the industry. Everyone needs more devs, but then the bar can be rather high for hiring people given (perhaps) the same sort of pressure to get more balls in play quickly.

I will encourage you, if you haven’t much, to try and build up some community around developing - hiring decisions are weighted by prior experience with someone, whether or not that’s fair. Whether that’s through local user groups or online through support forums or sites like StackOverflow or in open source projects, gaining some familiarity among other people can help. Obviously struggles with depression can make this all the more difficult, and I don’t think there’s any easy answers there.

Thanks for sharing. Reading your story is relieving, because it’s nice to know I’m not the only one with these feelings and struggles. I started out a very small company with little room for self improvement and no code quality control.

What you’ve done takes a tremendous amount of effort, and I don’t doubt that you have some good skills. Building applications is hard, and doing something of the size you’re talking about, on your own, is a huge accomplishment. That’s a massive first step, and even if it is an ugly, tangled mess, it works well enough to make other people’s lives easier, so that’s a big win.

I know I frequently get caught up in the software craftsmanship side of things - where should this go, how should it be written, what kind of pattern to use here, am i missing an abstraction. We focus on these things for good reasons, but at the end of the day what matters is the impact your software has, not it’s internals. It sounds like you’ve made a huge impact, so revel in that. Remember that you’re doing stuff that most people around you can’t even fathom and you look like a wizard. No need to pull back the curtain.

As for becoming a better programmer, I’ve found nothing better than working with another person. Pairing is the most valuable tool that I didn’t learn until I had been programming for 5 years. Having people look at my code and tell me what they think. Feedback. You can toss and turn over code a hundred times, but until you get someone else’s ideas your stuck with just your own. Reading books helps, but seeing someone work with code you wrote, or watching someone else code and ask them why, those are the best learning experiences.

If your in a city, try finding any programming meetups, or maybe a hackerspace. Even if you can’t find one for your language, find something. Ask people what they’re working on and getting code walkthroughs from them. Pick people’s brains. This is the hardest for me, as an introvert with some social anxiety, but I would not even be close to the programmer I am today if I didn’t interact heavily with people, people that were also interested in growing and moving forward.

Enterprise systems aren’t built by people in isolation, it’s all teams and meetings discussing architecture, trying it multiple ways to see what works best, testing, rewriting, starting a brand new system and swapping out the old one. Don’t imagine them to be flawless, because the warts only get bigger.

No code is perfect, everything has warts. Everything. It’s OK.

Find a mentor, do a code review with them. If you don’t have anyone you can think of to be a mentor, or fail to connect with anyone at a Meetup group, let me know.

I’m really happy you opened up about your struggles here, CMMS-Dev. As someone who’s built some of the enterprise apps you wonder about I have a few thoughts…

First, I can’t help but wonder if you’re underestimating what you’ve done, and perhaps have unreasonable standards for yourself. I know you’re not feeling this way, but it sounds to me like you’re doing an incredible amount of work and have accomplished a whole lot, especially for someone who (it sounds like) is mostly doing this solo and self-taught. You sound like a real self-starter with a lot of attention to detail. Sure, it might be kind of getting in your way right now to be a “perfectionist”, but I suspect you might be very surprised at just how unproductive people are in large companies and large teams. Again, I don’t know enough about you or your app to be able to really “measure” it, but golly, something tells me you’re doing a heck of a lot, probably multiple peoples’ worth of work.

Regarding the resume and job finding, I think getting that first technical job could seem incredibly difficult. I think chrismo’s ideas about stackoverflow and open source projects are really good. I might humbly add that getting some help on the resume could be a really good idea. Sometimes when we’re feeling down on ourselves it can come across in our writing, too – even “factual” things like a resume. Also, people with light work history often benefit from resumes that are more skill and attribute based instead of work history-oriented. I’m not sure where you live, but there are often local resources that can help you hands-on with that too.

Anyway, thanks for sharing your story!

I agree with @dnoor: because you haven’t worked in the industry, you are being way too hard on yourself. I’ve been a developer for about 15 years and have built hundreds of apps, some of them “enterprise” sized and you are giving us way too much credit. Here’s my perspective on some of what you wrote:

However, I’m not happy with it. As more and more requirements have been added, the application has grown. It started out simple . . .

That’s the nature of the work. Find satisfaction in building something that gets used. Many (possibly even most) programming projects never get completed, so you’re doing great. The problem is once you build something useful everybody wants it to do more and they each have a different itch they need scratched. The classic example is “throwing together a quick prototype” of the future Grand Application. Once the prototype works at all, it gets launched as the app and then you build from there. You never get a chance to build something to completion before it starts getting hammered on and changed and that’s ok because the requirements you start with never turn out to be perfect. Needs change but you also discover some requirements were poorly conceived or badly stated.

Despite my best efforts, I am finding this app impossible to maintain. I tried TDD . . . trying to write tests, maintaining backups, maintain the IT infrastructure at work, and coding new features . . .

That’s not your fault. I have a lot of trouble maintaining focus and keeping on task. Instead of working on what’s most important, I tend to tackle what just got thrust under my nose or I try to knock out a bunch of small things in the hopes of carving out time to work on the bigger items. Rarely works. It also sounds like you have way too much on your plate and you need to push back to someone to get help with all the jobs you’re doing. You can’t be the maintenance and new feature developer and the QA person and the sysadmin all at once. The jobs are inter-related but they require different skills and you need to focus on one at a time. Try to off-load the QA and sysadmin work or find a way to wear one hat per week (or, failing that, something like Monday & Tuesday are bug fixing, Wednesday and Thursday are new features and on Friday I tackle sysadmin stuff). Always remember the second line to “Jack of all trades” is “master of none”.

Given we all work in the real world, if you’re not able to off-load your work I have a few suggestions:

  1. Script everything you can. For sysadmin tasks, script everything. I work in Python so I do this in Fabric but you could use Capistrano to do the same. You do a task by hand once; the second time it comes up, script it. Takes a little extra time but then in the future it takes no time and you make 0 mistakes. Often you can craft the script by just looking at your bash history after doing the task and turn that into a script.
  2. Stick with TDD. It’s the one thing that keeps me sane and makes me feel less stressed because I know if I write a new feature that breaks an old one the tests will let me know. That gets you off the treadmill of write new feature, debug new feature and debug old code you don’t remember. Using TDD plus good code conventions makes documentation a lot less work and less fragile. I don’t write a ton of formal documentation: I name functions and variables and classes well, put in a docstring when the function needs one and a comment when it’s not obvious what I’m doing (all of which comes with experience, but you get the idea). With that and a decent set of tests you have a safety net and a way for new developers to ramp up if you get hit by a bus. Remember: you don’t need to test everything, you need to test what’s important. Telling the difference is hard so err on the side of writing additional tests, but don’t kill yourself and don’t feel you have to obey the strictures of the Church of TDD. If you need to have real data in your tests, ok. If you don’t like mocking objects, that’s fine. Just write tests. Even a set of functional tests using Selenium to open your app in a browser and exercise it is a huge safety net.

I feel completely inadequate. I simply can’t work fast enough to keep this application up to the standards I would like . . . Sometimes I waste hours writing simple view code, trudging through it, when I really would like to be working on something else.

Don’t feel inadequate. You can’t focus on some Platonic Ideal of How This App Should Be. Focus on making it better. Some of my most rewarding work has been on menial crap. I can’t think of anything better than building a small app that replaces drudge work. I love knowing my app means some poor secretary no longer has to manage a stupid Excel workbook on a shared drive where people are supposed to log stuff to it weekly but never do and she spends hours each week managing it. I made her life better. The app might be a total mess of spaghetti code and a bunch of sins swept under a carpet, but that’s ok. If it works and makes life easier for users, that’s a success. You’re right to be worried about code quality because it makes your life easier: old apps are easier to maintain, new ones are easier to write, but the end goal is whether the app works for the user.

I’m largely self-taught myself, but after a few years I was lucky to run into a set of more experienced developers who taught me a lot. Maybe the best thing any of them did for me was to hand over his copy of Code Complete; it was written a long time ago but it’s still the best book I’ve come across for teaching best practices and how to get organized and make things easier. There are a lot of “meta” books about programming (about the act and not working in a certain language) and the ones that are still popular after a decade or more are worth reading. Peoplesoft and The Mythical Man Month are two others that helped me. TMMM was frustrating and scary in equal measure because the chapters were about the exact things I was doing wrong and my company was doing wrong and the book was written 50 years ago.

Coders like to see themselves as brilliant members of a select guild, but it’s crap: we work at a job just like everyone else and the people who care about their work produce better products. You sound like you’re one of them and just don’t know it. It’s a long journey and I haven’t gotten all that far myself but reading your post I see a lot of myself and the stuff I struggle with. Try to find quiet time and quiet places (even if they’re really just quieter than normal). When I worked in an office someone taught me a trick you may be able to repurpose: all our meetings were scheduled in Outlook, so if you needed to carve out big blocks of time to work, mark whole days as already taken. Find ways to carve out large blocks of time.

When I’m completely overwhelmed, I make a list. Not something in Evernote or in a README, I get a sheet of paper and write down everything I need to do. Don’t worry about prioritizing the list, just write the items down. No paragraphs, no sentences, just 2-10 words per line. Then rewrite the list to organize the stuff into logical groups, clarify and maybe add a bit of priority and set the list next to you and work. There’s nothing better than seeing the list more than half crossed out.

They pay more now, since I’m working in the IT department, but only about 3 USD more per hour.

This is the part I don’t like. There’s a thread running through your post that sounds to me like you don’t value yourself as much as you should. Well duh, none of us would be writing here if we did, but my concern is it sounds like your employer is taking advantage of that. US$15/ hour for someone who built and maintains a useful app and does sysadmin work is ridiculous. I don’t know if you can really negotiate a proper rate at your current job since they have an existing image of who you are. It’s worth a try, but have a backup plan. And the backup plan is the hard part, because you’re going to have to self-promote a bit and sell yourself as more than you see yourself as. I agree with everyone else who suggested making a resume from Stack Overflow contributions and open source projects. It’s hard when you’re starting out.

Honestly, if I was still at my old job and hiring new developers, you could put this post in front of me and I’d give you a look. One thing I’ve learned over time is job interviews are as much about you interviewing the company as them interviewing you. I know that’s a cliche, but it’s true. If you told me this story in an interview and I rejected you as a candidate, you didn’t miss anything, because you would have been working for a prick and a company that promotes a prick isn’t a place you want to be. There are people who can help you with resumes. Not the stupid “Give us $200 bucks and we’ll put some creative fiction on your resume” companies, but government and college programs that help people looking for work put together a professional resume and cover letter and even help with interview techniques. That’s somewhere you probably need help to make sure you’re not talking yourself out of work by denigrating your achievements. If you can’t find a place like that, message me and I’m happy to take a look at your resume and offer what I can.

The other responses are really good, take the time to read them thoroughly and then read them again for good measure.

The only thing I want to add is you may also want to read up on “impostor syndrome”. Despite your protestations to the contrary, it does sound like you have some real skills and are overestimating the skills of others. Like the others have suggested, get involved with other people via meetups, open source or whatever and I think you will quickly realise that most of us are pushing uphill just like you are.

I just wanted to thank you guys for your thoughtful responses. You’ve all mentioned a lot of things I hadn’t thought about. I found a meet up nearby that I’m going to start attending, so maybe that will help me gain some more experience.

1 Like

One quick thought on local groups. Sometimes, esp. given the average personality types I run into in our work, local groups can feel like a bust. Either not many people come, or a certain mix of people doesn’t seem to produce anything exciting on a given meeting. I’d encourage a long haul attitude towards building up community. Keep at it, know that sometimes a meeting of just a couple people can be more impactful than a full room, and sometimes just the discipline and initiative of getting yourself out the door and to a meetup can be a small step in the right direction. Groups also evolve over time, so it may take a few tries and weathering the ebb and flow of these things.

Depression and shame can be quick to judge and quick to demotivate. Lean into it, and I believe it’ll be good for you in the long run.