November 2011
3 posts
Tweaking Teaching Math
So my wife started homeschooling our older two boys in September after we’d recovered from the summer vacations a little bit. She likes to write about their escapades on her blog, and they’re doing a great job. In deciding to start homeschooling we had planned to have me help by teaching them math, but then decided before our “first day of school” that I was too busy...
The Most Awesome Weekend Release Ever
“Hey, I have to tell you about the most awesome weekend release ever. It happened last Saturday, and –”.
“Weekend Release?”, you ask, incredulous. “Aren’t you supposed to be doing weekday deploys?”
“Yeah, yeah, I know. We agree, and we’ve taken a break recently as we make changes that involve enough risk that we don’t feel...
What ever happened to all that talk about build...
Well, I collected them into a series and added a report card over on the Fog Creek blog. I plan to continue adding to the series going forward.
October 2011
2 posts
Build and Release Management Series
What is build and release management?
Can you build your product with one command?
Where do developers keep their checked-out source code?
How do I eliminate absolute paths from my code and build scripts?
Do your builds have other hard dependencies?
You keep talking about hard dependencies. Are there any soft dependencies?
How are build and deploy scripts different?
What should you include...
"Have you been flossing regularly?"
“Have you been flossing regularly?” - Your Dentist
Don’t you hate it when you go to the dentist and, while the dentist is digging around in your mouth, he asks if you’ve been flossing?
“Huh-mhqhg,” you respond, hoping that all the fingers in your mouth made your negative answer sound like a “Yes, sir” on the way out. But no; dentists (and their...
April 2011
1 post
In Which I Defend the C Standard for Interviews
In Drowning in a C of Interviews, Benjamin points out that he doesn’t see much value in doing interviews exclusively in C. Additionally, he believes that “we’re making candidates nervous about how well they know C, and focusing too much on how well they understand C’s semantics, but not really getting any meaningful indicators back in return.”
I have a different take on our...
January 2011
1 post
Do you have different build scripts for official...
I hope you don’t have one script or set of scripts for dev builds and a separate script for official builds. For teams that have made the good step of setting up a dedicated build machine, this form of build script decay is probably more common than having different scripts for different configurations.
For example, you start getting close to shipping an actual product to actual customers,...
November 2010
1 post
Do you have different build scripts for different...
One of the most natural ways that build scripts decay is when you create create separate scripts for different configurations of your build. This typically does not happen when configuration just means “debug” or “release”. That’s usually handled quite well with compiler and/or linker flags, or just using command line parameters or other ways of modifying run-time...
October 2010
1 post
Deploying FogBugz 8 and Kiln 2
Of the many positive comments about the new FogBugz and Kiln releases, that was my favorite. Not so much because we did anything better than Twitter, as I haven’t heard of any problems with the rollout of their new version, but mostly because it meant…we did it! As the new build and release manager for Fog Creek, it was satisfying to get to this point—to have shipped two new...
September 2010
15 posts
Do you store built binaries in your VCS?
Do not store the output of a build in your version control system along with your code. Period. If you work on an interesting product, it is bound to be comprised of multiple components that all fit together in interesting and complex ways. For reasons you may have had no say in, some of those components are built and checked into the source code for use in building a larger product. Do not do...
RT @FogBugz: FogBugz 8 is officially launched: http://bit.ly/c9D2Ki And Kiln 2 is out too: http://bit.ly/9K1yEM Get better at everythi …
First very cool facetime call - watching my daughter sitting in a bumbo for the first time. Complete with bobble-head effects.
RT @jonsagara: Installing the Kiln client. Impressed that it knew to install 64-bit TortoiseHg.
Do you save your old builds?
If you’re not currently saving your old builds, you should start now. Saving old builds can be very useful for a few reasons. First, it makes it quicker to start debugging problems that only shows up sin an old build. Second, it is insurance against the possibility of not being able to recreate your build environment correctly.
For hosted environments, where you control the deployment of...
Do you have an official build machine or set of...
An official build machine is an important tool for building and releasing software. If you don’t have a machine dedicated to that purpose, you have to worry about where each build and release comes from. Is the environment the same? Are all the dependencies the same? Which developer’s box do builds typically come from? What if he or she is out on vacation? Can you emulate that box...
Can you build all possible configurations using...
It’s important that you have a single build script to build your product - every configuration of your product. Having a separate script for debug vs release, or x86 vs x64 architecture, is only going to cause problems. If the actual built files need to be different for different deployment target, then these targets also become build configurations, such as hosted vs installed. And the...
Sped up our build today by detecting service stop rather than waiting five minutes (twice) in hopes it had happened
Why should my build and deployment scripts be...
You may ask this question when you notice that every time you build, you also deploy. What’s the point in keeping the scripts separate if they will always be run together? Before listing all of the reasons I can think of, let me tell you about a bug we recently had in our (currently combined) build and deployment script.
The installer for our licensed FogBugz product is created by a single...
Are your build scripts crusty and old?
The other day I was trying to get one of our build scripts at work to run on a new build machine we’d brought up. Because all of our build scripts haven’t been actively maintained, they are very much tied to the environment and other hard dependencies of the existing build machine. And so getting them to work somewhere else (without modifying the script) involves a lot of work to setup...
Did some vbscript work today - half-baked attempt at dynamic language
Do not intermix your deployment scripts with your build scripts. It only causes pain.
It’s a wonderful day when your two month old sleeps through the night
Sometimes the right biz decision is to hide the bug, rather than take time to understand loads of legacy code and inner workings of IIS
Can you deploy your product with one command?
Now that I’ve discussed the advantages of separating your build and deployment scripts, lets look a little more closely at deployment scripts. As with build scripts, the first principle is simple and comprehensive - make sure you can deploy your product with one command. I don’t care whether it’s launched with a button on a web page, a shortcut on your desktop, or via the command...
August 2010
9 posts
What should you include in machine setup scripts...
The value of setup scripts for your development and build machines has come up before. Creating these scripts can save your organization hundreds or thousands of hours of work over the course of a year. But what should they include?
Install VCS
The very first thing your setup scripts should do is install (or verify the installation of) the VCS client you use. This will be used for all of the...
How are build and deploy scripts different?
I got a couple of comments on Hacker News regarding my post about eliminating absolute paths in your code and scripts. User fragmede brought up the issue of using absolute paths to a common bin folder so that once you’ve built you can easily run and test your code. I responded by pointing out that what he actually is discussing is not part of a build script, but part of a deploy script....
RT @apowter: Less than two weeks in to our new @FogBugz installation & we just hit triple-digit bug count! Loving how easy it is to file …
You keep talking about hard dependencies. Are...
In the last few posts I’ve discussed the hard dependencies you want to eliminate from your build scripts - things like absolute paths and databases. It’s quite natural to ask why I used the term “hard dependencies”, and what a “soft” dependency would look like. Soft dependencies are basically any thing that you can get from your VCS or that is setup...
Do your builds have other hard dependencies?
The last couple of posts have discussed the need to eliminate the hard dependency of absolute paths from your build scripts and code. But there are other hard dependencies you really want to avoid, if possible, when building and running your code. Here are a few, along with ideas for eliminating them.
Registry, Environment, Config files
I recommended using the registry, environment variables,...
How do I eliminate absolute paths from my code and...
In my last post, I discussed the need for your code and build scripts to avoid absolute paths. If they do use absolute paths, those paths become hard dependencies that must be satisfied for you to be able to build your product on a given machine. Obviously, you cannot eliminate all hard dependencies (you’ll need to build within the context of an operating system, for example), but the more...
Where do developers keep their checked-out source...
In asking that question, I suppose I’m implying that it matters where developers keep their checked-out source. For some teams it matters a great deal - they cannot build their code without having it at a specific location, because build scripts have hard-coded, absolute paths. For other teams, it doesn’t matter at all, and every developer puts it in a location that seems right for...
Can you build your product with one command?
Yesterday I asked what build and release managers do. I’m going to keep asking questions, and answer them to the best of my ability as I go.
In Ship It! Jared Richardson and William Gwaltney have a chapter about scripting your build. You should be able to run a one line command that fully builds your product and that works on every developer’s machine. In the chapter, they discuss...
What is build and release management?
Last month I took on some new responsibilities at Fog Creek - I am now the build and release manager for our products. Since starting here a little less than a year ago, I’ve been making regular suggestions around our processes for developing and releasing our software. That, combined with a pretty heavy load on my manager, who was spending 50-75% of his time managing builds and releases,...
July 2010
1 post
Pretty sweet comments about Kiln: http://www.offroadcode.com/2010/7/13/switching-our-version-control-system-from-svn-to-kiln-part-1.aspx
May 2010
2 posts
Productivity is about Habits. Period.
With all of the great advice about productivity in the world, why aren’t we all more productive? Why haven’t we figured out the right system for managing our time, our lives, our actions, or whatever, so that we can stop reading more self-help books? Or at least stop feeling like we should read more self-help books. Why do we jump at new planning systems, then jump back to old planning...
One Change At A Time
One of the responses to my first post on the 6 Changes method of developing habits was from someone who admired how I had combined a few different things that I wanted to get done each day into a single habit that I did each night before going to bed. I took that to heart and tried to do the same again in March and April by bringing together some bad habits I wanted to overcome with my desire to...
April 2010
2 posts
1 tag
Tags - Subversion Conversion to Mercurial, Part 3
Well, if converting the trunk was a necessary appetizer, and converting branches was the meat and potatoes of Subversion to Mercurial conversion, then surely converting the tags is the dessert. We now understand all of the basics of converting the trunk and branches of a Subversion repository to Mercurial. All we need to do is pull over the tags that label specific revisions. Before we dive into...
1 tag
Branches - Subversion Conversion to Mercurial,...
After reading about how the hg convert extension can convert the trunk of a Subversion repository to Mercurial, you’re probably thinking: “But we have more than just a single line of development! We branch our code! We merge it! We tie it into knots! It’s like a great monster!” Of course it is. You wouldn’t be good developers if it weren’t. If a simple trunk is...
March 2010
3 posts
1 tag
The Trunk - Subversion Conversion to Mercurial,...
So you’ve got a bunch of code, the key to your companies future, and like a good developer you’re keeping it under source control using Subversion. But you’ve heard about these new distributed version control systems, like Mercurial, and after doing some research you’ve decided to take the plunge. But now you face a challenge: how to get all that juicy code into a Mercurial...
Commitments
In my post on how to care, I committed to start blogging more regularly, rather than sporadically. I began last week by spending an hour on my commute each day doing writing and research for the post I published Saturday. On Sunday I took a break from the entire internet. I plan to continue with that schedule. This coming week I’ll be eliminating some time-wasting websites from my life and...
1 tag
Mercurial will make you a better developer
Since starting at Fog Creek, I’ve been learning about Mercurial from day one, since I’m working on Kiln. It was a big change from my work at Microsoft, where we used a VCS that was much closer to the Subversion model than the Mercurial model. One of my areas of focus in Kiln has been the import tool for teams migrating from Subversion. As I’ve tried to wrap my head around...
February 2010
2 posts
1 tag
How To Care
Earlier this month, Merlin Mann wrote about one principle that is more important than we typically acknowledge: First, care. He begins by discussing the common challenge of staying focused on the important stuff. Staying focused is the easy thing, he reminds us: just do one thing at a time. Of course, he knows that an obviously tautological statement like that is not the solution, so he tells us...
1 tag
The 6 Changes Habit Creation Technique in Action
I first read the posts at 6Changes.com just before Christmas. At the time, I was preparing for the yearly planning that my wife and I do each January. I already wanted to make some changes in my own life, and 6changes.com was like a small revelation. It convinced me to tackle an important change, gave me a set of things to do, and happened to be at just the level of detail I needed. I’ve...
October 2009
1 post
1 tag
Fog Creek Software, Inc.
Well, I’m now at Fog Creek. I love it here. The benefits they mention in their recruiting materials are all real and all great. I love the food, I love the snacks, I love the flexibility, I love the views of New York and the Hudson. More important than that, I love the work. Microsoft Over the last few years, working on Outlook at Microsoft, I became more and more aware of good engineering...
May 2009
1 post
Whimsical Walk
In my last post I mentioned that I was doing some practice with the binary search algorithm. I wanted to approach it with a slightly different mindset and see what kind of an algorithm that led to. So I decided to think of it as a walk. I would go “visit” locations in the array and see if I should turn right or left at each one. Doing this in C meant that I could do some crazy stuff...
April 2009
2 posts
Practicing Binary Search
So for the last couple of weeks I’ve been practicing the binary search algorithm, as laid out by Dave Thomas here. I’ve done both iterative and recursive variations in C++ and then in C. I love the value of katas for learning new languages and features. I know both C++ and C, but doing this simple problem in both programs allowed me to work on learning new areas in each. First, in C++...
1 tag
Practicing Prime Factors
Uncle Bob’s tweet from a few weeks opened my eyes to the value of practice in honing my development skills, and led me to read a lot more about practicing and code katas. One of the things I love about having a kata, like the prime factors kata, is that you can focus on different skills and techniques each time through. You can do it in different languages, with different testing frameworks,...
March 2008
3 posts
Speed up Tasks on Your Windows Mobile Smartphone
One of my biggest frustrations with the Windows Mobile task application is that it synchronizes your completed tasks. After a while, this greatly outnumbers your active tasks, making the task app really slow. So I periodically move my completed tasks to a separate task folder (I like to have them around for searching). Alternatively, you could just delete them once a week or so. The following...
2 tags
Platforms vs. Solutions
Jeff Atwood recently discussed The Dark Side of Extensions, and advocated taking the five most useful popular extensions to Firefox and integrating them into the product as features. Before the Firefox team decides to go do that, it might be useful for them to step back and consider what they want Firefox to be: a solution or a platform. The platform vs solution question eventually rises in any...
2 tags
How to Get More Done and Be Happier
So I realized the other day that I was getting up at the same time each morning, doing more, and getting to work earlier. I thought I’d share how I did it. First, you should know that my morning routine is important. I try to spend some time praying and studying the scriptures, plan my day, then do the standard stuff: eat, shower, spend some time with my family, and leave for work. In the...