I found my new favorite iOS game this weekend. Alto’s Adventure is a fun, and additive, snowboarding game. Beautifully done.
I found my new favorite iOS game this weekend. Alto’s Adventure is a fun, and additive, snowboarding game. Beautifully done.
Having a cluttered email inbox just doesn’t work for me. Having both new items, emails masking as tasks, and random messages in my inbox is stressful. If you share this need for a clutter-free inbox, you may find my solution helpful.
My email processing is an ever evolving process. Being a product manager ensures I get well over a thousand messages on any given week. Many of the messages contain important follow-up material necessary to complete my work.
A common practice that I have done in the past is flag the message for follow-up. Every email client has some concept of flagging a message. This practice is not terrible, but it does have two downsides, 1) you have to remember why you flagged the message, flagging the message does not enable you to provide a note, and 2) if you are not great a cleaning up the flagged messages it can cause a situation where you have an overflow of flagged messages, making it difficult to understand what you need to get done.
I have been using various tools to help keep control of the items I need to follow up on. Todoist has been my latest go-to task tracking system. It works on all the platforms I use and has a great REST API that enables integration between tools.
Lately, I have been back to using Mac OS X Mail as my email client. I was loving Airmail, but a recent beta bug caused me an email nightmare, so back to Mac Mail. One feature I missed from Airmail was the ability to create a Todoist task from a mail message. Mac OS X Mail does have the concept of a link to the message, it is just a bit more hidden. So some scripting was required.
My solution to keep a handle on my inbox and keep track of the tasks I need to do is to integrate Mail with Todoist. The high-level flow goes like this:
This method does require Alfred, a very powerful launcher for Mac OS X. Not only is Alfred a powerful launcher, it also allows you to write workflows that can kick off based on specific keywords or keystrokes.
As a message comes in during the day, if I can’t respond to it in a few minutes, I will flag it for follow up. This is just a reminder for me look more closely at the message and decide what the next step I want to take on the topic would be.
Then when I want to clean up all the messages I didn’t get to during the day, I just filter on my all the flagged messages, and create new tasks in Todoist, then remove the flag. The benefit to this workflow is when I get to the task, I can open the mail message, get more details on the context and take action. No longer to I need to keep the message in my inbox.
You can download the Alfred workflow here
Or take a look at the code on Github: mgroves84/MailSendToTodoist
Agile practices over the last several years have focused on high bandwidth communication. It could be standup meetings, pair programming, or even just that over the shoulder code reviews. As a product manager I completely understand what DHH is talking about when you have remote team members. Being able to have an ad-hoc conversation with developer keeps things moving enabling quick decisions.
It’s an optimization for the assumption that we’re all going to be in the same place at the same time. Under that assumption, it’s a great set of tactics.
But assumptions change. “Everyone in the same office” is less true now than it ever was. People are waking up to the benefits of remote working. From quality of life to quality of talent. It’s a new world, and thus a new set of assumptions.
It’s time for a reset. We need the same care and diligence that was put into documenting the agile practices of an office-centric world applied to an office-less world. There’s a new global maxima to be found. Let’s chart its path.
It takes more effort to initially run an agile team when not everyone is in the same location, but it is possible of you are motivated enough. It requires both all members of the team to make this possible, ensure communication with remote team members are kept up.
I have started working from home at least once a week. And keeping the communication level high while I am not in the office takes a bit of extra work for everyone. But tools such as HipChat and Campfire really help lower the barrier.
I’ve had several mentors over my career. Most of them informal mentors that were able to see something in me and help guide me in a more productive direction. Sometimes they were managers, or often friends that provided a different point of view. In most cases I still don’t know what they noticed in me, or why they helped, but damn I am glad they did.
These relationships have been critical to my career. These are the people I will forever be in debt. These people didn’t provide their guidance out of a work obligations, in fact my experiences with formal mentorships have always been a flop. They just don’t work.
Do you have these people in your life? When was the last time you caught up with a previous mentor?
Do how you do you pay these people back?
There are two ways:
Deliver - this should be the easy one. Make them proud that they spent their time with you. Be as good as they think you are. Don’t waste their time.
Be a mentor - You know all the good karma, pay it forward stuff. No really, take time and be open to working with people. Find the right fit. Is there someone in your company that could use some of your perspective? In most cases you won’t need to seek out these opportunities, they will find you, just be open.
Here is the sneaky and possibly selfish part of being a mentor. You get to think through how you would solve a problem. How have you done it before? Can you really explain your position on a given subject? Mentoring someone allows you to work through your positions, what do you stand for?
If you are open to it, I think you will find that informally mentoring a few people a year, will make a big difference in how you think about what you know. And you will be paying back all those people who helped you out along the way.
April 22, was my last day at Microsoft. I have thought a good bit about how I would talk about this publicly. Would I write a blog post? Would I just leave it to a short messages on social various networks?
I finally decide that it was necessary to write this post as a record of my thoughts for my future self.
This post is not an indictment of Microsoft, if anything it is the exact opposite. I was at Microsoft 7 1/2 years. It was easily the most amazing organization I have ever been a part of. I am proud to be part of several product teams that shipped products that helped developers. And most important, got to work with some amazing people that truly care about making developers more productive.
To understand why I left, it is important to understand why I decided to join back in 2005. I had been in the software industry for ten years, bouncing between startups, riding the dot com bubble. At the time, I found myself pushing my employer to improve their development process. But personally I was frustrated that I was not learning from people with more experience shipping professional products. I was faking it in a big way.
After encouragement from a few co-workers to pursue my goal to work at Microsoft, I took the leap. Microsoft was to become my master’s program in software product development. Not many companies ship software at this scale and have the ability to impact so many lives. This was my chance to play in the big leagues, and learn from some of the best in the software industry.
Not only did I learn how to ship software to millions of developers, I was a member of teams that helped change how we executed. Moving from 2-3 year milestone based development efforts (waterfall) to an agile iterative release cadence that is now producing quarterly updates for Visual Studio, and updates to Team Foundation Service every three weeks.
There were plenty of barriers to moving an organization and product the size of Visual Studio in this direction, but it is damn rewarding when you start making progress.
Along the way I learned a ton about designing and building products. Mostly by making mistakes along the way. Are the products I worked on perfect? Far from it, but I valued the tradeoffs to ship. Shipping is a feature after all. But each of those tradeoffs, taught me something for the next time around. Make new mistakes. This to me is one of core values of shipping frequently.
Microsoft is a very large organization, easily the largest organization I have ever been a part of. Hell, Developer Division is larger than any place I have worked before. And there are aspect of working for such a large organization that exhaust me after a time.
I am proud of my time at Microsoft, but it is time for a refresh, a reboot if you will. I believe change is a good thing, gives you an improved perspective, keeps you learning and improving.
I start my new position at Splunk Seattle tomorrow. In one aspect a completely new space for me, I have never done much with big data. There are familiar aspects that I know I love, working on products for developers and IT. Learning new domains always bring new challenges, wish me luck.
I can't live without a simple text editor that understands markdown. I have shifted over this last year from proprietary note taking application such as OneNote and Evernote, to simple text documents saved in the cloud. I used markdown for taking notes, specifications and blog posts. If I have an idea I usually start with a new markdown document followed quickly with a card in Trello (more on that in a moment).
Writemonkey is a great markdown editor for Windows. It is a portable application. No need to run an installer. I keep in SkyDrive and have it available on all my machines.
Finding a system to keep my life in order has been a journey the last several years. I have several practices on how I handle email and reminders. But one area that I never felt that I had a great solution was keep track of all my projects and tasks that I need to organize on a regular basis.
Trello can be used for many things since it has a three simple concepts, boards, lists and cards. Cards live on lists, lists live within boards. You can create a simple set of lists such as to do, doing, done. And each task you want to track moves through those stages. You can order the tasks to give you a better idea of what you should do next.
Currently I have a few boards to track work going on specific projects, then I have a board where I keep track of the majority of my work tasks. Currently this work board has five lists, To Do (my backlog), This week, Today, Waiting on others, and Done. How I got to this process is worthy of a post on its own. And I am sure I will continue to tweak the process.
Markdown Link Generator - Since I write just about everything in Markdown being able to pull a hyper link from a site and have it formatted in markdown is great. This simple Chrome extension makes grabbing link very easy.
CardCounter for Trello - Mostly solves the lack of being able to quickly see the number of cards within a Trello list. The only downside is that it does not work if the list is filtered.
This is was pretty light year for adding new tools into my process. This may say something about the tools I picked up this year. I pretty much live in these two tools. And of course Outlook, now if I can figure out how to write all my emails in markdown I think I would be set.
In 2013 I will be looking for more of my tools as Win8 Apps to support my Surface. Trello already has a Windows 8 application in the store. There are a few markdown text editors in the store but nothing that is as good as Writemonkey.
I like extremes. There is something pure about seeing something taken to extreme. There are negatives at the extremes. But there is also elements that come out that can provide inspiration.
Take Jiro Ono, a 85-year old sushi chef from Tokyo. Jiro has taken the act of preparing sushi to an extreme level. His goal is to approach perfection. Jiro runs a 10 seat sushi restaurant in the basement of a Tokyo office building. Not the type of place you would expect to be a 3 star Michelin rated restaurant.
The documentary is beautifully done, showing how pure something can be done if you really love your work above all else. This in its self is an extreme.
Jiro is focused on every detail. From selecting the very best seafood, to personally organizing the seating chart, to requiring apprentices to take up to 10 years perfecting grilled egg.
Once you decide on you occupation you must immerse yourself in your work. You have to fall in love with your work. Never complain about your job. This is the key to be regarded honorably. - Jiro Ono
Within the documentary Jiro mentions shokunin. I was not familiar with this word. My initial interpretation was that shokunin is similar to craftsman, but this does not fully capture the sentiment.
"The Japanese word shokunin is defined by both Japanese and Japanese-English dictionaries as 'craftsman' or 'artisan,' but such a literal description does not fully express the deeper meaning. The Japanese apprentice is taught that shokunin means not only having technical skills, but also implies an attitude and social consciousness. ... The shokunin has a social obligation to work his/her best for the general welfare of the people. This obligation is both spiritual and material, in that no matter what it is, the shokunin's responsibility is to fulfill the requirement."- Tasio Odate
I believe Jiro also explains it well:
All I want to do is make better sushi. We don't care about money. I do the same thing over and over again improving bit by bit. There is always a yearning to achieve more. I continue to climb trying to reach top but no one knows where the top is. Even at my age, after all these years, I don't believe I have reach perfection. I love making sushi, it is the spirit of Shokunin.
The software development profession is still very young in comparison to many professions. I believe as we continue to practice this craft of building software we will evolve towards an craftsman/artisan direction. I would like to see this, not only for developers, but also from product/program managers, and designers.
I believe it starts with mentoring and practices such as pair programming. We are a long way from apprentice programs as common as in other professions, but it will be interesting to see where we end up.
People like Jiro Ono that have such a singular focus towards a profession are extremely rare. But I believe there is purity and beauty at these extremes. Do we have individuals within the software profession that are on Jiro's path? I don't know, it may take another 30 years to find out.
I recommend you watch 'Jiro Dreams of Sushi' and get inspired to take something to an extreme.
Since I switched my blog over to a static site generated via Pretzel I have been looking for even easier ways to publish posts. @vikingcode has a great post on how to configure a empty shim project to kick off Pretzel on push to Azure.
Jekyll is nice but if you're not a Rubyist or if you don't like Liquid (the templating engine that Jekyll uses) it may not be as nice to you. One of the early projects of Code52 was Pretzel which started off as a .NET app with Jekyll compatibility. Since then, Razor has been added as well as other enhancements. The "problem" with Pretzel was that you'd have to prebake the site and commit the site to Git, rather than just the "source" files.
Azure "relaunched" a few months back, including a new product "Windows Azure Web Sites" (WAWS). WAWS is essentially Microsoft's version of AppHarbor or Heroku - Git (or TFS, or FTP) deployed sites "to the cloud". WAWS lets you use a whole stack of web tech - .net, node.js, java, php, python and potentially more.
Now thanks to this post I was able to switch up my workflow. Instead of pushing from my desktop to Azure the _site folder. I now have a service hook configured on CodePlex that pushed the source to Azure and then on the Azure side Pretzel is run to generate my site. It is always great to remove a step in any workflow.
If you try this out and have problems with incorrect paths, I submitted a pull request to fix a bug when using the -d switch
I think there are a few things that every parent hopes to be able to share with their children. It could be your love of a sport team. I have been successful in teaching (brainwashing) my children to love the Pittsburgh Steelers.
As my kids have gotten older, I was looking forward to the day when they were old enough to experience Star Wars. I still remember sitting inside the theater at 6 years old and experiencing the opening scene of Star Wars. It was an amazing experience as a 6 year old. I had never seen anything like it.
My kids are not experiencing Star Wars the way I did. Not even close. I tried to control how they were exposed to Star Wars, but it was useless. Between seeing the episodes I-III, playing Lego Star Wars, and talking with their friends, their experience is all wrong.
Over this past holiday weekend, I decided to try to do a Star Wars reset on my kids (son 8 and daughter 5). Starting with episode IV A New Hope, then into Empire, I was hoping to undo some of the past damage.
I am not sure how successful I was. My son already knows that Darth is Luke's father. So the pivotal scene in Empire didn't have an impact on him. In fact I had to catch his attention, and replay the scene. But of course he already knew that, he just looked at me "dad I know".
Maybe it is unreasonable to think your kids are going to have the same reaction to the experiences you had as a child. They will never know what it feels like to sit in a theater as see Star Wars before anyone knew what it was going to become. They are never going to know how it felt to grow up in Pittsburgh during the early 70s. They know their dad loves the Steelers, so they love the Steelers. But they can't experience the same way I did, not reasonable, and not possible.
But that is OK, they will have their own first experiences that their kids won't understand the same way either. Let the cycle continue...