If a company is heading towards an IPO, they MUST already have a CFO in place, probably 3-5 years in advance. While there are financial systems required, there are practices, reports, etc etc that require day after day, month after month, and quarter after quarter monitoring. It's not something that can just be "cleaned up" at the last minute.
Profitability is not a hard requirement but certainly helps.
The "magic number" used to be $100MM ARR but that doesn't appear to be the case anymore. I'd wager this is in part because of the increased private/VC valuations the last few years.
Strong growth is good. Strong growth among the more profitable product lines is even better. Margins should be high, potentially increasing as the cost of delivering the product goes down. If the team can put $X into Sales and Marketing and get 3-5X revenue out, that's a good sign.
If you can determine LTV, CAC, and churn, those are GREAT indicators but unless you're senior management, odds are you won't see those.
Regardless, it is NOT something you can bet on because even if it does happen, it can be YEARS down the line and if you're an insider, there are complex rules on when you can do or say what.
In terms of raw numbers, there's not as clear a thing - I've been in companies that were acquired for doing really well, and others that might not have been able to pay payroll in a month.
After 7-12 years in VCs will want to get their money out to pay out their LPs. Around this time they will start pressuring management to find a buyer or prepare for an IPO. Though this pressure depends a lot on the company's financial situation and how willing the VCs are to wait for an exit.
It's not the best indicator but it still is one.
This is probably the top indicator IMHO.
To quote the former CFO of Blekko, "Every month we have a number of dollars in the bank, that number is bigger than last month, 'Bueno', its smaller than last month 'No Bueno.'"
Easy and quantifiable.
Also, if the company is losing money, and each month the bank balance goes down, divide the rate of loss by the balance, at the zero intercept the company will 'exit'.
Also easy and quantifiable.
Between those two 'easy' versions, lays the challenge. But for your question which included the caveat "... in the near future" only the easy ones apply.
1) Game changing technology. These are very hard to measure, especially from the outside. You have to ask yourself, "Is this technology for real?" and "Could a large company monetize this?" This is what's happening in the autonomous car market. Let's step aside from this.
2) Companies that are growing well and fast on their own. In this case there are 3 metrics that matter: Revenue, Revenue Growth (new business minus churn) and Margins. Revenue is the base for valuation, and Growth and Margins determines the multiple. A weak rule of thumb that answers your question is that once a SaaS business hits 50mm in ARR, Growth Plus Margins should equal 50%. (It's ok to lose 10% of revenue in margins if you're growing 50% per year. If you're only growing 20% per year, you should have 30% profitability.) If it has this it's trending towards a positive exit.
1) In case 2, if the company has external venture money, they are more likely to exit. (The VC funds need to return money to investors) If they are self-funded, they can stay private much longer.
2) Very few companies pull off the high multiple exit or IPO. It is hard to maintain growth, and hard to eventually turn a profit when you are growing fast.
3) There are a small subset of VC firms and specific VC partners with disproportionately outsized success. In the absence of other information, an investment by them is a good signal. (But smart money won't help a bad business)
You'd have to chain all those together to answer your question as posed.
Generally, look for $100M+ revs, strong growth, institutional investors, and a reasonably-new CFO with a track record in sales/IPOs.
The scale of the business has to be reasonably large. Market cap in at least 8 figures.
Though the difficulty would be that the brand is so attached to HN that the VC firm might struggle to get the brand value.
Also, given that they have around ~20 million visits per month according to similarweb it could probably make $10-100k per month if it charged for job ads.
It could also probably sell ads and do ~$30-100k/month from that based on a ~$3 CPM.
I also had some issues with student data being different across all SIS. Had to implement my own solution to normalize the data and serve it to my own production systems (eventually was sold to clients). This was never truly solved because the moment I left the company focused on another product (it wasnt a "data" company like Clever).
It might be difficult financially. I don't know your situation on how feasible that is. Perhaps you have family and other hard commitments. But I think in general people tend to overestimate the cost. Wind back your outgoings. Head somewhere cheap. Meditate, exercise, eat fresh food.
Perhaps you may be depressed, seek counseling and see if that helps.
It can be a rough world out there. Look at what you have though, a ton of valuable experience that you can apply towards the right opportunity when the time is right.
Hang in there, time changes if nothing else, and that may be all you need.
(Your experience is not worthless, if you've been doing the relevant work then some companies will hire you even if it doesn't match previous job titles. But if you're this burned out you should probably not think about it.)
One of the best books on programming style and function, backed up with actual research for the recommendations.
Of books that are more on the craft of programming, "Refactoring" (Also Fowler) is good. And I enjoyed "Practical Common Lisp" by Peter Seibel too.
In general, I suspect that the value of a book has more to do with where the reader is, than where the book is.
(in roughly chronological order. As you can see from the chronology, it took me a long time to start to like OOP.)
Learning Ruby itself was a huge influence to me; hadn't considered that a language should be designed to make programmers "happy", as Matz said. "Confident Ruby" was one of several books that had this human-happiness focus. "Confident" is broken down into patterns, many of which can be found in books like Sandi Metz's POODR, but as a semi-experienced programmer, Grimm's way of writing really appealed to me.
Even the title of the book itself was revelatory to me. The idea that the functions and methods and conventions we create should be rooted in a "confident" mentality (such as the old adage of being promiscuous in what a function accepts, and strict in what it returns) really improved the way I designed code. Not just in terms of technical proficiency, but with less cognitive burden, which ultimately leads to the elegant simplicity we desire in our work.
Of course, in recent times, it has become all that much more relevant to me as I began working in data science/engineering space. Even though it's not specifically about code structure for a particular language, it addresses a common flaw in most programming approaches that seem to treat all functionality as a servant of the current context which is strange and silly and not how anything works in physical information processing so why do it in code?
A somewhat common pattern that maps well to FBP is "Railway Oriented Programming." Though FBP in full takes this well beyond simply shooting errors along in sideband to the happy path.
After reading I began to think about programming as an algebraic transformation from one system to another, in doing so radically reduced the amount of errors I made.
The Description of Finite Sequential Processes http://www.jsoftware.com/papers/DFSP.htm (see e.g. the concrete implementation of the Simplex algorithm , the hamming code corrector). It shows that, with the right primitives and notation, a lot of things are simple and elegant. It's not an necessarily an easy read (depending on your math level and background), but it is a very rewarding one.
Notation as a tool of thought http://www.jsoftware.com/papers/tot.htm - a longer introduction.
Bottom line: a different take on abstraction. It makes a huge difference when you peel most abstraction layers.
I'm still trying to achieve everything he advocates, but what I've managed so far has been extremely beneficial.
This helped me break my analysis paralysis when it came to figuring out how to organize my code.
It contains this gem , which is pretty much how every program works. I occasionally riff off this diagram for work as an inside joke with myself.
The best way to write better code is to avoid writing it badly in the first place. But you need to know how to write bad code to write code better than it. Definitely a different way of learning how to write good code, also a good laugh for anyone in industry.
_Head First Design Patterns_ is a great influence too when it comes to OO-abstraction, for good and bad.
I did love Design Patterns a lot though. Purely Functional Data Structures by Chris Okasaki was also really useful for Haskell, as was Real World Haskell.
Programming Prolog probably had a bigger influence on my Prolog than the other books, even though I read Art of Prolog and Prolog Programming in Depth first. Especially the latest edition, it's a really beautiful book.
It's essentially a list of anti-patterns to avoid. But crucial to it is the idea of clarity and avoiding misinterpretation by either human or compiler.
I'm not sure I would recommend it today, but at the time I read it, in the mid 2000s, it did change my view on these "unmaintainable" technology stacks. I later came across the fusebox architecture/pattern, originally from ColdFusion - and realized that many PHP programmers had skipped some history, ending up reinventing code structure, sometimes badly.
Note that fusebox has grown and changed, I'm mostly talking about the fundamental ideas, and I don't think the later "port" to using XML was a very elegant or good idea. For those interested, see:
https://en.wikipedia.org/wiki/Fusebox_(programming)#Fusebox_... and most of the rest of that page.
* Fred Brooks - Design Of Design
* Fred Brooks - The Mythical Man month
* Eric J. Evans - Domain Driven Design
* Design Patterns: Elements of Reusable Object-Oriented Software
* Kent Beck - Extreme Programming Explained
* Kent Beck - Planning Extreme Programming
* Michael C. Feathers - Working Effectively with Legacy Code
* Daniel Kahneman - Thinking, Fast and Slow
[EDIT] Correct the author for legacy code
Also, Scott Meyers's books were very helpful.
The design of the D standard library has also been very influential on my code (Mainly convincing me of the benefits of ranges over iterator)
It came along at just the right moment in my career, when I was struggling to understand how I could build things in a more elegant way. I picked up the book thinking I was going to learn about some esoteric design pattern, and came away with a much better understanding of the languages I was using and all of the other design patterns I thought I had learned about previously. It's clear, concise, and focuses on concepts over specific tools and libraries, but most importantly it's practical - it has real, practical code examples and explains how to actually build an object-oriented system. It's such a stark contrast with most presentations I've seen of the Gang of Four patterns and of SOLID, which usually come with really weak examples that aren't helpful or motivational.
Everything snowballed from there. I started using composition a lot more than inheritance, I started identifying problems with side effects and eliminating them, I started writing real unit tests, I was able to better critique other peoples' code. I felt like I was finally using the tools available to me in the way they were supposed to be used.
What's funny and satisfying to me is following the author's blog and seeing that he has since moved on to focus primarily on F# and functional programming, which I naturally started to do myself after more practice with the concepts in his book. Once you start decoupling things well, and you've built a few systems big enough that you have trouble finding the actual implementation of your IWhatever and an AbstractSingletonProxyFactoryBean actually does solve your problem pretty well even as you realize the insanity of it, the encapsulating borders of classes and the need to assign everything to a noun start to feel more like a hindrance rather than a guide.
That said, I still think that most of the world's code written in object-oriented languages would be better off if everyone using them had brief, practical training to understand the value of specifying the behavior of an object through the interfaces it depends on, giving it other objects that implement those interfaces right when you create it, and doing all that creation up front (or specifying other objects that can defer that creation to later). I still see so much C# code from developers at all levels who clearly create classes only because the language offers it and it seems like the right thing to do, randomly jamming methods and fields into classes with names vaguely related to the domain, calling static methods to access databases and external services, and proudly adding unit tests for their one loose little function that mushes strings together. I push this book as hard as I can on junior devs.
Why? Because we software engineers can learn a lot from the hardware guys. Almost every piece of software I write these days contains some finite state machines (technically, every program is a finite state machine, where the binary string that makes up all your variables at a given point in time is one state, that insight alone is valuable, but I mean with explicit states in the code) - in fact, they often make up the core structure and uphold some strong invariants that make reasoning about the code simpler. And if one finite state machine does not do it, then you can nest them and keep all the benefits.
I would assume all the best knowledge could be found online for free by now.
The smaller the audience, the greater the chance that an empty comment section will exist. This is dangerous as it will reinforce the notion that a given site is unpopular and not worth using. Historically sites have used puppet accounts to prevent this.
It was quite simple really, but really powerful to be able to tweak/replace a dataset hit make, and have a fully updated version of my thesis ready to go.
I did a makefile like
file1: wget http://example.com/file1 file2: wget http://example.com/file2 file3: wget http://example.com/file3
- make test : run the entire test suite on local environment
- make ci : run the whole test suite (using docker compose so this can easily be executed by any CI server without having to install anything other than docker and docker-compose) and generate code coverage report, use linter tools to check code standards
- make install-deps : installs dependencies for current project
- make update-deps : will check if there is a newer version of dependencies available and install it
- make fmt : formats the code (replace spaces for tabs or vice-versa, remove additional whitespaces from beginning/end of files etc)
- make build : would compile and build a binary for current platform, I would also defined platform specific sub commands like make build-linux or make build-windows
And we run tests on 3 flavors of Hadoop (HDP, CDH, and IOP), each of which is broken down into a flavor-base image with most of the packages installed, and various other images derived from that, which means we have a dependency chain that looks like:
base-image -> base-image-with-java -> flavor-base => several other images.
Enter make, to make sure that all of these get rebuilt in the correct order and that at the end, you have a consistent set of images.
But wait, there's more. Docker LABEL information is contained in a layer. Our LABEL data currently includes the git hash of the repo. Which means any time you commit, the LABEL data on base-with-java changes, and invalidates everything downstream. This is terrible, because downloading the hadoop packages can take a while. So I have a WIP branch that builds the images from an unlabelled layer.
As an added bonus, there's a graph target that automatically creates an image of the dependency graph of the images using graphviz.
Arguably, all of the above is a pretty serious misuse of both docker and make :-)
I can answer complaints about the sins I've committed with make, but the sins we've committed with Docker are (mostly) not my doing.
Even though Make does not have built-in support for arithmetic (as far as I know), it's possible to implement it by way of string manipulation.
I don't recommend ever doing this in production code, but it was a fun challenge!
http://www.oilshell.org/blog/ (Makefile not available)
and build a Python program into a single file (stripped-down Python interpreter + embedded bytecode):
Although generally I prefer shell to Make. I just use Make for the graph, while shell has most of the logic. Although honestly Make is pretty poor at specifying a build graph.
tmux: ln -s $(CURDIR)/.tmux.conf $(HOME)/.tmux.conf tmux source-file ~/.tmux.conf reload-tmux: tmux source-file ~/.tmux.conf gitconfig: ln -s $(CURDIR)/.gitconfig $(HOME)/.gitconfig
- Compilation of papers I am writing (in LaTeX). The Makefile processes the .tex and .bib files, and produces a final pdf. Fairly simple makefile
- Creation of initial conditions for galaxy merger simulations. This I obtained from a collaborator. We do idealized galaxy merger simulations and my collaborator has developed a scheme to create galaxies with multiple dynamical components (dark matter halos, stellar disks, stellar spheroids, etc.) very near equilibrium. We have makefiles that generate galaxy models, place those galaxies on initial orbits, and then numerically evolve the system.
Point being that autoconf is often overkill for smaller C projects.
File outputs were progress logs of the backups that got renamed after the backup, so if any jobs failed in the backup window, you could easily inspect them and rerun the failed jobs just by rerunning the make command.
Fun times. Handling filenames with spaces was an absolute pain, though.
We gradually swapped them out in favour of our own DAG-runner written in Rust, called Factotum:
* a source code download, * copying IDE project files not included in the source, * creating a build folders for multiple builds (debug/release/converage/benchmark, clang & gcc), * building and installing a specific branch, * copying to a remote server for benchmark tests.
The idea is if you want to use the library, you just include the makefile inside your project makefile, define a TARGET values and you will automatically have tasks for build, debug, etc.
The key is a hack on .SECONDEXPANSION pragma of GNU make, which means it's only work in GNU/Linux environment.
Edit: ah, turn out I write some documentation about it here: http://kilabit.info/projects/libvos/doc/index.html
It probably will require quite a few changes, but if the /proc file system exposed running processes by name, and contained a file for each port that something listened to, one _could_ run make on that 'directory' with a makefile that describes the dependencies between components of the system.
Useful? Unlikely, as the makefile would have to describe all hardware and their dependencies, and it is quite unlikely nowadays that that is even possible (although, come to think of it, a true hacker with too much time in hand and a bit of a masochistic tendencies could probably use autotools to creative use)
The shell script generates a Makefile and the Makefile runs the hadoop commands, so that the parallel dep handling is entirely handed off to Make.
This make it super easy to run 2 parallel workloads at all times - unlike xargs -P 2, this is much more friendly towards complex before/after deps and failure handling.
A personal wiki and resource catalog. The only thing delivered is the makefile, which uses existing tools, and a small convenience script to run it.
Well, I have "make encrypt" and "make decrypt" commands that will iterate over the files in an ".encrypted-files" file. Decrypt will also add a pre-commit hook that will reject any commit with a warning.
This is tons easier than trying to remember the ansible-vault commands, and I never have to worry about trying to remember how to permanently delete a commit from GitHub.
It has much of the same functionality, but I already know (and love) ruby, whereas make comes with its own syntax that isn't useful anywhere else.
You can easily create workflows, and get parallelism and caching of intermediate results for free. Even if you're not using ruby and/or rails, it's almost no work to still throw together the data model and use it for data administration as well (although the file-based semantics unfortunately do not extend to the database, something I've been meaning to try to implement).
Lately, I've been using it for machine learning data pipelines: spidering, image resizing, backups, data cleanup etc.
Using a Makefile allowed someone to quickly drop in new keys/certs and have all of the output formats built in a single command. Converting and packaging a single certificate requires one or more intermediate commands and Makefile is setup to directly handle this type of workflow.
I use one to build my company's Debian Vagrant boxes: https://app.vagrantup.com/koalephant
I use one to build a PHP library into a .phar archive and upload it to BitBucket
My static-ish site generator can create a self-updating Makefile: https://news.ycombinator.com/item?id=14836706
I use them as a standard part of most project setup
It's pretty cool, but not ideal.
make seems to be easier to install/get running than the myriad of non packaged, github only projects i have found.
Instead of bloated autotools I also call a config.sh from make to fill some config.inc or config.h values, which even works fine for cross-compiling.
Junior developers need to be given time to make mistakes and learn. I know a senior developer might seem too expensive for your budget, but hiring a junior developer might ultimately cost more for your project over time. The time that they're going to take to have to ramp up and learn everything is probably going to eat into the time to deliver any sort of product. What I'm saying is that a junior developer is a time and money investment, and sometimes it just pays to hire a senior developer/contractor and have them get the project out.
Anyway... what I would look for in a junior developer isn't whether or not they're amazing at data structures etc. I could really give a rats ass as to whether or not they're able to do something like Codility. What I need to see is that they know at least some basics on how to code, and that they have the aptitude and motivation to learn.
The two most important qualities to me in a software developer is the ability to communicate and the ability to learn. Why is communication necessary, particularly in a junior developer? I need to know that they're willing to swallow their egos and come to someone for help. It's the fastest way to learn.
Hell, I feel like I learned much faster because I was able to swallow my pride and ask someone with seniority for help. It didn't mean that I would run to them at the first sign of a struggle, but if I was burning most of my day doing something that I felt wasn't really going to teach me much, but was causing me to struggle with something - I would go and ask someone senior for help.
Maybe you shouldn't hire juniors? Junior devs are an investment and we owe them respect and genuine mentorship. By definition, they will 'waste your time'.
And frankly, if you can't afford seniors, your company's mentorship opportunities will be weak enough that the smart play for truly capable, career minded juniors would be to work elsewhere.
That said, I think there may be a deeper issue here. You want to hire seniors which suggests that your startup _needs_ seniors and the experience that they bring. But you're hiring juniors.
You're going to end up disappointed as you need senior developers at this point.
They're going to end up disappointed as they require senior developers in the team to learn from and grow.
(Perhaps unrelated, I think if you've interviewed 400 people and haven't found someone "good enough", the issue may not be with the candidates...)
* Technical education (college degree, classes, etc.)
* Hands-on technical experience. This can range from an internship, to just building computers for friends and family. Something that shows initiative.
* Some other work experience, even if it's a cashier at Dominos or a volunteer position at a library.
I avoid resumes of candidates that have degrees but no measurable hands-on experience outside of school. I find students that have gone through high school and college with absolutely no work experience to be entitled and often spoiled. I understand that is not a universal truth, but I've observed it enough to not bother with those candidates.
In the interview itself, I look for candidates who:
* Are excited about the job, learning new stuff.
* Don't have a bad attitude. This can often be evident when talking about your stack. If you have, say, a Java stack, and the candidate makes some offhand comment about how Ruby is so much better, it's a hint about how they'll act on the job.
* Can answer basic questions about the stack they'll be working on. I'm not talking algorithms here. This is mostly to test if they give a shit about the job enough to read up on the details for 20 minutes before coming in for an interview.
Typically you hire junior developers for what they will become, and not where they currently are. That means the traits you're looking for is a desire to learn and genuine interest in technology.
If you only have junior developers, they will have a much tougher time learning. They'll never see how software should be built.
There are exceptions. Really simple prototypes is one of them. Some maintenance of existing projects might be another exception, depending on the quality of that project, and the type of work involved. Anything reasonably complicated, I wouldn't expect them to finish, and if they did finish, I'd expect it to need to be rewritten very early on.
If you want to do it right, hire a mid level or senior developer. It's better to have a single senior developer than 5 junior developers. If you're looking to hire multiple developers another choice would be to hire one senior developer and one junior developer. Just don't hire only junior developers.
I think you will find you will save money in the long run if you hire senior developers if you actually do require senior-level development skills instead of expecting junior developers to do the same work for lower pay.
Main thing is to give them homework: not more than 2 hours project that they will solve at home and commit to private repo. Make it unique enough to avoid stackoverflow copy-pastes. Do not give them academic problems, ask them to create real world examples. For example: create CRUD that does something specific like file uploads with resize or similar; access unreliable API and do something with it; create calendar that allows multiple tasks per day (UI/UX); scrape data from the website and put it in to DB.
Those are just examples, but they are easy enough to do in under 2 hours and you can test results in under 2 minutes. Out of those 400+ applications, half of them will not even bother spending 2 hours on a task, then in a day or two you will restrict that remaining ones to about 50-60 just by checking results of the task. Rest are just personal interviews. Just remember to write a feedback email even to those unsuccessful applications.
Junior developers need to have high IQ and ability to code, everything else you will need to teach them anyway. Keep in mind that if you don't have time to teach them they will not be cheaper than seniors, unless all you need is bums on seats to fool investors or something nefarious like that.
It sounds like you're trying to hire cheap developers, not junior developers.
If you really want junior developers, you have to do a crazy thing; hire people that are actually junior (have very little experience) but have potential. If you'd done that 4 months ago you'd probably have some decent developers right now.
Mainly, though, I look for enthusiasm and eagerness to learn, the ability to communicate clearly, and intelligence. I also look for a balance of self-determination and the willingness to work through a problem on their own but also enough sense to know when and how the to ask the right questions when needed. Finally, honesty. If they've fluffed up their resume that is a red flag.
You are not going to be hiring senior level developers who've misclassified themselves. Juniors are going to take work; there is no avoiding that. Adjust your expectations to that reality and you will have a better chance of pulling in an employee that will do well for you over time.
Finishing the challenge on itself will be the first filter; then you can review the ones who finished it and interview the ones you like most.
BTW if you are looking for a remote web dev (front-end or back-end) drop me a line "public at francisco.io" <= my CV.
In your case, I'd say someone passionate enough to provide good value for the team. Just make sure you don't scare them away by making them feel they might "waste your time" ;-)
- A genuinely nice person.
If I have two things, I'm pretty sure the rest will work out in the end.
If they don't do it on their own, and don't seem interested in programming for their own benefit outside of the job, then don't hire them.
People who are new but enthusiastic and spend a lot of time learning on their own are who you want.
Subsequently, hiring too many junior developers can be a hinderance because there aren't enough people to coach and guide them. It adds technical debt to your organization and makes for a shitty experience for the junior dev. They need help and they need people who have the time to help them. It's easy for junior devs to feel inadequate and suffer in silence.
Finally, ask yourself why don't have the funds to hire a more experienced engineer. It may be a sign of an unhealthy organization or goals which are way too big. I say this from experience and the pain I felt as a result of not listening to my gut and pushing back ferociously. You think firing someone "sucks," try laying off a room of people you know, who you care about, and who have been good to you and your organization... bad goal setting will cause it.
We look for people with analytical backgrounds: engineering or the hard sciences. They have to be capable of independent thought and interested in solving hard problems. That's what we have to offer as an employer: you get to do interesting work and live in a really nice town.
Sounds to me like what you really want are senior developers at a junior developer salary.
If you're looking for how to find hidden gems, my best advice is don't bother. Ask them fizz buzz (yes literally fizzbuzz), some basic OO vocab, and have them do an easy design problem. If they have a pulse and can do that, they're probably worth your time. For most devs of any level it's really hard to tell whether they will be valuable additions until you've actually worked with them. For a jr dev it's a pointless exercise. Find someone motivated, who seems like they can learn, and spend time putting in place a framework to make sure they have the tools to succeed.
Perhaps something in the fast food industry.
* Take initiatives
* Knows how to learn new things, +/- fast (and loves it)
* Knows when its the wrong way (even if its too late) and turn back
From my little experience, you don't have to do big technical challenges to detect those. But again I have very little experience in the business (5 interns and 1 junior hires)Social habilities are important too, but don't get fooled by those who talk too much
Good luck !
> we had so many applicants (400+) that it was a tough challenge discerning the best candidates
You just want good candidates that fit your company. Then you /make/ them the best by teaching and mentoring them.
> I would like to hire senior developers instead, but they are too expensive for my budget
Sorry to say it but this sounds not like a good place for junior developers. You can't just put them in a senior position and expect results for cheaper payroll costs. They need to learn (experienced developers need to learn too, but juniors even more so).
With 400 apps you'll need to send them a quickie programming challenge to thin the herd.
If you are willing to proceed the next step is setting up your hiring process. I've used a loose, informal specification for a rather simple program as a take-home exercise. It takes around 3-4 hours to complete for a reasonably-experience programmer and can be completed in any language that the applicant is most comfortable with. When designing this specification I made sure that the language was clear and intentionally left some requirements vague. It is intended to be representative of a typical specification for a low-risk feature or system that you might encounter on the job: a few paragraphs detailing the problem, a description of the API, the inputs, the expected outputs, etc.
What's interesting about using this exercise with junior developers is seeing how they interpret the specification. Most developers out of school aren't trained to think in terms of specifications, requirements, etc. Your junior applicants will typically write some code to start solving the problem. They will skip translating requirements from the specification into tests. They won't think of the bounds on inputs or outputs. Often they will start writing code and implement the first thing that "works" (for some definition of "works").
This is wonderful! It gives you plenty of leading questions when you invite them in for a code review session. A good, naive solution is great. It gives you opportunities to talk about edge cases, tests, assumptions, invariants, performance, etc. The more you can get them to talk the better!
If they seem enthusiastic and are capable of taking a leading question and connecting the dots then you have a great candidate.
But, some advice: if you get 400+ applicants again, just throw out all but ~50 without looking at them at all. That's too many to process, any you're wasting too much time trying for find the "best" ones. Randomly limiting your pool will make it easier to make a decision.
Also, I hope you don't go the traditional interview route (ie white boarding). I think more companies should do a "make your own interview process" where the candidates decide what to show off. Maybe that's walking you through a project, some live coding/pair programming, assessing your product, or a presentation on some aspect of technology (like functional programming, databases, security, etc). The one that impresses you the most wins.
As others have said, you should create a take-home test for someone to complete on GitHub. Have them fork a repo, pass some coding test, and submit a pull request into your repo. That will reduce the number significantly, and you'll know with some certainty that the person you're speaking to has some basic skill. The interview should purely be an exercise in seeing if they are a good fit, and to gauge where they are in their journey.
The way I would do it is to focus on side-activities. If a hardware engineer built a website for a side-project, that's a good sign. Anything that shows success outside their expected space. Smart, fast learners tend to pick up random knowledge and apply it quickly and successfully.
People who need hand-holding tend to know their core topic well enough (they spent years in college refining those skills), but are having difficulty learning anything outside those core topics.
It seems like you are in the same shoes as me at the moment. What I suggest you to do is to prepare a small test tasks they can do at home. This saves up time for you going through unnecessary extra interview processes and also shows some of their dedication and skills. I am not saying you should not have interviews, but it is hard to filter candidates just by resumes (and you can not have 400+ interviews).
Answering your question, I usually look out for the following:
1. After I sent the candidates the test task, but before they finish it (NOTE: I don't know they progress on it):
- Do they let me know when they have time to do the task (in case they are not able to it immediately) or do they just let time pass by.
- Do they come back with questions if they hit a wall somewhere.
- Do they let me know if they are not able to do the task (for whatever reason). At this point they are obviously out of the process, but they might re-apply at a later time.
- Communication is key at this level of the application process.
2. After I received the results of the test task
- Obviously did they finish the task in a reasonable quality. There are most likely mistakes in it, but this is irrelevant in case the general quality of the result is ok and the solution works as expected.
- The quality also reflects on how much time they spent testing their own solution.
- Did they finish all the sub-tasks (usually I also ask for documentation and tests) or did they just skip those.
- Did they try to find quick and dirty solutions or did they try to implement things properly (and most likely spent more time on it).
The best developer you can hire is somebody who does communicate pro-actively, is dedicated and develops maintainable solutions over "easy" ones. How much time they spent on the task and how proficient they were with the tools at hand (programming languages/frameworks) is not relevant in my opinion. If they were unfamiliar with the programming language for example and they spent the time during that task to learn part of it and delivered a proper solution with it, they got all my respect and I would be very likely to hire them.
You will also have to spent time reviewing the test task results, but I think this is less time-consuming than interviews. More than half of the candidates will probably jump off before you even see the results. For the other half you will learn how to distinguish a good from a bad solution quickly.
Another approach: break your backlog into piecemeal tasks and hire senior freelancers to do fixed work for fixed costs.
tl;dr: I want someone who is excited by the platform and has shown a willingness to learn, as well as some autodidactic tendencies.
That should filter 2/3 of the candidates.
This feels like a red flag. Do you have existing, more senior, people that can oversee the work? If so, perhaps that's a valid trade-off. It won't reduce the overall cost though, just the monthly burn. More junior means slower delivery, or less quality. There's no free lunch.
You have to put time and money into training them; it's a responsibility more than an easy buck.
Basically I look for the following things.
* Do I think the candidate has the capacity to learn. Every hire we've taken straight out of college has been fairly useless for the first 3 months. They typically know how to write software, but they have no idea how to do it in an actual production setting. We've had hires who couldn't publish and deploy a simple asp mvc site to an IIS for instance. I typically judge this by what projects they've done during their education (and their free time) and what sort of roles they've filled in those projects.
* Does the person have the minimum technical skills required to learn. I don't care if you can write a double linked list on a whiteboard, but I do want you to be able to do simple things, know about best practices and preferably things like SOLID. We'll typically ask what people think about test-first-development as an example, and we'll try to provoke an answer that doesn't come from a text book to see whether or not they actually have an opinion and knowledge on the matter or they're just telling us what they think we want to hear.
* Do I think the candidate is capable of failing, accepting responsibility for the mistake and learning from it. It's perfectly fine to screw up, we all do it, but people who don't admit when they do it are dangerous.
* Communication skills. I need candidates to be able to explain what they are doing to their grandmothers without getting angry. Both because the business end won't understand otherwise but mainly because politeness and a well mannered temper is more valuable than gold.
* Do I think the person will be a strategically good fit in the team.
* Does the team think the person will be a good fit.
* Does it seem like the candidate wants to work for us. The best employees are the ones who value and take pride in their work. I don't want people to be blind zealots, but I want them to be able to tell their friends they're making a difference.
Often we end up with a few who are strong technically and a few who are strong in personality and willingness. We always go with the latter. Obviously I can't tell you about what we've missed out on, but I can tell you that we've always had successful hires which is pretty important, because the most expensive you can make as a manager is hiring someone who doesn't work out.
TL;DR - Decide who is your ideal client. Identify their 1) common pain points and 2) which online communities they participate in (may or may not be HN). Write advice that will help them with their pain points, and share it in those communities. This will in effect advertise that you know how to solve their problems. Don't be too modest to say you're available for consulting projects, and make it easy for people to contact you.
PS - As someone else suggested, you may want to add your contact info here. There's a big overlap between people who browse HN and people who need and have the budget/authority to hire contractors.
- https://getbetterluck.com/ (one of our own internal tool)
You are on the front page of arguably the PREMIER network of people with access / need for technologists.
Also, get a stack of business cards and start going to local business networking events. Look up the local Chamber of Commerce, search meetup.com, and see if your county has any small business development classes or lunches you can attend.
That's my short-term advice. I'm still trying to figure out what to do in the medium- and long-term myself.
Your clients could or could not know much about the software development life cycle, and how to evaluate if you have the skills to meet whatever needs they may have. Perhaps you could network with existing freelancers who are too busy to take on new clients.
Spitballing here, but maybe working on or creating an OSS project could give you credibility to those freelancers. Or maybe you could work under a successful freelancer to establish yourself in the space. Maybe the site you built will lend you credibility to others.
Alternatively, if you have business ideas you'd like to try out, you could try working for yourself and creating your own income. Also, it doesn't hurt to sign up for LinkedIn. It might not be immediately beneficial, but once you find your first client, maybe they'll write you a glowing review.
> having worked remotely for the past 5 years has really limited my ability to build a network. I don't have LinkedIn and even if I did, it's more meant for building a network than for finding a quick gig.
Yeah, it's hard to build a network. Time to start putting in the effort. I sense a tinge of can't-do attitude here (but obviously, the tone interpreted in written communication is subjective) -- I don't know if it's the case or not, but a can't-do attitude is not what you want to have for freelancing work. Your lack of a network, or having an expansive one, is ultimately the result of your personal decisions. You have to be willing to give it a shot. If networking sounds not fun, or like a chore and otherwise unpleasant, you're probably better off just working for a big tech company. Personal skills are far more important in freelancing and entrepreneurship when compared to standard full-time employment.
Best of luck. Now go out there and kick some ass.
You seem to have experiences, which is excellent. In the short term, if you're in the throes of an emergency, perhaps get some help from love ones while you get your feet back on the ground.
Looking for a project under stressful circumstances feels like it might create an uncomfortable environment to do good work and sustainably remedying what you're going through.
Good luck, whatever route you choose!
More short term, I would definitely try to find a single gig, maybe via some subcontracting or via sites like toptal, just to build some runway and to make sure the techniques described above have enough time to bear fruit.
In my experience, face time matters if you are from place no one knows about. There is a reason most engineering talent is in and around Silicon Valley.
I am not sure about github or other technical profiles as the people who make the decision of hiring you never visit github or understand code. I am taking about the CEO of a small company who will hire you and not the cool SF startup that we read more often.
Companies want to reduce risk, remote increases it because of the unknowns. If I were you, I would again start with upwork and similar freelancing sites. The shady things you hear are distractions and everyone has a different experience. There is a reason the upworks of today still exist and are doing business.
I wish you the best! :)
So your options are really limited: Credit card debt? Family debt? Low paying jobs?
In the longer run, there is no way around building a network. If you want high quality work, you have to build a network. It's like some guy coming to a big city and want to hit the high-end clubs, meet with high-quality people and get back home with a 9/10 girl to sleep with. Not gonna happen.
He's probably going to fail at entering the clubs (first step) and then blame it on the clubs having bad policies and stuff. If you want high paid work, you have to establish yourself first.
Establishing yourself in a certain market/niche take years of hard work on establishing yourself. It can happen on different dimensions and will depend on your style (blogging? Forums? Conferences? How about writing a book? Contributing to a popular open source project? How about becoming a main contributor of a popular open source project?).
Good luck. Tough times but I'm pretty sure you'll come out of it and it'll shape your perception down the road.
Building a brand is hard, it takes a long time, but it's worth a lot and is monetized over time.
Paying someone means accepting you're going to pay 10-15% or whatever price to someone like 10x consulting or some other sort of agency to find you work. This can be the right option if you aren't in it long-term or just plain don't want the hassle of brand-building.
I've had a few coding tasks completed by Redditors on this subreddit.
Which of these do you think works the best? In my experience its the former by far (all of the people who have sought me out had the most reasonable and interesting project.) But I do understand that in the beginning you're going to have to grind to get anywhere (share your work where ever you can) which means putting in A LOT of unpaid hours doing research and development for new stuff. It's worth it though.
If you keep working on your portfolio and learning new skills then you will never have to look for work again. Just think of the security that would bring: To know that if anything happened to the company you're working for (or you get fired) you can sign a new contract the very same day. Would be amazing for most devs... But in my experience this can only happen if you specialise.
The problem is, there is too much competition for the skills you listed. As an example, if you were to learn some skills in say - big data or AI then you would be much more competitive. I know that's a big ask but one thing I think is true about the tech industry is that anyone can succeed if they put in the effort. In the end its a meritocracy, so the good developers quickly go to the top and the bad ones are weeded out... Remember companies ARE looking for good developers all the time, you just have to make yourself heard and do something worth showing (this doesn't necessarily mean applying to a company. Get creative. There are a lot of ways to stand out)
Good luck OP
I was applying to both remote and office-based offers, but only in my location (which suffers from lack of good job offers currently-most of them are dedicated for students with low payment).
It took me 2months to finally land in a new workplace)and it is remote which was my very dream form of working-I've done some remote freelance in the past and loved it)
I've applied to dozen job offers, most from LinkedIn, some from remote portals mentioned by other users in this thread.
In the end I've got a job from a job offer that was on stackoverflow, so maybe check there because I don't see anyone mentioned this as a source of job offers.
Keep on trying, as You can see it won't magically come to You without any action. Good luck!
I have something else to add. Once you do get a gig and start on it, budget some time and money to grow your network. There's no real substitute for a real circle of influential and well connected contacts in my experience. Perhaps attend conferences related to technologies that you're interested in, participate on online fora (mailing lists, stack overflow etc.) to help people with their problems in exchange for visibility, get a linkedIN profile, go to local user group meetups (or atleast attend nearby ones less frequently if you're in a city that doesn't have many such groups).
It's flexible part-time remote work, and you don't have to find clients yourself.
Meanwhile -- can you do canvas/d3/realtime charting type of stuff?
Once you pass their screening process, you will get jobs in one or two weeks
I would suggest you to have a LinkedIn profile and update it regularly and start building the network now.. It is never too late.Meanwhile, for the job which you cannot wait for, there are many remote job portals like remoteok , weworkremotely , remote.co ,remotive, workingnomads, WFH.IO ,dribble etc which you can try .. But I would suggest you check angellist (angel.co) which offers jobs from mainly startups all over the world.
Another tip : Apply to local companies which are offering full time jobs , attend the interview and try to convince them to offer you a work from home based role ( It might work out, you never know).
Hope you find a suitabLe job real soon.
All the best ! :)
Wasn't the question about business applications?
Redeeming answers: ERPNext, Odoo, OpenERP, OpenERM
Nginx has a lot of respect on the market for handling high concurrency as well as exhibiting high performance and efficiency.
I don't even have to speak about the Git architecture. It speaks plainly for itself.
There's a series of books called The Architecture of Open Source Applications that does justice to this topic
None of this is arguing that one or the other style of architecture is "better" per se, but rather the architectures are different because they were in the end optimized for different kinds of development organizations.
Most business applications remain fundamentally a three-tiered architecture, with the interesting stuff today tending to happen in how you slice that up into microservices, how you manage the front end views (PHP and static web apps are pretty different evolutionary branches), and critically how you orchestrate the release and synchronization/discovery of all those microservices.
(None of which is directly an answer to your question, but is more meant to say that lots of the most interesting stuff is getting harder to spot in a conventional github repository because much of it is moving much closer to the ops side of devOps)
Frappe also lets you build extensions (apps), add hooks to standard events, has a built in RESTAPI and more. Here is a quick overview https://www.slideshare.net/mobile/rushabh_mehta/frapp-framew...
Disclaimer: see my bio
Spree has a clean API, clear models, front end and back end, extensions, and command line tools.
Especially take a look at the models:
But this chapter is great: http://www.aosabook.org/en/500L/an-archaeology-inspired-data...
Something that's expandable by multiple departments, expandable business-specific logic, modular, plug-in infrastructure, the ability to work with multiple authentication schemes, etc....
Take a look at Liferay Portal: https://github.com/liferay/liferay-portal/
Edit: fixed all my typos.
OpenERP, now Odoo, is written in Python.
OpenEMR is written in PHP. It dates from a while ago, but has been mostly updated to the latest PSR standards.
Might also try OrangeHCM, but not sure what those guys are doing these days.
It's part of the book, "Architecture of Open Source Applications", which has many such essays. This one is freely available -- and quite good.
Graphite is used for the business purpose of simple & fast real-time analytics for custom metrics inside an organization. It was built inside Orbitz and is now widely used at many startups, including my own.
Graphite is now a vibrant open source project with a community around it here:
Anyway, here are some projects which I can recommend by its source code:
* OpenBSD. Also the other BSDs. Plan9. And the BSD tools. Linux is a bit bloated but maybe it has to be. I don't recommend the GNU tools.
* WebKit. Also Chrome. Firefox not so much, although maybe it improved.
* Quake 1-3, as well as other earlier id games. Really elegant and clean. Also not that big in total. Doom 3 has become much bigger in comparison but again maybe it has to be.
* CPython. Anyway interesting also for educational purpose.
* TensorFlow. Very much not Theano.
I really enjoy reading the source code of most projects which I used at some point. Some code is nicer, some not so nice, mostly judged by how easy it is to understand and how elegant it seems to be. In any case it really is rewarding to look at it as you will gain a much better understanding of the software and often you will also learn something new.
If you dont want to do youtube case studies there are also books to read about distributed systems. Also reading about cloud architecture can help.
The learning curve to go from I've never heard of them to reading about them, to installing them and using them was very small at least for Consul, Nomad, and Vault.
They use a lot of interesting stuff, like FRP, lenses, etc.
"On January 16, 2008, MySQL AB announced that it had agreed to be acquired by Sun Microsystems for approximately $1 billion"
Edit: sorry, missed the question entirely. I thought OP said "open-source businesses worth studying"
Almost four years later, we've raised a couple hundred thousand in equity and grants (mostly the latter, happily), and I'm working full-time on it. Equity is from Intel Capital and grant awards are from Stanford, The Tech Museum of Innovation, and NewSchools Venture Fund (a nonprofit backed by various SV family offices).
I will say that there is lots of luck in where posts end up. My second post about BeeLine Reader when we released our Chrome extension hardly got any attention. This was a big surprise, given how popular the (very alpha-version) bookmarklet had been.
original post: https://news.ycombinator.com/item?id=6335784
current website: http://www.beelinereader.com
We're looking for a rails dev and a dev with PDF experience, BTW! Email developers@ ..
I must say I never expected this amazing reaction from the community.
-  https://news.ycombinator.com/item?id=13170837
-  https://www.robinwieruch.de/the-road-to-learn-react/
Paying customers now include consultants, journalists, realtors, insurance companies, and others! There are few developers who use it because it saves them time, but they're the exception.
My actual most visited website is one that has hit the front page, but not because of my "Show HN".
We got some awesome customers (including some big names) from our HN launch, and it kickstarted out growth. If I remember correctly, we finished out the week at about $4k MRR... nothing compared to now, but at the time it felt awesome to be making money.
We've come a long way since then, but our Show HN was a great way to kick things off!
Since then I have released version 2 which has the ability to add fx to the instruments, use MIDI devices and lots more. It gets a few sales a week with traffic still coming from those music sites.
Over time I got 60k+ downloads and sold it for $8.5k :)!
Original link: https://news.ycombinator.com/item?id=7950866Story: http://www.germanespitia.com/habit-streaks
Project: http://symbolflux.com/projects/tiledtext [video]
Original Show HN: https://news.ycombinator.com/item?id=5306155
By now largest streaming search engine in the world at Alexa/Similarweb Top ~#4700 global with around 12 million unique visits per month. Not too shabby all around.
Launch post: https://news.ycombinator.com/item?id=9005641
It helped us realize that a web-based version of our "CodeAcademy for Excel" product wasn't going to cut it. We built an integrated version that actually lives inside of Excel and won a contest with Microsoft.
I talk a little more about what happened here:
The project went from 50 to 550 stars overnight, eventually reaching 3,000-something stars when the hype died down. (it's now at ~14,500 stars and growing)
That submission kickstarted my career. Among other things it led to me speaking at over 20 international conferences, to being featured in Forbes Austria and to the privilege of being employed as a full-time open source developer. (which eventually led to the creation of styled-components)
I wrote a bit more about my journey on my blog a while ago too in case you want the longer version: https://mxstbr.blog/2016/12/a-dream-come-true/
It's been an awesome ride and I wouldn't be where I am without HN!
I was in college then and found making a well formatted resume a huge pain when I was applying for internships. I met my Co-Founder also via that particular post, and went full time on it after passing out of college.
We are bootstrapped, pay ourselves well and work remotely. Not sure if that qualifies as a 'big' success, but we receive these kind of comments from our users that make us super happy - https://www.resumonk.com/testimonials
Show HN Link: https://news.ycombinator.com/item?id=6046227
Status: Still growing, almost 100k users, vibrant leaderboards
Project 2: CLMapper Chrome Extension (https://chrome.google.com/webstore/detail/clmapper/omonmigal...)
Show HN Link: https://news.ycombinator.com/item?id=4324884
Status: Unmaintained. Reached peak of over 4k users, now under 2k and decreasing
It was on the homepage for around 24 hours I think. We had ~500,000 unique sessions during the first month after the launch. Hacker News played a big part in that.
We stopped actively working on the project, but it's still being used by more than 100,000 people every month.
I wrote a little case study about the whole thing here - http://codetree.co/case-studies/movieo
Not even one upvote though. Do any of these posts get on the homepage organically?
LE: 2nd (and last) try: https://news.ycombinator.com/item?id=14841172
A few of them rank on google and get consistent traffic. There's definitely a lot of randomness in getting to the front page. If I were to do it again I think I'd collect emails or have some kind of plan for the traffic.
Subscribers increasing slowly but steadily. ShowHN didn't lead to any direct sales as far as our reporting shows but doing a "ShowHN" is something of an internal milestone for us and the comments have been interesting a good motivational boost. Hopefully have more to Show HN in the future!
It was a solo attempt at the beginning. Right now there are 5 of us working on it and building a business around it.
On this day, it was also featured on Product Hunt and The Next Web leading to around 30k uniques across 2 days. Traffic is now nothing like that unfortunately.
One nice upside is that when I launched, it was picked up by a manager at BT Shop, a fairly large online electronics store in the UK, and I have released a variant of the app which uses their own affiliate scheme and branding. They've integrated this into one of their category pages at https://www.shop.bt.com/category/cables-and-adapters,cables/....
Led to a large traffic spike, and attention from a company that would acquire it roughly 18 months later. The team has grown from 3 to 100+, with over 1m registered users. Although the domain has changed and it looks like nobody bothered to keep the original registered ()
The traffic bump and feedback was motivating and helpful to know I was on the right track with my content. I also learned there are some comments you just need to ignore and focus on your own vision :)
edit: my traffic was lower than I originally remembered, it was ~5k per month, not 25k in mid-2014
Response was great: lots of sign ups and feedback, but I haven't had time to do anything. Started a new job and moved cities. Everything is open-sourced if anyone wants to take a crack: https://github.com/tmm/notational
Basically, I've built this simple project to see if there was any commercial interest in building rest apis using mock data, and I am almost certain that the answer is no - which is fine by me, i'm waiting for the next idea.. :)
Edit: By the way, besides simple SEO with google, I haven't bothered doing any marketing at all with this project, because I'm being mostly lazy, also because if the idea was any good, it should (hopefully) had success initially, and also because I suck at marketing..
Besides the traffic increase, the repo trended on Github and now we have +1,400 stars.
tl/dr: HN provided a nice boost, but websites don't grow if you don't feed them.
Backstory: ~5 years ago I started driving a taxi, for fun & adventure & freedom. And to support myself, while trying to figure out how to finish recovering from a head injury . After 8 days I made an account on kuro5hin.org (k5) & started blogging about my experiences.
At first I was just trolling k5 user "Zombie Jesus Christ", who had grand ambitions to help people, but was handicapped by a history of mercury poisoning -> mental illness. My point in being 'TaxiCabJesus' on k5 was to show that it's the little things that count. After a 3.5 years I'd learned a lot about what people actually experience (which I hadn't appreciated due to my upper-middle-class upbringing), and was forced into retiring from the taxi driving gig...
One day kuro5hin.org went away. K5's absentee founder Rusty hadn't prepared for a datacenter move, and the site was lost. I posted in HN submission RIP kuro5hin that my story "Electronic Taxi Dispatch, v1.0" was last to post , and one of you responded that you appreciated my k5 submissions & encouraged me to re-post them at a site of my own.
I still intend to write a Taxi Wars trilogy: A New Hope, The Vultures Strike Back, and Return of the Drivers. I also have some other stories to tell. Retrospectively I realized that I was learning about the various 'predicaments' that people find themselves experiencing. Draft titles include:
The Predicament of 'old people' / Ordinary Rendition: The Public Servants' Quagmire / the predicaments of doctors and patients
I joined Toastmasters several months ago. Recently I gave a speech that's based the 'predicaments of doctors and patients'. It went over pretty well, which was motivation to work on my little site...
It was up for a nice 24 hours and while I got a huge amount of traffic (10,000 page views) it resulted in only 100 accounts.
I'm not giving up though - I'm still constantly improving it and it has come quite far since the first Show HN version :)
I submitted a Show HN the other day for a natural language chatbot that gives harm reduction info about drugs and it pretty much went nowhere fast. Got way more traffic from being on the front page of reddit r/drugs (and arguably a more useful demographic)
To the people asking, I definitely think there is a high amount of luck getting anything on the front page of HN. Just has to be right time, right place, but it's inspiring to read about people who have seen their businesses launch, in part, from that brief exposure.
The project: https://urlroulette.net/
I actually wrote a post about being on the HN front page: https://hackernoon.com/urlroulette-24-hours-on-hacker-news-e...
It's also available to read for free online (https://leanpub.com/the-tao-of-tmux/read).
tmuxp (https://tmuxp.git-pull.com), a tmux session manager, gained over 1k stars over the years.
vcspull (https://vcspull.git-pull.com), a repo sync tool, compare to myrepos. Received a lot of valuable feedback on documentation that I ported to other projects.
MindMup (https://www.mindmup.com), an online mind mapping tool appeared in 2013, and got a nice traffic bump that day, it took about two years to reach that level of regular traffic. the site now gets between 400 and 500k visits monthly during busy school periods (seems to be mostly used by educational users), and grows around 5% per month.
ClaudiaJS (https://claudiajs.com) is an open source tool that helps deploy Node.js projects to AWS Lambda and API Gateway easily. Originally built for MindMup, we decided to spin it off as a separate open source tool. It appeared on HN about a year ago, and according to NPM stats now has roughly 85K downloads.
We are consistently getting a good rating in Play Store  and thanks to HN we now have around 50 daily active users playing 75-100 games. Meanwhile, we are developing the features that were suggested in the comments and we felt are required.
 https://play.google.com/store/apps/details?id=com.buildmyvoc... - Two-Player Vocabulary Game
Show HN Links: https://news.ycombinator.com/submitted?id=peterburkimsher
Summary: Chinese-English word-for-word translator for education.
Result: 16 points, 4 comments, still no idea how to market it.
Show HN Link: https://news.ycombinator.com/item?id=13983085
Summary: A new diff algorithm
Result: About 50,000 visits to the web site, which then averaged about 1000 visits a day. Not much repeat traffic from those visits, but the daily traffic is now about 1200 visits a day.
Synopsis: Elm arch. in Haskell, but supports isomorphic js
Show HN link: https://news.ycombinator.com/item?id=14685677
Status: Still kickin', ~17k views, top 15 repo globally on GH (for a day)
- They got me around ~3000 subscribers for hugobots.com which I have been promoting through my repositories (it would have been much more; unfortunately, I forgot to put the link on the first day while the repository was on the first page. I put it on the third day and the emails that I got were mostly from the traffic from the people sharing the post on twitter/facebook/reddit etc)
- One of the project (developer roadmap) got me two sponsors paying me around ~1000$ each every 6 months for just putting their links in the project readme.
- Follower count on my github profile was around ~100 at that time; now it is about 2.3k
- Had been approached for freelancing gigs and was able to make connections.
I submitted RemoteBase 400 days ago: https://news.ycombinator.com/item?id=11890991
For the first time, someone paid for something I made from scratch. I wrote about what I learned from this launch: https://sung.io/lessons-from-successfully-launching-remoteba.... I have since gotten a job, and the site sort of stopped making money. But I am still iterating on it.
Also submitted Dnote 100 days ago: https://news.ycombinator.com/item?id=14031649
I pitched it to a live audience shortly after: https://sung.io/pitching-dnote. I never got around making an actual sale.
Compare to catfs (https://github.com/kahing/catfs/) which I recently posted but did not make to front page, and right now it's at 14 stars. I would say both projects have similar audiences comparable in complexity, which would mean front page on HN gave goofys a 20x or so boost in terms of github stars.
Note that the first time I posted goofys it did not make it to front page. @dang emailed me to re-post it and the second time it was boosted to front page.
933 HN users are signed up and have received 38109 email notifications so far.
2. Show HN: A date range picker for Twitter Bootstrap ( http://daterangepicker.com )
5-year-old open source code that averages 3000 visits per day and 750 git clones per day.
My Show HN (https://news.ycombinator.com/item?id=14778497) made it to the homepage, but I don't think its what you're asking about. My site is just a personal site with random content so its no different than before my post.
I still make good money on Ghostnote and is working on new features plus a new SAAS service.
This one is alive but not really active. Around 8K users on a mailing list. If anyone want to take over this project pm me.
This was fun to do but just a project we did for fun.
I still get a regular stream of traffic now, and there are tons of others making sounds for UI. So, hopefully it helped kickstart that market a little.
I'm in the process of creating a second set of sounds now to try and keep the interest alive.
I did not notice it, and the traffic brought down my tiny blog with the 25.000 visits I got the next couple of days.
It was a really cool feeling, and I learned what measures to take to keep my self hosted WordPress blog up in these cases. Unfortunately I never needed it afterwards. If someone is interested in a write up, let me know so I can make one.
Since then my blog gets about 40 visits a day. Only a small amount, but it still satisfies me and keeps me writing.
Also a lot of complaints over my poor choice of language, and "why don't you open source it, we'll do a JS port". I did. They didn't.
Anyway I don't think it's seen much use since that (mostly positive) experience - if you're willing to download and execute a java app you still can:
Posted in November 2016. Got a ton of traffic for about three days (~20k users/day). Now DAU is around 10-15. More a side-project type site, never was intended as a business.
I have just under 900 people signed up for an email list of hand-picked talk recommendations - about 200 of these were from HN, and a couple people sign up every day.
Based on the feedback I got, I'm working on an add-on to send email alerts with talks based on people's interests (if you want in, contact me, I need a few beta users)
Got ~1500 active subscribers on the newsletter, some web traffic, some passive income, a lot of interesting contacts, met some cool people in Zurich, where I live. Overall, really glad I did it.
Original post here - https://news.ycombinator.com/item?id=12365693
I got a few hundred sign-ups but not much else; I am still maintaining the site but have not found as much time as I would like to develop it.
Here is the HN post :
The traffic spike, remained a spike and didn't continue long. But it gained a few regular users. I run my own blog with HexoPress (http://hexopress.com).
Show HN: https://news.ycombinator.com/item?id=13687353
Summary: Simple web analytics
Result: Lots of great feedback, added about 100 active users
I got a good spike of traffic from Reddit and Medium, HN a bit less.
When it was first posted it hit front page, then hit reddit, melted my machine. I started moving to static files, but not in time! HN removed it from the homepage.
I think the exchange rate between Github stars and Facebook/Twitter Likes is favourable. Tinder Swipes, not so much.
Not much of a BTC/Github-Star exchange yet.
I had around a 30% increase in users and around $500 in sales over the following couple of weeks, which was pretty great.
https://certsimple.com now has clients including Superdry, CrowdCube, The Motley Fool and most of the fintech startups in London.
We're doing well, and hiring! :)
Read https://news.ycombinator.com/showhn.html. Point users to something they can try out for themselves. Don't require signups or permissions that aren't obviously needed. Avoid popups. Avoid overly slick website design and (especially) marketing language: HN users tune all that out and in fact it hurts you. Text and text-based layouts are good. Information density is good. Avoid super-large fonts and excessive pictures, they make you look lightweight. Put intellectually interesting details up front. If you're launching a company, corporate branding is fine; otherwise it's a negative, so tune it down.
Add a first comment to the thread with the backstory of how you came to work on this and explaining what's different about it. This tends to seed better discussion.
Make it easy to tell what the product/project is; otherwise the discussion will consist of "I can't tell what this is". Link to any relevant past threads.
Your primary mission is to engage intellectual curiosity. If you try to sell HN readers on your stuff, you'll evoke objections. Engage their curiosity and they will sell themselves.
Mention areas you'd like feedback about or open questions. Surprising or whimsical things that came up during the work are also good--they are unpredictable and that makes them interesting.
A little humor is ok; more than a little feels presumptuous. Don't be chummy, just answer straightforwardly. Don't address other users by their usernames (it's not the convention on HN and feels out of place). Don't introduce yourself more than once.
Don't say nice things about yourself or your work. It invites comeuppance. Instead, be humble or even mildly self-critical; then readers will look for nice things to say, and even when finding fault, won't make as big a deal about it.
Don't ask for upvotes. Our software ignores most promo-votes, plus HN users notice them and get mad. Especially make sure that your friends don't post booster comments or softball questions. HN users sniff that out a mile away and then we have to kill the thread.
Email us a link to your submission when it's up and we might be able to give you some help or make sure it doesn't get flagged.
This originated as advice for YC startups but I always liked the pg/yc tradition of giving the same advice to everybody.
I "follow" several which are mostly defunct, but in terms of blogs that still feature active updates:
Evan Klitze's blog: lots of topics around Linux, C++, etc. https://eklitzke.org/
Sutter's Mill: lots of "state of the world" for C++, but also context, history, etc. https://herbsutter.com/
IT Hare: C++, game programming http://ithare.com/
The Erlangelist: Erlang/Elixir http://theerlangelist.com/
null program: lots of miscellaneous topics http://nullprogram.com/
Fluent C++: the name speaks for itself http://www.fluentcpp.com/
Another Programmer's Blog: Linux, C, C++, C#, MSSQL https://www.stev.org/
Aphyr's (aka the guy behind the Jepsen distributed system test series): https://aphyr.com/
Fred Herbert, the author of Learn You Some Erlang: http://ferd.ca/
Eevee, who posts a mishmash of stuff about programming in general but these days is mostly focussed on games: https://eev.ee/
Tef/Programming is Terrible, which features strong opinions about programming/programmers: http://programmingisterrible.com
Matt Kline, who posts mainly about low-level stuff and embedded systems: http://bitbashing.io/
Evan Miller, whose blog topics are wide-ranging: http://www.evanmiller.org/
tptacek, who can be seen tirelessly defending common sense in the comments on this very site: https://sockpuppet.org
Sonniesedge, who talks about front-end stuff and the human impact of programming: https://sonniesedge.co.uk/blog/
Carin Meier, who posts most often, but not exclusively, about Clojure: http://gigasquidsoftware.com/
Also Julia Evans, as mentioned in the OP.
Eli Bendersky http://eli.thegreenplace.net/Jeff Preshing http://preshing.com/
The URL is very misleading, his blog is about Objective-C (and now Swift) internals, in a very loose way like an "Old New Thing" for Apple's tech stack (w/o the insider knowledge parts, he's not an Apple employee).
A few months back I wrote a Reddit comment listing "just" the high-quality React-related blogs that I read : https://www.reddit.com/r/reactjs/comments/5t8loz/what_are_yo... .
I read a lot more besides that. To pick out just a few:
- Scott Hanselman: https://www.hanselman.com/blog/
- Robert O'Callahan: http://robert.ocallahan.org/
- Henrik Warne: https://henrikwarne.com/
- Andrew Wulf ("The Codist"): http://thecodist.com/
- Lin Clark: https://code-cartoons.com/ . (Her actual blog hasn't been updated in a while, but she's also posted many in-depth articles to Mozilla organization blogs over the last few months.)
And while I don't think
It's a curated and tagged list of company blogposts - published every weekday (or whenever I get 5-10 good links for the day)! As of now it is limited to only engineering blogs.
To know more, visit : https://www.discoverdev.io/about
He's the guy behind Have I Been Pwned (https://haveibeenpwned.com/).
It's like a daily readers digest of software development stuff. And the tagline just quoted is a little out of date - it's got a strong .NET leaning but that's not the only thing on there.
There's also an OPML file that you can import into Feedly.
Its a hardware/hardware startup blog written by what looks like a full(ish) stack hardware VC.
a few of my favorite blogs:
- http://blog.acolyer.org for fantastic daily summaries of CS papers.
- http://stephaniehurlburt.com/blog/ -- she has a business creating a new compression algorithm and I love reading about it
- https://rachelbythebay.com/w/ is pure gold for weird debugging stories
- https://accidentallyquadratic.tumblr.com/ is always a fun read
- http://wingolog.org/ on building compilers
- http://composition.al/blog -- Lindsey Kuper on her programming languages research
- aphyr's blog on distributed systems, of course
- http://www.pgbovine.net/writings.htm -- Philip Guo is a CS professor whose blog on his experiences in academia I really like
- http://whilefalse.blogspot.com by Camille Fournier, mostly on engineering management
- http://larahogan.me/blog/ by Lara Hogan, on engineering management
Also I think this comment from Dan's blog (https://danluu.com/about/) is very true and important:
> I view that as a sign theres a desperate shortage of understandable explanation of technical topics. Theres nothing here that most of my co-workers dont know (with the exception of maybe three or four posts where I propose novel ideas). Its just that they dont blog and I do. Im not going to try to convince you to start writing a blog, since that has to be something you want to do, but I will point out that theres a large gap thats waiting to be filled by your knowledge. When I started writing this blog, I figured almost no one would ever read it; sure Joel Spolsky and Steve Yegge created widely read blogs, but that was back when almost no one was blogging. Now that there are millions of blogs, theres just no way to start a new blog and get noticed. Turns out thats not true.
I really think there is a shortage of understandable explanations of technical topics, and I see new people writing great posts clarifying complicated technical topics all the time. And I find people really do notice/appreciate it. So if you're excited about blogging, maybe do it :)
I'm also a fan of the comics the author Peter Krumins puts out https://comic.browserling.com/
Lots of high quality code examples in a variety of languages.
Enough programming news for a lifetime, or two.
* Blogs with a math focus:
* Blogs with a programming languages focus:
* Blogs with a UI design focus:
* Blogs with a graphics / 3D rendering focus:
* Other interesting / more general programming blogs (many of these have a "systems" focus):
Also I use the open source Django project Newsblur as my RSS reader, and follow Samuel's blog: http://blog.newsblur.com/
A couple others I like:
This is an almost random selection of some of the blogs that I subscribe to.
- scott hansleman
- coding horror
- decyphering glyph
- eric lippert
What you can do, however, is make it hard so that the vast majority of developers can't do it (e.g. My tech crawl billions of pages, but there was a whole team dedicated to keeping it going). If you have money to spend, there's Distill Networks or Incapsula that have good solutions. They block PhantomJS and browsers that use Selenium to navigate websites, as well as rate limit the bots.
What I found really affective that some websites do is tarpit bots. That is, slowly increase the number of seconds it takes to return the http request. So after a certain amount of request to your site it takes 30+ seconds for the bot to get the HTML back. The downside is that your web servers need to accept many more incoming connections but the benefit is you'll throttle the bots to an acceptable level.
I currently run a website that gets crawled a lot, deadheat.ca. I've written a simple algorithm that tarpits bots. I also throw a captcha every now and then when I see an IP address hits too often over a span of a few minutes. The website is not super popular and, in my case, it's pretty simple to differentiate between a human or bot.
Hope this helps...
I remember working hard on a project for a year, then releasing the data and visualizations online. I was very proud. It was very cool. Almost immediately, we saw grad students and research assistants across the globe scraping our site. I started brainstorming clever ways to fend off the scrapers with a colleague when my boss interrupted.
Him: "WTF are you doing?"
Me: "We're trying to figure out how to prevent people from scraping our data."
Him: "WTF do you want to do that for?"
Me: "Uh... to prevent them from stealing our data."
Him: "But we put it on the public Web..."
Me: "Yeah, but that data took thousands of compute hours to grind out. They're getting a valuable product for free!"
Him: "So then pull it from Web."
Me: "But then we won't get any sales from people who see that we published this new and exciting-- Oh. I see what you mean."
Him: "Yeah, just get a list of the top 20 IP addresses, figure out who's scraping, and hand it off to our sales guys. Scraping ain't free, and our prices aren't high. This is a sales tool, and it's working. Now get back to building shit to make our customers lives easier, not shittier."
Sure enough, most of the scrapers chose to pay rather than babysit web crawlers once we pointed out that our price was lower than their time cost. If your data is valuable enough to scrape, it's valuable enough to sell.
The only technological way to prevent someone crawling your website is to not put it on a publicly-facing property in the first place. If you're concerned about DoS or bandwidth charges, throttle all users. Otherwise, any attempts to restrict bots is just pissing into the wind, IMHO.
Spend your energies on generating real value. Don't engage in an arms racw you're destined to lose.
There's a nice Github repo with some advice on blocking scrapers:
Finally, you could use a plugin in your Webserver to display a CAPTCHA to visitors from IP addresses that cause a lot of requests to your site.
There are many more strategies available (up to creating fake websites / content to lead crawlers astray), but the CAPTCHA solution is the most robust one. It will not be able to protect you against crawlers that use a large source IP pool to access your site though.
You really can't protect against this unless you start making the experience of regular visitors much worse.
Imagine if everyday they changed? It would make things a lot more difficult.
There would be disadvantages to actual users with this method like caching wouldn't work very well but maybe this alternative site could be displayed only to bots.
The crawler could get smart about it and only use xpaths like the 6th div on the page so maybe in the daily update you could throw in some random useless empty divs and spans in various locations.
It's a lot of work to setup but I think you would make scraping almost impossible.
Otherwise, your best bet (hardest to get around in my experience) is monitoring for actual user I/O. Like if someone starts typing in an input field, real humans have to click on it beforehand, and most bots won't.
Or if a user clicks next-page without the selector being visible or without scrolling the page at all. Not natural behavior.
Think like a human.
1) request fingerprinting - browser request headers have arbitrary patterns that depend on user agent. matching user agent strings with a database of the request header fingerprints allows you to filter out anyone who is not using a real browser who hasn't taken the time to correctly spoof the headers. this will filter out low skill low energy scrapers and create higher costs.
3) do access pattern detection. require valid refer headers. don't allow api access without page access, etc. check that assets from page are loaded. etc.
4) use maxmind database and treat as suspicious any access not from a consumer isp. block access from aws, gcp, azure, and other cloud services offering cheap ip rental.
Both worked, both worked well with http downloads and selenium (and common techniques). Neither worked against someone dedicated enough - but there are the usual tricks for bypassing them (which we used, to test our own stuff).
We also developed something in-house, but that never helps.
For example, a dictionary site. Someone tries to crawl your site after triggering your "This is a bot" code, serve bad data to every 20 requests. Mispell a word, Mislabel a noun as a verb, give an incorrect definition.
If you combine this with throttling then the value of scraping your site is greatly reduced. Also, most people won't come up with a super advanced crawler if they never get a "Permission denied, please stop crawling" message.
This is for Drupal sites. It has a strong firewall (csf) and it has a lot of crawler detections on the nginx configurations. It checks the load and when on high load it blocks the crawlers.
For ill-behaved ones, it depends on why you're trying to block them. Rate throttling, IP blocking, requiring login, or just gating all access to the site with HTTP Basic Auth can all work.
simple demo: http://botbouncer.xyz/
I ran it for awhile on some medium traffic websites that were being heavily scraped. It blocked thousands of IP addresses, but IIRC only received one Bitcoin payment.
The company I work for does a large amount of scraping of partner websites, with whom we have contracts that allow us to do it and that someone in their company signed off, but we still get blocked and throttled by tech teams who think they are helping by blocking bots. If we can't scrape a site we just turn off the partner, and that means lost business for them.
Also you can do frontend rendering, it's a bit larger roadblock but you can use phantomJS or something to crawl that.
IIRC there is a php framework that mutate your front end code but I'm not sure if it does it enough to stop a generalized xpath...
Also I used to work for company where they employ people full time for crawling. It will even notified the company if crawler stopped working so they can update their crawler...
- permanently block known anonymizer service IP addresses
- permanently block known server IP address ranges, such as AWS
- temporarily (short intervals, 5-15 mins) block IP addresses with typical scraping access patterns (more than 1-2 hits/sec over 30+ secs)
- add captchas
All of these will cost you a small fraction of legitimate users and are only worth it if scraping puts a strain on your server or kills your business model...
One technique that bothers me quite a bit is constant random changes in class names or DOM structure, which can make it more difficult. Not impossible but more difficult.
then Zip bombs.
Most crawlers will make hundreds of requests in five minutes, while legitimate viewers will make be bellow 100.
Some relevant shortcuts for filtering contents in Hackernews:
Top links: https://news.ycombinator.com/best
Newest links: https://news.ycombinator.com/newest
New comments: https://news.ycombinator.com/newcomments
SHOW HN posts: https://news.ycombinator.com/show
Noob Stories: https://news.ycombinator.com/noobstories
Noob comments: https://news.ycombinator.com/noobcomments
Best comments: https://news.ycombinator.com/bestcomments
User Leaderboard https://news.ycombinator.com/leaders
Front page: https://news.ycombinator.com/front
Some of the above are listed here as well. For formatting of submissions, you can refer here.
You can find more tips here
Another good resource is the three-volume set, "The Handbook of Artificial Intelligence ", also by Feigenbaum. It's a very thorough catalog of programs developed in the 60s and 70s that illustrate various techniques used in AI programs.
In the words of Alan Kay, "the past is vast".
ZeroNet (distributed TOR hosting):https://zeronet.iohttps://github.com/HelloZeroNet/ZeroNet
Though basically you're just routing .onion at a bucket.
Another thing to look at would be building on https://libcloud.apache.org/https://libcloud.readthedocs.io/en/latest/supported_provider...orhttps://jclouds.apache.org/https://jclouds.apache.org/reference/providers/
And providing a storage target. Though you have to consider the possibility of seizure of the host[s] by the service providers state.
(might be another more detailed API if you search around, QPX was originally a XML format with lots of power.)
Upload a video a week. Full complete projects. Post them on reddit.Reply to every comment. Ask for suggestions of next project.
After 3 months or 12 videos. Start posting 3 times a week of projects in progress.
After 3 months start live streaming twice a week.
At the 6 month mark start a Patreon. Even if you don't have any patrons immediately learn the platform and incorporate it into your videos. Set a goal that entices ppl to participate. Maybe one of your projects was a hit.
Hope that helps.
1) One-off mechatronics projects: museum exhibits, cable-cams for filming companies, puzzles for escape-rooms etc.
2) Regional distribution and support for a particular brand of lasercutters.
From what I see, he spends most of the time on first category but most of the revenue comes from the second.
Do you think you can make a kit that parents or other hackers would want to buy, like the build your own robots kits that come in pieces but include all the parts needed?
I know of one guy that got certified on shopbot and the laser cutter, and used that knowledge to get clients. He helps them go from idea to something repeatable.
2. Learn how to make it for a lot less than people will pay for it.
3. Partner with people who can market your projects.
Like a coin, every story has 3 sides. Hear them all before making judgement, and in general, opt for internalising judgement rather than publicising it.
I would note that I have investments in 2 of the largest storage coins.
SegWit will activate soon and after that we'll get things like lightning with super fast / cheap transactions and no more waiting for transactions to get confirmed.
I think we'll see a lot more mainstream use after LN and the price will either skyrocket or stabilize as a result.
1. Because it was first .
2. Because it's got a strong ecosystem .
3. Because a lot of new ones are scams, pump and dumps or unreliable.
The bleeding edge is much more interesting but also carries much higher risk and potential reward. You may find yourself expert in something that was technically very interesting but the timing is wrong or the specific tech fades quickly. So failure mode has you learning and relearning the latest frameworks trying to stay hip and potentially changing jobs frequently. On the other hand, success out on the bleeding edge might but you in an equity position in a start-up that turns into a unicorn.
I gravitated more toward the fringe and have built some cool tech but the start-ups and projects never reached market success and so I often reflect that had I picked more standard problems and tech and become expert in those I would have very high consulting rates today and plenty of work. As it is I have moderately high rates but I don't quite fit into people's mold and it is somewhat harder to stay busy with billable hours.
In the end you also have to live with yourself intellectually and emotionally. So although my more fringe focus hasn't yielded the best economic ROI - I have mostly enjoyed the choices and outcomes for my own life.
Personally, I think once you have enough experience you should be able to easily pick up new frameworks. I don't understand developers who try to define themselves by a single language or a single framework. You should be trying to pick the best tools available and learn as you go when required. You might be safe for a couple of years sticking to one thing but the industry is constantly changing so you should have a diverse skillset and always be learning.
The rest will follow.
I graduated Construction Engineering Technology, worked manual labour and moved into an estimating/quantity surveying role at a small construction firm. I was still site foreman at the time, and did just as much physical labour after graduating as I did before.
I decided physical labour was not the life for me. Got hired on at a small oil and gas engineering firm which engineers specialty products for large diameter pipeline construction. What was I doing? Reception. Answering phones. Doing dishes. Booking flights. All the administrative things which were (I thought) far and below me, the educated man.
Fast forward 6 months, I've had two promotions, two raises, and am having my IIBA membership and classes paid for. I still do some reception duties, but rarely.
I think there's a lesson to be had here. I was pretty upset moving into a role at the bottom of the pole, after being fairly "high up" in my old role (well, lots of responsibility even if the pay didn't quite reflect that). But, now I'm making more money than I was, with as much schooling as I (reasonably) want paid for. I showed up with a good attitude every day, and no matter how remedial I felt the work was, I put in 100% effort. It paid off. It's continuing to pay off.
tldr - Started as a receptionist, now am much more
I think that it qualifies as both unthinkable and impressive (albeit mostly in terms of collateral damage).
Soldier in the navy, served enough to fully retired. While being on retirement he learned HTML, CSS, PHP (around 2000s) and he is contractor to this day.
Manager in warehouse. He was working there for 5+ years starting as the lowest paid employee (some other physical jobs before that), decided to start coding. He learned front end dev in 2 years on online courses and landed his first dev job just before he turned 30.
TL DR: Air Force enlisted to CEO.
Edit; Now that I think about it, I also worked for another company who's CEO had started of enlisted in the military (army national guard iirc). So two enlisted to CEO stories.
Talk about a radical switch.
While my pay wage was something of a joke, although at some sites it was more than others, but 4 years later and a penny raise (boss probably did it as a joke), I realized, I was stuck in a dead end job with no opportunity to grow.
I went back to college, having no idea where I would end up. I continued working security jobs in order to help me pay my way through college. I was interested psychology (which I have my degree in) and eventually wanted to do something with career counseling -- helping college students find their place or helping people who decided to have a career change later in life.
During my latter years in college, I got out of security and worked for student life, which only paid some minimum wage, but I got to do a series of jobs such as orientation leader, secretarial work, and even campus card (I took photos of everyone), and even worked at a liquor store in downtown Chicago for a year.
Anyways, after college, I moved to Israel for a year, where I taught English to elementary and middle school students, and although it was nice, I wasn't very interested in working with kids. This nonprofit organization needed a website so I volunteered to do it for them and loved it. It gave me some insight into web design.
I moved back home and I was desperate for a job with no money and student loans to pay off... so I did the only thing I knew to do: I applied across the boards on Craigslist. I figured I had a college degree now, who wouldn't hire me? Only one company responded, a software company that licensed out their autobody shop software, a program created in Visual Basic 6.0. I had experience in it personally, having taught myself when I was like 11 or 12, but not any experience professionally, but they took a chance on me, and I worked there for a year and a half. I was hired to make the UI more friendly and fix bugs.
After that, tired of a tyrant boss, I moved on to full-time web designer for a Solar Panel company, working in Flash and did the animations for them that displayed on a kiosk for companies in their lobbies. At the same time, I also got hired as a web designer for the media (Solar Panel company on location from 8 AM - 5 PM, media company remotely from 6 PM - 2 AM). I was also freelancing on the side as a web designer. So for almost 2 years, this was my life.
I was eventually laid off from the day job and currently still have a job working for the media, but I am no longer working remotely. They gave me a choice: move across the country or get laid off. So being one of the only employees who chose to move, out of about 20, I negotiated a nice salary rise and they even paid for my move across the country.
If you asked me just a decade ago what I would've been doing today, I probably would have never guessed I'd be working as a web designer / web developer.