120 karma · joined January 9, 2013
It's weird but for some reason that community is full of enough people who tolerate this kind of thing and even fall for it that it made me sick of Bitcoin. I like the idea behind BTC but the sleaze factor was too high for me to stick around.
Outside of school, attend meetups. Learn to code, but not to build it yourself, but to have an excuse to be around developers. That's a reason to be at meetups. There are also meetups specifically for people who are looking for cofounders.
You can also post online (as you did here), to find co-founders, or on things like craigslist in the jobs section.
Other options are to outsource on e-lance or something like that. People offshore can build stuff pretty cheap, but the quality is terrible once you want to scale or maintain it. That shouldn't matter too much because if that becomes an issue, that means you're succeeding.
"The Cloud" as a robot that can't be interfered with by the operating company is a stupid notion. If that were the case most cloud and SaaS companies would go out of business because they'd never be able to fix problems that come up. Most systems can be looked into, and can be tweaked in numerous ways.
What I do now is, well, I'm going to actually test stuff while I'm coding anyway right? Regardless if I'm doing TDD or not. Well unit tests give me a useful harness where I can write those tests, instead of hundreds of Console.WriteLines. It's basically not much more effort than Console.WriteLine() style "testing", except you are left with some reusable artifacts at the end that may come in handy later on.
When the Datastax guys dumped their code the way they did though, it uppped the drama factor a bit.
I'm not surprised by your 90% no-solve stat. Candidates I interview who put Java/C# on their resumes can barely "write a function that returns true if the first letter of a string parameter is capitalized". At least half flat out can't do it.
No tests yet. I really need to fix that...
I have a few tricks to get myself started on tasks like this. First, is to close the browsers, and close everything except my IDE and the other development tools I need for the task. Close any other code projects that aren't directly related. A reboot often works. Then, I'll open a clean .txt file and just start writing, sort of stream of conscious style, about what I have to do. It helps to get a once sentence objective down on paper or on the screen, because when I'm unmotivated it's very easy to lose focus and move onto something else, so having that objective written down on paper helps remind me what I'm supposed to be doing. If the task is big enough I'll break it into smaller ones and write those down. Each task should be it's own self contained problem.
Most often when I am unmotivated it's ebcause I have to research before I can proceed with a task, and while I like research, if it's not something I'm into I'll still have a hard time motivating myself to do the research. So for each task, if there is something I don't know, I'll write out what I need to do, what I need to figure out, and if I know of different approaches to solving the problem I'll list all of them out and list the pros and cons for each one. Once that's on paper, it's usually pretty clear what the way forward is. If there are open questions, i'll put tasks to research them.
This sounds tedious but it normally takes less than 10 minutes to do, and i end up with a list of tasks, that are either research based, or implementation based. And I get started on them. I mark them each "DONE" (or cross them out if using paper) as I go along. And of course I order them such that anything that needs to be figured out before working on other stuff is done first.
This sounds pretty obvious, but when you're not feeling motivated I find this helps. It's basically a process that parallels onto paper/.txt what you do mentally when you're in a flow state. But when you're unmotivated, it's hard to keep track of all that because you keep getting distracted. This is a good way to finish and fight out getting things done. No matter how interesting a project is, there are always pieces to it that are non-glorious and a process like this helps.
Aside from that, I just like to have a routine set up. Sit down at the computer and just start working. Being able to force yourself to do something you aren't that into doing is a GREAT skill to have, and you can improve it over time with practice. You can also lose it by not practicing.
Another thing that helps, is before leaving the computer from a work session, I write down a few lines in Evernote. It just looks like this:
Where I left off, 2013-01-18 (before leaving cafe Thursday night): - Just finished figuring out how to store the user data in cookies, but there might be problem with the way it's saving. I think I should track when the data is changed and only .Set() the cookies when the data has changed, and I need to track it for each set of values so that they don't wipe each other out. - still need to do XYZ - remember to merge into master for the release I just did, and push everything
It's just a two minute recap of the last thing I was working on, and what I wanted to work on next. I find that this helps me a lot to pick back up faster the next time I come to the computer to do some work.
However, some projects to improve systems and to finally start looking at decoupling from the external partner are FINALLY showing up on the roadmap for 2013. I spent all of 2012 on a brand new project where I enforced my vision of how things should work (totally modern tech stack, automated builds, cloud deployments, etc). That project was a big success.
So if I were to stay one of the things I want to know is how I can convince my manager to get out of the way more, and let me handle a bigger role in planning and executing the projects. Because even though the projects are coming up, he is already starting to try to "mentor" the jr dev's by trying to get them to "own" specific new projects and feature areas for things that we'll do in 2013. I strongly disagree with this approach; I want team ownership, but with his hub and spoke approach (my +1 being the hub) to managing, there is no real development team. The Jr. dev's practically never increase their skills because they spend so much time on legacy code and tedious operational stuff that can be handled by interns (i've recommended this before, buy my manager doesn't agree).
Your point is well taken though, and it's something I've been thinking about. I would welcome any advice on how to arrange a better environment for myself at the company, that would allow me more autonomy in leading the developers. How do other lead developers at small startups handle this kind of situation? Who assigns tasks directly to developers? My manager micro-manages, and assigns individual tasks to individual developers. I know that if I got to lead the team myself I'd have been able to incrementally upgrade parts of the system to free up the Jr. developers' time, and by today they'd have a lot more free time to work on even more new features. How do I discuss this kind of thing with my manager without offending his clear need to maintain strong control over the Jr. developers?