One thing that I think is a real shame is that encrypted email has never really taken off. Part of that is the abysmal state of UI in encrypted email, to the point where even fairly serious power users and developers have trouble using encryption. Part is to do with the big webmail companies not supporting encryption. But I think a significant factor even if the other two are solved is that encrypted messaging in general is the worst kind of network effect problem.
I say worst because most network effects are just that your thing is only valuable in proportion to how many other people are using it, but encryption manages to be even worse because most of the existing strategies to mitigate a network effect don't work. For example, one thing you can do is provide an easy onboarding process: people who don't use Facebook much still get their Facebook messages as emails. Encryption makes that kind of backwards-compatability fundamentally impossible. You can't make encrypted email work for people who use unencrypted email; that's the whole point of encryption!
But maybe there's something interesting you can do if you're willing to relax your definition of encryption a little bit. Along with each unencrypted email, you could send an encrypted copy of its contents as an attachment. That on its own isn't very useful, except that the encrypted copy doesn't actually have to be a copy; you can change it to anything you like. If you recieve such an attachment and it's different from the unencrypted contents of the email, you display it instead. So by default nothing changes, but there's an extra space for adding hidden messages.
I call this idea semi-encrypted email, and I think it has a number of pretty neat qualities. Firstly, if a lot of messages have encrypted attachments it reduces the suspiciousness of any individual encrypted message. You still have the ability to send regular email to regular people, and they'll just see yet another useless attachment. However, there's a nice backwards-compatible upgrade path to layer encryption on top.
I think there would be some encryption and key distribution-related hurdles to jump, but I think those are fairly tractable. At this point the main thing holding encryption back isn't technology, it's user design, and that's where I think the new frontier of crypto innovation is.
One thing that's always been difficult for me is keeping track of things that don't need to be done now. Some activities require a bunch of steps to be taken one after the other; I like to think of those as synchronous activities. Synchronous activities are pretty easy, because you just do the next thing until you run out of things to do (or get interrupted by something else). Reading, gardening, and even programming (sometimes) are all examples of synchronous activities.
By contrast, some activities require you to take a step, wait for something to happen, and then take another step. For example, doing laundry. First you collect all your clothes and put them in the machine, then wait for the machine to finish. You hang up the washed clothes outside, then wait for them to dry. Then you take them inside and put them away. There are two all-important "then wait" steps in the middle there, where you stop, go do something else, and then hopefully remember to resume the process later on. I think of these as asynchronous activities.
Unfortunately, asynchronous activities are harder to manage, and they seem to pop up all the time. Washing is my favourite example, but organising something via email is another one that gets me a lot. Programming can also be very frustrating when it's asynchronous. Occasionally I have to work on a project where the build process takes more than a couple seconds, and it's significantly more difficult that way. That extra time between writing the code and seeing if it works often gets filled with something distracting, and it's easy to end up pretty far off track.
I think reducing that asynchronicity of your activities is a good idea, especially in programming, but sometimes it's not really feasible. Washing and drying are always going to take some time, at least until all our clothes are made out of graphene or whatever. In the mean time, the most valuable trick I have found is to take the responsibility for remembering out of your head. Instead of trying hard to remember when the washing machine is done, set an alarm for however long it takes. For software build processes you can do even better, and set them up to make a chime when they finish.
If you can offload that responsibility onto machines, it makes you much less likely to lose track. But it also means you're free to forget about whatever you're waiting for until the reminder you've set up interrupts you. The alternative is constantly trying to remember all the things you might be meant to be doing, and I wouldn't wish that on anyone.
I've noticed that a lot of people-related problems basically come down to who is willing to put the most effort or investment into the situation. Although there is often an official power structure, or theoretical selection criteria, decisions seem in practice to be made in line with whoever tries the hardest. Any objections are powered by a fixed quantity of caring, and eventually people run out and just go along with whatever. I like to call these situations care fights.
One of the best pieces of advice I've heard is never go into a meeting without knowing what you want out of it. That's not to say I always follow the advice, but whenever I have I've gotten great results. If you go in thinking "I guess we're having a meeting about something", this is classic care fight losing strategy, and there's a high chance you'll get railroaded into whatever gets decided. Although you might make a better decision if you had five minutes to go away and figure out what you care about, by that point the decision is already made unless someone cares enough to argue back.
Sales is another classic care fight. Salespeople drive you towards a close by caring a lot more than you do about it, and a sales situation without a plan is even worse than a meeting. If you aren't sure what you want when you go in, guaranteed you'll end up wanting what the salesperson wants you to want, or at least having to muster an enormous amount of caring to get back in control of the situation.
The ultimate extreme of the care fight is consensus building, a process by which a group is required to come to a unanimous (or near-unanimous) agreement to act. As long as there are even a small number of people who disagree, their issues are expected to be heard and worked with. While apparently some groups function well with this system, you can imagine that their decisions are heavily biased towards whoever cares the most, whether or not their ideas are the best.
On the other hand, a care fight may not be such a bad thing. In abstract I think it's good that someone who cares a lot about something should be more likely to get what they want than someone who doesn't care much. I think the trick is to be very militant about your level of caring. Something like what colour shirts to order, absolutely, lose that care fight. But something like a car sale or a business meeting can be very dangerous not to care about, because the people who do care the most are unlikely care about the same things you do.
An idea I picked up somewhere, I think on Less Wrong somewhere but I can't find a reference now, is the idea that your theories should divide the space of concepts as evenly as possible. That is, there should be as many things that would confirm your theory as disprove it. You can picture there as being a big cake of things that might be true. To get the maximum information, you want to cut that cake in a way that lets you throw away the most of it each time you cut it. I like to call a statement like this meaningful.
A meaningful statement is something like "pigeons are blue" (or equivalently "pigeons aren't blue"), because it divides the space of pigeons into blue and not-blue. A meaningless statement would be something like "everything is made of energy". What would a not-made-of-energy-thing look like? If that's not a conceivable thing that could exist, then your concept space isn't being divided at all. You can imagine the cut in the cake going right down the side, missing the cake entirely. No matter what the outcome, it can't give you any new information!
Another way I like to think about statements is their strength. A strong statement is one with a clear test of its truth. An example of a strong statement is something like "I will go to the shops by 2pm", a weaker one would be "I will go to the shops today", weaker still would be "I will go to the shops sometime", and the weakest of all would be "I will try to go to the shops". You can see that, much like the meaningless statement, a weak statement also divides less of the concept space, but the reason is that it has a chunk of the concept space that it neither accepts nor rejects. The cake is still being cut, but with a big chunk left in the middle.
So if you put these two disciplines together you get strong, meaningful statements. These are statements that have a clear test of truth, and will divide a lot of things into either truth or falsehood when that test is applied. I recently learned an example of such a statement, which I'm told is related to Gendlin's Focusing technique. You say "my life is awesome and everything is going great". Although it's an emotional statement, it's strong because words like "awesome", "everything" and "great" are pretty definitive, and it's meaningful because there are a clear set of things in your life that could be either great or not great.
When most people make a statement like that, they feel uncomfortable, because it's not true that their life is awesome and everything is going great. So the next step is to keep adding exceptions to it: "everything is going great, except I wish I had a better job, and I wish I was in better shape, and I don't get enough holidays". Each additional statement is making additional cuts into the cake, effectively doing a binary search through the space to quickly converge on the exact set of things that are standing between you and an awesome life.
That's not to say I think every statement needs to be strong, or even meaningful, but I believe that strong and meaningful statements are the best way to quickly cut a path through concept-space. And if that turns out not to be the case, at least I'll have learned a lot by finding out.
Here's a neat idea I had today: a transactional system shell. Once or twice I've accidentally nuked some files I wished I'd kept around, or overwritten something by accident. On desktop OSes the way that's solved is by making destructive operations actually non-destructive in various ways, like a special trash folder or OS X's version history system. But when you're using commands on a shell, there's no such protection available.
One option that I've started using is change the default to confirm before you delete or overwrite files, but it's a bit annoying. Worse still you train yourself in the habit of just hitting yes every time, which means it's inevitably going to lead to confirming by accident sometime too. Instead, you could use an overlay filesystem: a small filesystem just containing the changes you've made. When you start a transaction, all changes from that point happen in the overlay filesystem, and when you're ready you can commit them for good.
The nice thing about this is that, on top of protecting you from yourself, it would also provide a safer environment for running other people's shell scripts. If you run a script or a command in a transaction, you could confirm what changes it's made afterwards and decide whether it's done what you expect. Even if it has, it's nice to know exactly what changes have happened.
All the other software in my life seems to have gone to a safe-with-undo-by-default system, so it'd be great to see shells get there too.