Managing Development or Sometimes work gets in the way of work
I haven't posted in a long time. Luckily, it's not because I haven't been learning anything, it's just that most of the things I've been learning aren't as programming related as they are "business tech" related.
Your company grows and you start spending time making phone calls, collaborating with partners, talking with users, writing documentation, etc.
So instead of coding snippets I want to talk about coding in a fast paced environment, especially when you have a lot more to do than just code.
I am managing development at a startup, so this is also my intended audience. Also, I screw up all the time.
- Set small goals in short timeframes
Big vague goals are difficult to accomplish and difficult to break into chunks to assign to different people. I also find that checking things off builds morale for everyone invested in the code. We do everything in two week sprints and plan the week every Monday.
- Set a whole lot of them way in the future
Today you should know what you are going to do in six weeks. Even though the goals themselves are small, they should reach far into the future.
- Don't be afraid to change them
Understand that you don't really know what you are going to do in six weeks. Things come up: opportunities that take precedence or failures in ideas or technologies. Things change and so do you.
- Don't be afraid to never to do some of them
You will not and should not complete all of the goals. They are set far into the future to give you direction now. But by the time you get there, they will change. Your job is to make the best ones, the ones that will move your company forward, emerge.
- Know your coders
You need to know your coders and their strengths and weaknesses. Not just what they are good at coding, but also what motivates them, what environment is best for them, when do they do their best work. Also, understand what part of coding they love, and what they hate. And if they don't love any of it, get rid of them. :)
- Trust your coders
If you learn to trust your coders based on their strengths and weaknesses, your tech will make progress much more quickly. Assign tasks and let them do them. Or better, yet, allow them to choose tasks. But you have to trust that they will choose the right one for them and that they will do it. - Don't trust their code (or yours)
Because we all make mistakes and their code is your responsibility. Take the time to code review, have them refactor if required, make small tweaks yourself but use them as teaching opportunities. Oh, and most of all: AUTOMATED TESTS
- Limit your scheduled phone calls to either 1 per day, or all of them in one day.
Phone calls kill. You're no good before them and no good after them. And no one is any good during them. I prefer the one per day method, just knowing that an hour of my day will be phone calls with partners or support. Then I plan accordingly.
- Figure out what time of day is best for certain tasks and schedule around that
This really goes for anything you do in your life. When are you best at exercising, reading books, spending time with your family? I know in the morning I'm easily distracted, so that's when I schedule calls, do email and write documentation. In the afternoon I can creatively solve all of the world's complex problems and hunt down the most deceptive bugs. Late at night, though, I can hunker down and churn out millions of lines of rote code. You might be completely the opposite.