2,924 karma · joined March 19, 2008
Founder, ex-CTO of CircleCI.
email: allen@griffin.com, a at $my-username.com
This unusual for us, we had 100% uptime in February, according to pingdom (haven't gotten the email for March yet).
At CircleCI we're building the next generation of developer automation: amazing Continuous Integration and Deployment. We have traction and revenue and funding and great customers. Our customers love us, because we move quickly, build great things, and provide amazing support. Everyone talks to customers a lot.
We're still a small team, so you'll have a large impact on company culture. We're highly influenced by Valve's Employee handbook, and have as flat a structure as we can. We're looking for frontend engineers (JS), designers (must be able to HTML+CSS), and backend engineers (Clojure). Being a mix of those is of course welcome! We lean towards senior experienced engineers, or junior engineers who can display great talent.
We're also looking for engineers for Developer Success and Developer Awareness positions. Since we have an incredibly technical product, and selling directly to developers, the dev-awareness positions (think marketing, but much more dev-oriented: dev evangelism, writing interesting blogs, CRO, analytics, etc - think a patio11-style engineer) require significant development experience. Dev-success positions are a good fit for engineers who like working with people and building relationships with customers.
Check out our jobs page at https://circleci.com/jobs.
Sometimes, not even then: "One dispensary owner told me about taking seven thousand dollars in cash to the Washington Department of Revenue, to pay his monthly tax bill. He was turned away, because the teller refused to deposit his “drug money.”"
http://www.newyorker.com/reporting/2013/11/18/131118fa_fact_...
One other thing to note is that office space, while expensive, is much cheaper than your developers. You can easily get 10-20% more productivity with a better working environment.
Also, that "collaboration" that people value? None of that is getting written down. Circle's team is already half remote, so placing a strong emphasis on 'library voices' means more communication happens over hipchat and email. More things get written down, and the remote employees are able to collaborate more, and there's a written record of "oh yeah, on Friday 2013/01/03, Paul and Allen thought it was a good idea to try X.
[edit: re-installing GPGMail Works For Me]
- Frontend Engineer: You'll work on improving the page responsiveness, adding new features and improving the out-of-the-box experience and UX. Our frontend is a single page javascript app, using HamlCoffee, Less and Knockout. We have a lot of interesting design and data-visualization problems that need to be solved, as well as A/B testing, landing page creation and funnel optimization.
- Backend Engineer: Our entire server is written in Clojure. We're looking for candidates with experience in any "weird" language: Clojure, Scheme, CL, Haskell, OCaml, Erlang, Brainfuck, C. Experience w/ Linux & DevOps is also a plus.
Yes. Redis and Elasticsearch are already installed. firefox, chrome, phantomjs, casperjs are already installed.
Build pipelines are coming. I guarantee you they'll look nothing like what is available on Jenkins. They might be more opinionated than you like, but for the people they do work for, they'll save a lot of time.
> Keeping the build green involves my team figuring out what we broke. Faster build times help, is that what you mean here?
That's part of it. The other part is that we are a high-touch CI service. This week, rubygems had tons of SSL problems. Debugging that, and bugging the #rubygems IRC guys was "outsourced" to me. Thousands of developers didn't have to individually debug sporadic rubygems failures because I was doing it for them.
We see common bugs and test failures often enough that we have in-app warning messages that say "hey, it looks like your selenium tests are failing because firefox auto-updated on you. If you upgrade your selenium gem/jar, that will probably help". Those are things that won't get added to Jenkins.
Before Circle, I led multiple engineering teams, building multiple products from "nothing" to "shipping, and making lots of money". I set up buildbot, hudson, bamboo, jenkins, and some other things I don't even remember the name of. I was always the build guy, I was always the one that said "yes, we will be testing, yes, the build will be green." Those were controversial statements back then.
I've been there, done that, and I didn't want to set up Bamboo again. I didn't want to debug why the tests failed. That's why I built Circle.
Our customers, most of whom switched from Jenkins, will tell you we are a steal.
Maybe your project is still simple. Maybe your platform is fairly stable. But for most professional developers, keeping CI running and green is a challenge. Even at Circle, I spend more time than I'd like debugging the test suite. But we're fixing that. Every day is spent making devs lives easier.
Jenkins costs you nothing per month, but your developers cost money, and Circle's hardware is faster than digital ocean, and the cost of keeping the build green on Circle is lower than the cost of keeping it green on Jenkins anywhere else. If you're running a startup, or a tech company, odds are very good that salary is the number one cost center. Optimizing your Digital Ocean bill is penny wise, pound foolish.
The fact remains that Mongo just doesn't scale, and 10gen was never honest about that.
For a long time though, the Linux kernel has been compiled to optimize code-size rather than 'performance' (according to GCC). Why? Because the kernel gets involved in every syscall the OS makes, so the kernel code gets paged in and out very frequently. Loading a little less code from RAM means everything goes faster.
step 1) worry about how to get big enough that people even know who you are, and think that DDoSing is worth their time
step 2) worry about how to deal with the DDoS
completing step 1 is much, much harder :-)
On the far reaching consequences side, I didn't realize how important the choices we made in the first month were. Some of those are still with us.
It's basically the same UX as you're used to in Java, except the info comes from asking the running process, rather than parsing statically.
For example, at Circle, we're still experimenting with yml syntax for user-specified parallelization commands. Each different syntax we've looked at has different implications for what kinds of problems are simple, and what kinds of problems are expressible, using the syntax.
So yes, standards, but not yet :-)
When you're getting started with Clojure, it's easy to do everything that needs to happen "later" or "in the background" as a future. Once you go to production, you realize that about half of those futures should have been jobs going into a queue somewhere, with logging and guaranteed delivery, retrying on another machine, if necessary.
I haven't gotten to the point of writing that library, but I probably will, soon.
That first $1/$1,000/$1,000,000 is the hardest. Good luck.
That being said, what is idiomatic in CL is not necessarily idiomatic clojure. For example, pg tends to like anaphoric macros, (http://en.wikipedia.org/wiki/Anaphoric_macro), while Clojure tends to eschew them.
I didn't realize there was a CL version of the compiler, cool! Thanks for the link.
As to your linked doc, emphasis added:
> In some situations, read and write operations can yield their locks.
> Long running read and write operations, such as queries, updates, and deletes, yield under many conditions.
In practice, I've been bitten hard by this. A new feature rolls out, and users can't log in anymore, because a query is taking 2 minutes to run.
It doesn't. Three words: "global write lock". Writes block reads, reads block writes. Implications: if you run a query in production that doesn't hit an index, all traffic stops. The notablescan setting is a very, very good idea. This also means all queries must have an index, so Mongo ends up with more indexes than say, postgres would.
It's impossible to configure a clustered mongo environment to not lose data: http://aphyr.com/posts/284-call-me-maybe-mongodb
Sharding configuration is baroque, and limited.
I'd love to see http://eagain.net/articles/git-for-computer-scientists/, but for every DB technology.