I'm the only developer in my ad agency of about 80 people. It's super cool to write all my own code, make all my own stack choices. To know that I wrote everything here is a really cool feeling.
At the same time, I really miss talking shop with other devs. And given my extremely young age (only a few years out of school) sometimes it can be hard to be sure I'm making the most efficient choices. There's a lot of times I ask myself...why is this stupid and what am I going to break?
It definitely has its ups and downs. I think the most valuable lesson has been self reliance. No one is fixing this, it's on me. No one is going to refactor this, except for me.
I did that for 4 years. Beware! Being the only tech at an "agency" will quickly atrophy your core engineering skills, if you're not careful. You will get _good_ at delivering working solutions quickly, but these will tend to be one-off fixes, often data deliverables, but not finished products. You will also gradually slip on testing, and QA in general.
Working in an engineering team environment has all sorts of benefits. After I moved to my next gig, I think I learned more about dev in my first 3 months at product team, than I had in my last 4 years at previous gig, all thanks to simple code reviews and pairing. It's amazing to hear the thought process of other developers and how they would approach a particular problem.
Enjoy it. Learn everything you can, but keep in mind that you're not getting the full picture. Full software product lifecycle might be very different beast than what you're doing right now.
In retrospect, I was at an agency for two years before moving to my most recent job at a product – I agree with you that being at a product gets you back to your core engineering skills, however, in the right environment, an agency can expose you to a lot of things you would not otherwise explore in a very short amount of time.
You're entirely right that you get used to delivering working solutions that are ultimately one-off fixes, but at the same time you also discover how to use technologies that speed up your production in a more pragmatic fashion. It's definitely not a product lifecycle, it's a project lifecycle – different but not any less valuable.
Although, it is unfortunate you have no coworkers. The thing I miss most about working at an agency is being able to poll my many developer colleagues to research and discover different approaches to problems. The fast pace of an agency often means that you aren't the first to discover a problem that occurs on a project, and your colleagues are a highly valuable commodity that you don't necessarily get at a product.
I'm the same way at a recruiting firm. I worked at a company with a larger dev shop before landing here for about a year and a half thankfully but even so, there's a lot of work that goes into being a single man dev shop.
Communication: Keeping both the recruiters and management in the know about what is going on. This means I need to be decent about planning, bug tracking, tool choices, etc.
No one else is really technical here at all so occasionally you run into the hurdle of "It doesn't look like anything is getting done!". It really means I have to be very good at communicating complex topics to the layman. Not a bad skill to add the repertoire by any stretch of the means though.
Building a small team: There was a fresh grad on the social media team with a Comp Sci degree from NYU. "What's he doing in social media" I exclaimed! Get him over here!". I guess he focused on music instead of computer science at school but he's picking things up.
> At the same time, I really miss talking shop with other devs.
I'm in the same position, it's really lonely being the only technical resource. Just someone to bounce ideas off of. On the other side, everything works and when it doesn't I know exactly why within moments because I wrote it all.
I had this problem for years. And then I picked an open source project that uses the same language and tools and started contributing to it. I made some great friends and the mailing list was always live with discussion that was often much broader than the thing we were building. Over the years we also met live on a couple of conferences, had drings/dinners together and it really helped me fill the void of working alone on commercial side.
I do not need to know how many people agree with something to know whether I agree or disagree with it.
There's no need to show upvote points; just order it so I'm more likely to read the things that other people think are worth reading. I can judge it myself without seeing N "this" comments or upvote points beside it.
I hear that, the convos at some dev shops leaves a lot to be desired when you're bombarded with work. Hanging out on IRC with like-minded people who like Lisp/Scheme, more hardcore javascript coding than plain old jQuery and Free Software is far more fun than talking to marketing heh.
I would have to say your in a much different place than these guys were. The internet, open source (the amount of it at least), the FOTM chat client...
If you want to talk shop you are more than welcome to contribute to one of the open source projects out there (I'm sure you have a few in the stack). I will say it isn't the same as having a partner in crime at work, but you can get your self exposed to new ideas and thinking if you so choose!
Oh totally, it's a completely different world. I mean look at Stackoverflow. Literally one google search can solve even the more complex problems a programmer might encounter. Like you said, github, meetups, skype...just reading through source code on github helps me immensely.
I have a similar version of this - being the only ops guy in a small sea of devs. I'd love to be able to bounce ops-related ideas off people in-house, but no-one is interested, because it's not what they do or what they're interested in. I sometimes wonder how many weird ops habits I have picked up, since they don't get to be aired out much...
I've been doing the (unpaid) solo thing for years, and I'm almost sure I'm gonna give it up now. I built Tiled Text (https://www.youtube.com/watch?v=tztmgCcZaM4&feature=youtu.be...) while working at a grocery store and dealing with a repetitive strain injury, and it was a miserable, awful experience. I designed and built this 'abstract visual debugger': https://www.youtube.com/watch?v=NvfMthDInwE while my savings slowly ran out, along with my girlfriend's patience for being ignored. And I've spent a ton of time teaching myself mathematics and programming language fundamentals, and writing on new perspectives on programming tools/languages (http://westoncb.blogspot.com/2015/06/why-programming-languag...) —with no real prospects for academic recognition (to say nothing of remuneration), with my historically poor academic record.
I think for some people this is the only thing they want to do, and it works out well enough for them. I felt like that was me for a long time, but I've begun to wonder how much of this sort of dedication is motived merely by... baser qualities.
In any case: I salute you, solo programmer! —but be careful, eh? It's possible there's a simpler lifestyle that would make you happier.
Your abstract visual debugger is really cool! I was thinking about pursuing something similar for my bachelor thesis but ended up doing something much different.
I'm curious to learn more about your insights regarding the subject, where can I find more information?
Also curious to learn what made you go from thinking "this was you" to thinking another lifestyle could make you happier, which lifestyle? Why?
>... what made you go from thinking "this was you" to thinking another lifestyle could make you happier, which lifestyle? Why?
There are a lot of things that have gone into that question. I would say the biggest thing was that I became aware of the fact that I was always 'in my head' instead of having a more direct interaction with people/environment, and realizing (from a number of sources, but importantly, through meditation) that being not 'in your head'—direct interaction with things—is a major part of feeling content or satisfied (as well as being effective in... most domains). Makes sense if you think about it: you think when you are trying to change something; if nothing needs changing, you don't think and you're content.
Now I'm looking for a balance with social interaction, physical activity, and intellectual work. Since I've been unable to earn money from my own projects, I am giving them up to just do a normal 40hrs/week kind of programming job: if I try to do the job and the projects, there's no time for the balance I want.
After a few years I may get a job that's more physical/social and return to my projects, but for now I need to catch up on finances, and programming is the only way I know how.
Edit: another way of saying the above: anxiety/depression became a problem, and the balance I describe seems to be a major part of the solution.
I can relate to what you're describing, thanks for sharing.
Some part of me wants to just live in solitude with little or no social interaction at all, but I deliberately avoid it since my rational side tells me I'll end up depressed.
I've been told more than once I should look into meditation, do you know of a good way to start?
> Some part of me wants to just live in solitude with little or no social interaction at all, but I deliberately avoid it since my rational side tells me I'll end up depressed.
Unfortunately I haven't really written on the ideas behind it, though I probably will soon. A couple people asked me to submit it to the 'Future Programming Workshop,' so I was thinking of putting together some kind of writeup—but I had no money to attend.
The main idea was to display a running program's state at the same level of abstraction at which programmers think about their programs. I often found myself writing 'one off' visualizations of data structures for complex pieces of code; this was an attempt at a general solution: it would be able to render all of the different (visual) classes of data structures—the programmer would just need to say which of their data structures should be 'monitored.'
I would've enjoyed reading more about your approach seeing as it seems to be very alike to what I wanted to try and solve. I wanted to, similar to what you describe, be able to visualize the program's data structures as I visualize them in my head avoiding writing one-off, text-based, sub-optimal printing code.
I'm still interested in the idea (i.e. visualizing a program by its state) although I fear it may not be practical for non-trivial programs with complex, large and rapidly changing data structures.
It remains to be tested, but I'm pretty confident it will work for this—in a significant proportion of cases. You'd only visualize a few data structures at a time, most likely; there are controls like fast forward/rewind and a progress bar, and stepping one operation at a time; and you can just let it run on the side with the self-navigating camera for an extended period of time, and maybe you catch an anomaly. For applications where you're operating on data structures with millions of elements or whatever, you might need to artificially restrict the amount of data for testing—but that's reasonable to do most of the time. There are also controls you can't see that make hierarchically navigating from groups of data structures to single data structures to single elements, easy.
I think you're one of the few people I've come across who seems to get what it's for at all :D
I'm inclined to agree, I think it should work for most basic types using controls for forward/rewind and optionally only looking at a subset of the data.
A potential problem with visualizing more complex structures may be that people's mental representations for them probably differ, making it really hard to offer a visualization that maps to each person's mental model of each specific (complex) data structure.
What do you mean by: "There are also controls you can't see that make hierarchically navigating from groups of data structures to single data structures to single elements, easy."?
I'm happy we came across then! I find this type of visualiation to be intriguing, and I may give it a stab in the future.
I didn't beforehand, thinking if there were something for production purposes rather than being purely academic, I'd know about it. I looked later, though, and couldn't find anything. Btw, you can reach me whenever at westoncb[at Google's mail service]
The abstract visual debugger is how I imagine people will be doing development in the future.
Real time, interactive manipulation of objects which represent parts of the program.
Have you considered applying it to a LISP language, like Clojure ?
I've played a bit with building an experimental lisp editor, which doesn't use textual editing, but graphical representation of the forms, pictograms and symbols for core function calls (like map, reduce, filter, sum, etc), 'slots' for function parameters/call arguments, etc.
And it doesn't force you to use your mouse, but allows fast keyboard navigation and various commands for slurping/barfing forms, vi-style.
Eventually, I thought, this should be built in 3D. But I didn't finish it as it was too much work, just played around with the idea.
The cool thing about doing it for Clojure, is that, like any lisp, it can be evaluated in real time and the results animated immediately without restarting the app.
Your visual debugger is making inroads into the same territory I think.
Would you like to explore this idea a bit further together ?
The debugger has a client/server architecture that would make it relatively easy to connect to most languages (server does the rendering and layout stuff, client provides 'monitored' data structures, and sends data structure operations to the server). The clients are pretty easy to write.
Your experimental lisp editor sounds neat. I'm unfamiliar with slurping/barfing, haha.
I might've been interested in some shared exploring in the past, but I really am giving this stuff up for the time being. If you want to share a demo or discuss some particular idea sometime, or something, I can be reached here, though: westoncb[at google's mail service]
>along with my girlfriend's patience for being ignored
can you tell us more about that? The passion that drives me is the passion that gets things done. Does she want the paycheck or does she want me? Sometimes I can't give both
I can't really say... In my own case it was partly that I was trying to make a living off my project, and I couldn't spend that much time with her if I was going to build it before money ran out. But at the same time, there was an element of using the project to get away from her, and I think she could tell.
But yeah, finding a balance with these things is tough.
I am a solo programmer. In London. I rarely see anyone in my day to day. I work from home. I binge work, sometimes for 18-24 hours at a time - I loose track. I love it. I love my life.
I have almost finished my latest fun project. I'm collecting 25k data points a second. I control 38 servers. I have automated absolutely everything.
Hi to all the other solo devs out there! I've been building http://moonman.io/ mostly by myself for 4 years now, writing all the code (roughly 100k lines of c++) as well as creating all the earlier art and design. Earlier this year I was lucky to be crowdfunded enough to hire an artist and continue working on the game.
On projects that span years you find that you're not actually working alone, you're collaborating with your younger self. A younger self who is more naive, more optimistic, sloppier, and who leaves funny comments for you to stumble across years later.
"The many superpowers of Apple’s Preview (here and here) does justice to the app’s power and flexibility. Read it and join me in my appreciation for this labor of love from a solo, unnamed programmer who, I’m told, has been at it since the NeXT days."
Preview is one app that is a source of constant admiration and consistency that makes using OS x that much easier. Maybe a single excellent developer can make better call in terms of consistency because applying similar pattern across board is natural where doing so for more than one person requires a whole lot more effort? (communication, keeping up with a style etc.) While on the same subject can there be some way to make reusable components for visual intefaces ala unix commanline and pipes. If so then developers can do well developing bits of code, each doing one thing well and let users construct their own "solutions"
Preview is ok. It's clunky for looking at multiple images in a directory. Editing images is just weird - saving the image as you make edits, so you have to revert if you play with something - it breaks a 40 year old opn file-edit file-save file paradigm.
While we're looking at amazing gaming accomplishments my solo programmers, there's also Axiom Verge (http://www.axiomverge.com/) which was released on PS4/PC this year.
Interesting coincidence: both are games. In the business world when you buy an app you probably want to make sure that someone will be able to maintain it even if something happens to the project lead.
Dwarf Fortress is definitely one of those cases. I was (kind of) surprised it didn't make the list.
Beyond it being an ongoing epic masterpiece of a single man (with contributions from his brother), what's particularly amazing about Dwarf Fortress is how much it has inspired and influenced OTHER games being produced, despite being an extremely niche, unforgiving, and unapologetic game.
I didn't take the time to delve in to other tweets, but if you know more about him, can you tell me whether, based on what you know of him, he is saying "black people are niggers"(0) or "I won't be shamed into not using a word"(1).
Based on just the tweet, it sounds like #1. If so, I can only repeat "I disapprove of what you say, but I will defend to the death your right to say it". And, furthermore, I don't think that, in itself, says he's racist.
AFAIK LuaJIT was the work of Solo programmer Mike Pall. He built it on top of Lua, of course, but it's still an incredible feat of engineering and dedication. There are some who speculate that Mike Pall is possibly an alias for a whole team of people, but I think the reality is it's just one hard-working and extremely talented individual. He's now in the process of passing on the torch to the community, after a decade of shepherding LuaJIT.
I like the attitude and point of view here, and I will also lift a glass to all the solo programmers. As far as I am concerned the actual act of writing code has always been transacted between a single brain and a keyboard. The article does seem to have a slightly dated desktop-oriented perspective, though. Isn't it fair to say that the mobile world reinvigorated the solo/small team development project?
This is a nice read. I think that the enormous foundation of frameworks, toolkits, and open source libraries that exist today provide a huge lever for the talented individual - Acorn is an incredibly accomplished app and I had no idea a single person wrote it.
Equally, they provide a great crutch for the much greater number of not-very-talented people like me to cobble our ideas together into something approaching a polished product. That's new: I certainly couldn't have hoped to get much done writing 6502 assembler, but with a Cocoa book and a few late nights I'm earning actual money from code I wrote.
I wonder if Core Image is doing a lot of the work for Acorn, I'm not an Apple developer but I remember when it was announced thinking that it would make Photoshop type applications easier to develop.
Most programming languages were started by solo/independent developers, and some worked many years before anyone else helped. When you look for innovation, somewhere along the line it was an individual or solo dev work of creativity. Great teams are made up of self propelling independent/solo capable developers that can work in a team or parallel on separate products or services in a project.
It's an interesting period. On one hand, even though the complexity of the app has grown a lot, so have the tools and libraries which are available.
Another important aspect of doing it alone is the ability to market your software.
If you're not interested in that too much and don't have a spouse or friend who can take care of promoting, selling, customer support, etc, then it's difficult to make a living with it.
And of course, the competition is fierce and getting stronger every day.
Kids are growing up with computers and devices and they write code.
I've just spent 30 minutes playing a 10-year old's game (John Carmak's son, btw :) ).
Then there's always the 'open source' way - you start solo and then people join you.
My life as a solo programmer has been in ups and downs - making money while working full time as a programmer and then going solo and spending all my savings on experimental projects which so far haven't been commercially successful.
Now I have to take a job again and be a 'team player'...
This guy has me blocked on GitHub and I have no idea why. I've never interacted with him before. I tried to make a simple pull request to fix something and GitHub won't even let me fork his code.
I've emailed him and asked if he perhaps blocked me by accident or something and got no response.
> It needs 7.77 gigabytes of disk space.
The “obsolete” word processor I use to write this (Pages 2009) weighs in at 388 megabytes; the newer and dumber Pages version 5.5.3 takes up 478 Mbytes.
Binary size is, of course, a poor measure of program complexity. A solo programmer can easily leverage libraries to drive up their total weight significantly.
That's not to say that it's impossible to do anything on your own nowadays. I hear that it only took one guy to make Evochron Mercenary (http://www.starwraith.com/evochronmercenary/faq.htm#2) and the game takes roughly 1gb. Now, Star Citizen is supposedly the next big space sim; a big team that has raised over $50 million and creating a game that will probably take over a 100gb to install. Heck it took 20gb just for me to demo the dog-fighting module.
One developer vs a team backed with millions of dollars.
Solo programmer reporting in. I've been working on libsoundio[1], an alternative to PortAudio. This is in the context of Genesis[2], a digital audio workstation. Collaboration is great but sometimes if you want something done right, you gotta do it yourself.
Eric Chahi's work on Another World immediately came to mind as a great solo achievement while reading this. This code review written a few years ago is very good: http://fabiensanglard.net/anotherWorld_code_review/
Most grunt work is automated and so much knowledge is leveraged even solo-shops can keep all tech together. Good! That said, data from hard-science problems is the new nut to crack. I almost cry thinking of startups like rescale.com, the chance they offer to independent researchers and scientists to do so much more than it can be done in a shared lab or cluster. When I read of $$$ burn rate in the SV, I cringe: one ikea table quoted at $250 is one good full day of work with rescale.com. Unbelievable, make me think VCs and investors should ask for much more value for money when funding science startups.
Hmm, I think it's easier than ever for the solo programmer. Production deployment is easier, research and knowledge sharing is easier, testing is easier, finding a third party library to help is easier...everything is easier. A good programmer can build a product from beginning to end very easily now.
I am a solo dev at a university and a couple advantages I enjoy is that I choose my own technologies, and I am learning all about other aspects of web dev including sys/server admin. I can legitimately say that I am a full-stack engineer, albeit because I was semi forced to learn everything...
I didn't realize Acorn was a solo act. I ignored since I bought Pixelmator first, but now I have to go buy Acorn to support the guy just out of respect.
At the same time, I really miss talking shop with other devs. And given my extremely young age (only a few years out of school) sometimes it can be hard to be sure I'm making the most efficient choices. There's a lot of times I ask myself...why is this stupid and what am I going to break?
It definitely has its ups and downs. I think the most valuable lesson has been self reliance. No one is fixing this, it's on me. No one is going to refactor this, except for me.
edit: spelling :(