I'm a bit curious now, I wonder how many people here try to wake up naturally.. personally, I consider that to be pretty reliable in forecasting my day's productivity.
Weekends around 8-9 hours per night.
And I started asking, "What are the important problems of your field?" And after a week or so, "What important problems are you working on?" And after some more time I came in one day and said, "If what you are doing is not important, and if you don't think it is going to lead to something important, why are you at Bell Labs working on it?"
Hamming constrained important problems not just to global or personal significance, but also added a factor of solvability. You had to have a way to attack a problem for it to matter, and if you didn't, you should be working on problems that would lead you there, somehow, maybe, hopefully, indirectly. Broad experience was just as important as technical chops.
If you do not work on an important problem, it's unlikely you'll do important work. It's perfectly obvious. Great scientists have thought through, in a careful way, a number of important problems in their field, and they keep an eye on wondering how to attack them. Let me warn you, "important problem" must be phrased carefully. The three outstanding problems in physics, in a certain sense, were never worked on while I was at Bell Labs. By important I mean guaranteed a Nobel Prize and any sum of money you want to mention. We didn't work on (1) time travel, (2) teleportation, and (3) antigravity. They are not important problems because we do not have an attack. It's not the consequence that makes a problem important, it is that you have a reasonable attack. That is what makes a problem important. When I say that most scientists don't work on important problems, I mean it in that sense. The average scientist, so far as I can make out, spends almost all his time working on problems which he believes will not be important and he also doesn't believe that they will lead to important problems.
I tackle important problems for designers in my recent essay, You and Your Designs, published in this quarter's issue of Distance: http://distance.cc/
I give examples of five important problems in design, and explain why:
1. Responsive web design, because it exposes content and content management as a first-order design constraint.
2. A/B testing, because intentionally and purposefully trying different things goes against how many of us were raised as designers.
3. The Internet of Things, because it means we can do away with metaphors and have physical objects that contain their own meaning.
4. "Big data" and "computational X," because they represent the event horizon for designer-as-polymath.
5. "Immersive I/O" and "natural user interfaces," because they remove our "sensory deprived and physically limited" constraints on interactions with technology.
I wrote in a different comment elsewhere, the interesting thing about entrepreneurship is, you don't have to be limited by your field of academic research, and your lunch tables of chemists and mathematicians can be those of any industry in the world. Working on important problems means your work will have long-term meaning.
Start at the bottom of that diagram and work your way up
EDIT: Based on the edited original post, let me elaborate. The most important things are at the bottom of Maslow's hierarchy of Needs. The "important problems" as I see them are the ones at the bottom - food, water, health, resources. If you found a way to hack clean water, food supply, or disease, those would be important problems, compared to say, a social network, or video sharing site (these would be at the top of the pyramid).
Truly important problems - the ones where a solution would make an immediate and significant positive impact in some way for the human race - would be things like solving multi-planetary existence (figure out how to survive a lifetime on Mars and grow), ending poverty, ending crime, ending corruption, ending world hunger... There's a lot. To me, these are the end steps of whatever these "important problems" solve. For instance, we can't end crime until we end corruption, have a government system that people don't need to circumvent for anything, and have everybody be satisfied enough not to commit even the smallest crime. I once read that in Soviet Russia, people would illegally offer their repair services to individuals and companies that didn't want to wait for scheduled maintenance or replacement (or something similar to that idea.)
The problems we solve today are steps and pieces along the way to reach these end Utopian style goals (living on Mars isn't Utopian.. but the other things I listed are.)
I do think some kind of bubble is about to burst, but I see a tech bubble bursting as an opportunity for others with real ideas to have their moment in the sun. When you think about it, the financial and tech sectors are closely tied together, feeding off of one another. Venture capitalists make their money investing and startups make their bread and butter from said investment.
I'd really enjoy seeing something like this that's oriented towards design and programming. Dribbble's "Playoffs" feature is somewhat like that, but it's generally a battle of over-designing something more than it is coming up with wholly different solutions for real world problems.
If you continue with your miserable job things will take longer, and your job will get in the way from time to time. However you should funnel that misery into motivation into building your app. If you are single, don't have kids you can do this easily, nights and weekends. It will mean giving up some hobbies and not going out with friends but I like your odds. The money you saved should not be spent on living without a job for 6 months, pay someone to help you build your idea. The risk is low as it seems unlikely you would move in with your parents if you had a wife and kids. The flipside of this is;
You build your business, you finish it and then... maybe you don't have any customers, or no revenue, and the panic of "I have no job and my product is failing", this is a pretty terrible and terrifying feeling.
For the record I've met 2 people who opted for what you are proposing (quit job, work on project full time) and they both went through the panic of "my project is done and I have no or insufficient income!" And what happens if you don't finish? What happens if you hit a snag? Even if you do everything right does not mean you will have enough paying customers after 6 months. I feel like you are setting yourself up for failure without a net. I know it works out for some people, but I'm only playing the percentages here and I feel like you are more likely to be on the losing end.
I on the other hand have a wife, 2 kids, am the primary bread winner and have built my project after hours. It has been slow going and I have no revenue. I've lost a lot of sleep. I've struggled with marketing. However I still have confidence in what I'm doing, and while it takes more time for me to make changes and market on my own I prefer being where I am. My only complaint is I can't market much from 9-5. I've resorted to making cold calls at lunch, but I feel like I'm doing the right thing (I don't have much of a choice really with the kids and family, but still). My project may be a total failure but I still have the satisfaction of building something myself without the panic. All I lost was sleep, and time with friends. I have no regrets.
For me there will be no dread fueled panic (or panic fueled dread) from the feeling of "I have a project that is not generating enough revenue and I have no job!" Granted I can't afford to quit. But while I've made some unwise decisions in development(learning a new language/framework to build a web app) and struggled with some decisions I don't feel the pressure that those bad decisions ruined me, they were learning experiences. Please do not quit your job.
If I can do it after hours you surely can do it. Listing to Rob and Mike from Startups for the Rest of Us podcast, and they both worked on their startup until they had enough revenue to quit. I would trust their advice before mine. Definitely pay someone else to help you, which will move things along faster. You are young and the risks are low, it's a worth while investment.
Good luck man, sorry to come out on the same side as your parents.
SOLUTION: Wake up earlier and work on your project while you're fresh.
4:00 AM - Wake up, work on project 7:00 AM - Get ready, head into day job 8:00 PM - Sleep
But, it requires a lot of motivation and discipline to sleep and wake so early every day. If you can't handle doing it for at least a few months, while you get your project ready, you probably won't have the drive to do anything anyway.
first thing. move closer to work, and you'd have saved 15 hrs to put into your project. from what you say, it's right in the face. trying to save few $100's in rent by wasting the time on commute is the worst trade off you are making right now. If you think spending few $100s extra on a place closer to work should be minimal compared to what you think your project is worth. If you think otherwise, i'm not sure how much important this project is to you.
second thing. don't speculate how much responsibility you might have. Don't promise on taking responsibility from your manager only to do what you don't enjoy as much; only take what you can at the current work pace. if you are not trying to climb up the corporate ladder, why take more than necessary responsibilities and make your life harder? be an mediocre employee at a corporate entity. Produce 8hrs worth of deliverables every day, be present, and contribute to the job in those 8 hrs, no more. that should work for most corporations.
It might help to firewall out BOGOB IPs and known malicious IPs. These lists have to be actively maintained on the firewall.
mod_qos prevents some abuse:http://opensource.adnovum.ch/mod_qos/
and subscribe to your location specific startup newsletters.
1) You can block EC2 wholesale. You've mentioned issues with this, and can be bypassed via VPN or using another network. EC2 is attractive because it's so cheap (with spot instances, starts at 0.3 cents per hour), but it's not the only option.
2) Timing. Normal traffic isn't rapid fire. Many scrapers, however, fire off their scripts as quickly as possible. Block traffic that doesn't have enough meaningful pauses.
3) Report addresses to Amazon. I really don't know if they'd take action.
4) Reverse lookup, or whitelist addresses. I know if it's a legitimate source (like Flipboard) they'd probably work with you at least a little bit. Reverse lookup might not be successful, but maybe that can help you whitelist any legit sources that map their AWS IP to a legit DNS name. Most scrapers use the AWS external domain name. Also, I imagine legit sources give you a distinctive user agent, so that can help you let traffic through.
However, if you have a public resource, this is simply an issue you have to deal with. Anayltics: I'd just filter out traffic scraped traffic from your analytics. Content duping: blocking scrapers won't stop this. If someone stealing your content can't scrape at 0.5 cents per hour, they'll pay someone 5 cents an hour to copy/paste. You just have to use the same diligence others use, in terms of reporting to Google, etc. Perfomance: use Varnish/nginx/etc to combat performance hit from scrapers.
Hunting down bots is a waste of time and effort better spent elsewhere.
behavioral modeling - rate limiting, bandwidth restrictions, etc
identity verifications - make sure they are running the browser they say they are, allow google and other search engins by whitelisting their IPs, block others that are pretending to be google, etc
code obfuscation - make it hard for them to scrape your code. Change up the CSS, etc.
OR you can use an automated service to do all this for you. Check out www.distil.it.Full disclosure, I'm the CEO of Distil.
But then I just made Twicsy fast enough to deal with the traffic so I don't need to worry about it anymore. I guess it depends on your business model whether or not that will work for you.
It seems hard to limit legitimate uses of a free resource without changing the requirements on how users access the site (require account signup, use CAPTCHAs, use CSS/JS to only display properly in a browser).
As one who does a lot of scraping, I have encountered few barriers that can't be (legally) overcome with a reasonable amount of effort.
s/Ask HN/Ask PG/
Other resources that were helpful for me as well
- SICP (http://mitpress.mit.edu/sicp/full-text/book/book.html) - The Pragmatic Programmer: From Journeyman to Master
- Almost all udacity CS classes - SaaS courses at edx.org - Scala course and most CS courses in coursera
- browse most popular OS projects on GH, and try to contribute - create your own open source project, and get feedback / pull requests
- Stackoverflow - http://codereview.stackexchange.com
edit: SICP has an online course at MIT OCW:
it might cover a lot of things you know, but I think it's a must have for every developer out there.
2. Make an effort to use what you have learned from past experiences to write better code in terms of usability, efficiency, readability, maintainability, etc.
3. Read Code(good ones). Sometimes, looking at other people's code allows you to have a fresh perspective about coding style.
4. Contribute to open source. It will help you immensely in understanding what it takes to write code that others can read and maintain.
5. Help others on sites like stackexchange.
2. Create new projects as often as possible.
1. This is a problem for me too. Even though I have been doing this for a long time there are a lot of situations where I am asked for a referral and I don't know anyone good. Sometimes I don't know anyone at all.
2. When this occurs the first default thought is "Go to a Juggernaut Law Factory". All of them claim to have the best people in the world in every possible specialty. You pay through the nose. You hold your nose and hope that the work product is adequate. Sometimes it is. Sometimes it is astonishingly good. Sometimes it's embarrassing as hell how badly the work is done. (The same goes for hiring the Big 4 accounting firms).
3. If you don't want to go that route, your next job is to identify your problem as precisely as possible so you can start to find your way down the referral chain until you find someone you want to hire.
4. I will make reference to my specialty to give you an example, but in any area of law the same concepts hold true.
5. I am an international tax lawyer. I do primarily inbound (foreign money, companies, and humans entering the United States) work. To find me it is not sufficient to specify "tax" as your problem. That's like saying "I need some code" in software land, I'm guessing. You need to be highly specific. "I have a U.S. company that will sell 50% of itself to a foreign investor. My foreign investor needs a U.S. tax advisor in order to structure the deal properly, and I need a U.S. tax advisor to make sure I don't f--- something up for myself."
6. For me, my next step is to start calling buddies who are lawyers and I ask them the "who do you know" question. That is easy for me because I know a bunch of people all over the world in my field of expertise. For you, trying to hire a specialist, it isn't. So you start with a generalist. A generic tax person, in my field. If the person has a sense of integrity and this is something that is beyond them, they will decline to do your work and will instead say "Call Fred. He does that kind of thing."
7. Keep dialing. Get a name. Talk to that person. He/she is a statistical sample of N = 1. My suggestion is that you pay some money here. Don't get free advice. I might chat with you for a few minutes but if you're serious you're going to sit down and talk serious stuff for money.
8. I commend an interesting article to you, which I believe I found via HN yesterday or the day before. http://www.datagenetics.com/blog/december32012/index.html talks about "The Secretary Puzzle" and how you don't need a large sample set in order to choose the right person.
9. What you're going to take away from that first meeting is an expert's sense of what your problem is. DO NOT TRY TO GET AN ANSWER TO THE PROBLEM. Just get the expert's idea of how the problem is defined. Also get some of the insider technical jargon used to describe the problem. Words. Laws. Etc.
10. From here on you are going to find more people. You are armed with better information. Go ask Mr. Duck D. Go or someone else, using the jargon you have now learned. See what that turns up. Keep dialing. Repeat your quest by starting with a generalist and focusing in until you hit a specialist.
11. Once you have talked to two or three people, pick the person who gave you the best vibe. Specifically: did you understand what this person said when he/she talked to you? Was this person a complete asshat? Is this person accessible?
12. Do not make your decision on price. Long ago when my hourly rate was $400 per hour, a client hired me and said "Do you know why I hire $400/hour lawyers instead of $200/hour lawyers? Because $400/hour lawyers get things done."
13. I'm not saying that you should hire without regard to price. I'm saying it is a cost/benefit decision. Most people approach hiring a lawyer as a pure cost decision. This is one of our screening metrics for who we take on as customers (or not). If people can't see the benefit from hiring our firm, then we don't want them. And if we can't see the benefit we can give -- and if we can't articulate that clearly -- then we shouldn't take the job.
14. Pro tip. For tax, at least, but I think in other areas too -- look to see who is doing a lot of lecturing and writing. Look at the courses and seminars on offer at www.calcpa.org, for instance, if you're interested in accounting people in particular fields. Who is talking about your problem? (Shameless plug: I love giving presentations on international tax topics and do a lot of it.)
That's it. I think your analogy to finding a good programmer is apt. I'm trying to hire a lawyer right now to work for me. I face the same problem -- how do I know that this person is competent? Will I be able to work side by side with him/her?
Anyone know about the turnout thus far?
I'd love to see it in the cinema!
The meaning of life is what you choose it to be for yourself. What comes beyond life, space-time and the universe? Now that I'm more interested in.
There are at the moment, 4 stages in the development of the universe and I will describe each in detail.
1. The "big bang"
A few points about the big bang, no pun intended. It could not have been a bang (because there is no sound in space) and it certainly wasn't even an explosion. The universe was a single point of all light compressed so hard that no light could escape, similar to a black hole where the gravity is so tight that no light can escape.
This single point has so much energy and is spinning VERY fast by itself inside a vaccum, eventually it spins so fast that photons start escaping the gravity and slowly but surely over time, photons are escaping everywhere and the point is becoming visible and a lot larger (because light is pretty fast)
2. The formation of the "galaxies"
A few trillon years after light started escaping from the single point that used to make up the universe, other particles have also started escaping, hydrogen, helium, oxygen, carbon etc. These particles form huge gas clouds which also, have a spin to them.
If you rotate a tin really fast, the wind will be around the edges of the can and not on the top and bottom so if you could visualize the air, it would slowly create a flat disc. All the particles have by now started creating real physical formations like rocks and while spinning around the disc, started colliding with each other, creating bigger rocks.
If you need a better visualisation, go and look at a picture of saturn.
3. The "planets"
These rocks have been building up for billions of years and have started separating themselves into planets which have their own orbit around their own future black hole, or sun. These planets hold each other away from the sun by their own gravity. Ill explain gravity in another conversation (its really cool too)
Slowly but surely, some of these planets will cool and all the water vapour in the air will become heavy and fall down as rain, creating oceans. Because of the huge kinetic energy of this process, atoms in the sky become charged and electricity is formed.
Because of the huge potential energy, this electricity was able to bind atoms together, to create what we now call "life"
Life evolved through billions (possibly more) of years and eventually a particular species came about. Chimpanzees, which possess traits like, fear, courage and teamwork. They live in fear of other "tribes", they have the courage to rise up and fight to survive and use teamwork to live together. These apes were different to other animals, they had the ability to associate feelings with physical things. Blood with Death. Fighting with Hurt. Objects with ability. They connected the world around them to enhance their bodies and extend their minds.
4. The "humans"
The apes that had the best chance of surviving, the ones who could associate best, were the ones that started small cultures, associating sounds with feelings and recognising that they all had the same feelings. Language structure was created and the land was built up into towns and cities. The now "humans" were the kings of the world because they could change the world. But, they still have the same traits as the apes, fear, courage and teamwork.
How did we get from being a rotating point of compressed light to where we are today?
5. The ""
Yes, theres a 5, I said there was only 4. This could be the most crucial point though as its happening right now. The humans are leaving their planet, they are using their teamwork and leaving their fears behind them and venturing off into space, where they used to be.
Soon they will have to leave their "tools" behind and adopt the new way of doing things.
Imagine a glass of red wine, sitting on the edge of a table, if the glass were to smash, the shards of glass and the wine contained inside would fall. Just like all living things before now, they live, are smashed and die. Because we have the ability to change the course of time with our minds, the atoms don't have full control of the universal system and we have complete free will.
Now Imagine, that same glass of wine, sitting on the edge of the table. If the glass were to smash, the wine would stay in the same place. The people don't need their tools anymore.
All we do is an absurd, is chasing after the wind, the idea is not novel, read the book of Ecclesiastes to realize this question has been asked (and partially answered) many times by humans before.
Edit: I am not Christian. Just to be clear here.
We're here to evolve and to continue creating life so that that new life can do more/better than that previous life.
Evolution is the reason for life.
This way the files are available whenever I switch computers and they are automatically backed up.
I keep several text files in a directory:1. A backlog. This is roughly similar to a scrum backlog. It's disorganized and needs to be, because it's important that I can easily put stuff in here when an idea comes to me without having to get distracted organizing things.
2. A plan. I periodically select a few things fro mthe backlog and organize them into a chunk of work that I plan on doing next. I put checkboxes like this [ ] next to each item, and when I finish the item, I change it to this [x]. The item that I am currently working on looks like this [.] to indicate it's in progress. That way when I get interrupted for 2 hours or a day and come back, I can easily see what I was doing and get back in the groove.
Periodically I move everything I have completed from the plan text file into a file like history/2012-12.txt. I put a date right before the items I put in. This way I can go back and see what I completed on a given time period.
Also into the plan file I will put notes of issues I'm researching, which can occasionally be useful to go back and look at a month or more later. Those notes get moved into the history file when that chunk of work gets completed.
The benefit of this approach is that I can use this method even when I am traveling on the train, and it let's me easily switch computers and keep working. I find my to do list to be just as important as my code, because it's very hard for me to be productive on a large project without continuous planning.
You're (usually) not going to accomplish much, macroscopically, until you've done a fair amount of ground work (e.g. learning APIs). You need to keep that ground work fun, so whatever structure you impose on the process (to-do lists) needs to be focused on improving this factor.
Keep a simple list of things to do as a backlog and maybe another list of "would like"s. I personally use SimpleNote and Notational Velocity for both.
I've found that the first 80% I can generally get done pretty quickly; most of the design and architecture is in my head and always running as a background task. I use Evernote to organize TODO's (always at the top of the list), and have little discussions with myself about stuff like features, UI's etc.
Life.Gets.In.The.Way.Restart.Arrrrgh. Inevitably. Back to Evernote and pick up where I left off. It gets much harder during that last 20% (which usually takes me more than that first 80%), because the jump from Proof of Concept to Product is brutal.
Do.The.Worst.First.A friend of mine, Sid the Sailor, used to talk about "painting the windowsills when the whole house needed cleaning"... especially combined with that last 20%, I have a tendency to go down rabbitholes (hey maybe I'll use RabbitMQ for this)... so, back to Evernote, and add the TODAY list - what's most important to get done. Then, suck it up, and do it. These often require very long late night sessions since it can often take hours for me to get started and get the momentum up to deal with the pile of poo. (Cause if it was fun it woulda been done).
Invite.Others.to.the.PartyDuring the process, unless it's Top Secret(tm), invite others to take a look at what you're doing. Early on it's nice to get some approval, later on, it's nice to get some feedback about usability. Be careful to avoid party poopers since you don't need to be discouraged - this shit is hard enough already.
Launch.the.fucker.I have trouble with this one, because it's scary. It also generally means I'm going to end up with a pile of feedback (or bug reports) from a bunch of pissed off strangers. I really don't like it because it means work, and lots of it. It's the chasm between a brain fart and reality. And I get faced with the ultimate reality of "Hey maybe this sucks and I've just wasted a huge amount of time".
Now, in "practice what I preach mode", you might want to check out xlogs - http://xlo.gs - it provides logfiles for Amazon AWS and more. and i'm just launching it now :)
 https://workflowy.com/?ref=45b58c2.tw (disclosure: referral link gets me 250 more list items a month)
Generally though, I find that having a site out there and people using it is the best motivator to keep pushing forward. It creates a real sense of urgency and priorities, and you simply won't have the luxury of not focusing on the important stuff that affects people's experience.
I keep shuffling how I organize tasks. There's by-project, where I list all the things that need to be done to complete something. But I also have to keep some context lists like "next time I'm working on the website" or "next time I feel like doing a bunch of Photoshop work" for those tasks that keep getting put off.
I also keep a wall calendar (just a big sheet of white paper) with post-its for each deliverable. They keep slipping, but at least I can see how many weeks are left until external events.
When things get really unproductive, I walk away from the computer and sit down with a notebook or stack of index cards/post-its and dump everything that needs to be done. For tasks that are stuck, I try to apply Merlin's idea of visualizing what it will feel like to have it done: http://www.43folders.com/2005/10/16/43f-podcast-the-to-have-...
Personally, I find TDD is a helpful design aid for tricky bits of code. I don't bother when it's trivial, but when creating major systems or components, it helps to focus my design and enforce encapsulation.
Lists are good - things to do both "must have" and "would like" - plus "yet to be tested" as things develop. Anything you cant just keep reliably in your head.
Carry a notebook around to jot ideas and sketches when you are doing other things.
Every Friday morning, I step back and evaluate my progress: I write a paragraph about what I did during the week, a paragraph about the overall sentiment of the feedback that I got during the week, and a paragraph about where the project stands in comparison to its long-term goals. During this time, I also go over my task list and add, remove, or reprioritize tasks as needed to make the list reflect reality.
The most important part to me is to make sure that I'm only doing things that actually matter. So when I'm thinking about adding a feature to my product, I first try to see if that feature should actually be the highest-priority thing, or if my customers can live without it. And it helps to zoom way out, too. Often, programming is not the wisest way for me to spend my time. Sometimes it makes a lot more sense to spend time on, say, marketing, or on education, whether that be programming-related education or something else. Abraham Lincoln said, "If I had eight hours to chop down a tree, I'd spend six hours sharpening my ax." A lot of the time, sharpening your ax is the most effective use of your limited time.
I've found the following books helpful when it comes to time management and overall effectiveness. In order of how strongly I recommend them:
- The 7 Habits of Highly Effective People by Stephen R. Covey
- First Things First by Stephen R. Covey
- Getting Things Done by David Allen
- The first 20 pages or so of The Ultimate Sales Machine by Chet Holmes
I use a combination of tactics recommended by GTD, FTF and T7HOHEP. After reading GTD, I wrote down everything I could think of that I would have to or want to do, ever. Examples: do the dishes, email Steve, visit Europe. Later, I captured most of these items in Evernote, and then later, I graduated to Things. I suspect that the developers of Things have read GTD.
Now that I have all of my to-dos captured in Things, I try to take one day each week (usually Monday) to plan the rest of the week. Reality never matches up with the plan, but I don't think that means I need to throw out the entire process. It's still helpful to have at least a high-level idea of what I want to do with the week.
I still find Evernote valuable for capturing ideas, but Things seems best so far for capturing to-dos. I also still use pen and paper to plan on a day-to-day basis. If I go by Things only, I forget, so I usually transfer my daily Things to-dos to paper at the beginning of the day. As unexpected things naturally pop up throughout the day, I add them to my daily to-do list and/or Things, depending on how likely I think it is I'll get to that item the same day.
Hope that stuff helps.
Tools I use: I try to stick with an IDE like Eclipse. I know they're sorta frowned upon, but I like convenience. I use Git, personal preference. Some spreadsheet program for managing tabular data, like milestones, word processor for keeping a journal, and a scratch pad or whiteboard for scratch-work.
Tips I've accumulated after a while:
* Milestones help you focus your efforts for the "session" * Design documents and whatnot sound like a lot of paperwork, and it is, but they are incredibly useful to have and keep around. * Try to not intermix phases of development. Don't do design and requirements gathering or design and analysis at the same time. Do things in order. It keeps things clean and separated.
In a side project with so few hours per week, I think anything more complex than this is overkill.
1) Take one project at a time.
2) Make a vision document, basically what features I want in full fledged version of my application - Plain text document on my desktop.
3) Reduce the number of features to minimum required for MVP and make a to-do list for MVP - plain text document on my desktop
4) After 2 & 3 is done focus only on actual work(coding/designing) ticking off to-do items one by one.
I find that since I'm using the source control anyway, I may as well keep a track of everything there too.
I take pleasure with taking things out of my todo list. I noticed that big tasks that will take about a week to accomplish should really have their own board with tons of small "cards" for each tiny task. I break the 1 big task into very small tasks that I should be able to accomplish in 15 minutes to 1 hour.
This drives me forward because the side project work becomes a game.
The reason behind this is that I might go for a few weeks without even looking at the code and then when I come back to it it's like picking up someone else's work...
I also have boatloads of unit tests so that I don't have to be as terrified about making big sweeping changes, and try to add tests along with every "feature" I put in.
A todo list app can also be useful, but only if using it is something you use out of habit. That's why Github issues fits nicely with me, because it fits with my natural workflow (filing issues or scouring issues of software I want to use).
In the past I tried something similar to scrum (have a master list of everything I needed to do). But since I do have a day job and other responsibilities, I found that seeing a massive list got too overwhelming. Now I focus only on what I can get done now, not worrying about the pile of things waiting to be done.
More recently, at work, I've been using a Trello board, as I'm sure many others here do.
it's an open source project, so this not only helps me having a clear idea of what I'm meant to be doing, but it also helps others to contribute to it, by giving a precise idea of what can be worked on at any given time.
Having no cofounder is better than having a bad one, and starting a company solo is better than not starting one at all.
Don't get too hung up on the latest startup / incubator trends; plenty of companies have been started with one founder. Just go out and do it.
In my case, I've started a number of products that have languished and died because I was lacking skillsets that weren't as easy for me to acquire as it was to find somebody who had them.
Long and short of it, it is often easier to supplement what you don't know with somebody that does know those things than it is to find more time in the day to learn it all and do it all yourself. Even if you know everything yourself, finding the time to do marketing / promotion / split-testing the site copy / crafting emails / handling user support, etc., are time-intensive tasks, and if you are like me, you'd rather be building new features than doing those things.
If you can find somebody passionate that can take approximately half of the workload, it's a life saver. It's also handy to have another smart* individual that can take that work off of you, then it's a lifesaver.
If you've never launched a product, then it's really hard to know how much work is involved post-launch. Launch is really just the beginning, and as hard as it is to launch, getting your product to succeed at market is many times harder.
I think it's the best way, personally, at first. Investors don't care how many founders you have if there is traction. Noah Kagan and Mark Suster seem to think so as well:
$ date +"%y/%m/%d %H:%M:%S.%N" 12/12/12 12:12:12.367166822
+------------------+ | | +---------+| Job Queue +--------------+ | | | | +---------------+ +----+-----+ +------------------+ +---------+--------+ | | | | | | | Client App +---+| Web App | | Worker Daemons | | | | | | | +---------------+ +-----+----+ +------------------+ +---------+--------+ | | | | +---------+ Database |+-------------+ | | +------------------+
One possible architecture:
- Agent is a process that sits on the database server written in Python.
- Code a VERY lightweight, highly stable plugin written in the native code of the database. The sole purpose is to connect with the local agent and give it data.
Agent connects to the central server to dump data and do reports. The agent can poll every 60 seconds for new management commands or new settings.
First rule: Do never bother writing your own socket server, there are so many reasons to not build your own server, but just consider that they already exist and are better than what you could build.
That said, it's all about the type of service: For verifone machines server I use a custom protocol which I regret I had to construct every single day. I had to build it because it was a long time ago and connections speeds were too slow for https.
SOAP is a reasonable option if you have text+binary data. Also if clients already use SOAP. I dislike XML deeply, but if you have have complex objects you can combine your web service with XSD schemas and make it great.
Now, the best option: just use dead simple HTTP transporting JSON, it may be REST or not. But anyways, this is the best option you have. It's reliable, tested and fast. I don't know python, but there must be something lighter than django around. Use that with nginx or apache as http server.
Java is pretty cool to build this kind of software. Check out Apache Mina, you can create a rock solid, production ready server in minutes if you decide to roll your own protocol.
Slate.com also comes to mind, but it really isn't a source of news as it is more often a counterpoint to the news you've already heard. For example, instead of reporting on the person pushed in front of the subway train, they report on what is recommended around the world a person should do in the same situation.
On a wider point, much depends on what your new employer will think of the fact you are working on side-projects that may compete with its own ideas. Regardless of who came up with the idea first, they may not want a new hire to be working on similar projects when their energy could be directed at the company's own similar project.
Of course they may be perfectly happy for you to continue but it's of course vital you properly map out that work done on your own time will not belong to the company. In this regard, as the other poster says, you would be well-advised to speak with a local lawyer.
If you want to be less paranoid, take this up with the vendor beforehand.