Author Archives: jonathanfmills

Why Building Software Is Not Like Building A House

Ok, I have had this conversation too many times to count. And depending on the social setting, I have argued it from both directions. (stick with me for a minute….) I truly believe that you can build software like you do construction. It can work. BUT I firmly believe that you should not do that. Not because its hard, but because we have an awesome opportunity with software to build something together with the business and not for the business. And that is the key difference.

Now, if I could build the house the way I build software, it would look something like this. I would put up four walls and a door and have the user come stand in the house. I would then ask “What else do you need?” They would give me feed back like “Its dark in here… maybe some lights?” I would go build the lights and windows, and the rest of their “needs” list and call that their “mvh” minimum viable house. Once I was done with that, I would walk them through the house and say, “Here is your house, move in today.” but I wouldn’t stop there” I would go on to say “now tell me everything you want in order of priority and I will add them one by one until you feel like we are done.” All the while, they can live in the house. Wouldn’t that be cool? Except, you can’t do that with a house. You can’t cheaply and affordably add lighting and windows and extra rooms on to a house after construction is complete. Or change the color of the cabinets or carpet. You can however do that in software.

The conversation always seems to go “you should be able to build software like construction” and the reality is you can. But, for me, the question is “Why would you conform yourself to a process that is restrictive and painful when there is a MUCH better way?” Building software gives us the opportunity to truly create something in a collaborative environment with everyone involved. Yes, you CAN do big up front design and estimation, and contract negotiation, or I can use that same time to build something usable that we can use to get test with actual real paying customers.

The paridime is different. Don’t conform to something just because it “seems” to work in other unrelated fields.

Who Are You?

Think about that question for a minute. If you had to describe yourself to someone (like maybe in an interview…), what would you say? We talk about brand management all the time when it comes to large corporations, but have you given much thought to your personal brand? When people think of you, what do you want them to think of?

Daniel Pink uses the question, “What is your sentence?” If you had to sum yourself up in one sentence, what would you say? For me, my sentence is this: “Jon builds and develops people and helps them to be the best they can be.” Thats what I do. Now, what is your sentence? Think about it.

Now that you have a sentence, that needs to permeate through everything you do until it becomes your brand. What you say about yourself is only part of the picture. Your brand includes what you do. For me, I run a consulting practice that mentors companies on software best practices, I coach kids basketball, I lead a cub scout den, I teach an adult sunday school class, I speak internationally on soft skills and process. Do you see a theme? Let me help, it has to do with the sentence I listed up above.

Lastly, use the resources available to you to make your brand clear. Linkedin, twitter, blogs, facebook should all be used to promote yourself. Perspective employers, partners, clients, etc, are looking you up on linkedin and twitter. Do they have a clear message about who you are and what type of person you are? They should. They are a fantastic free tool for you to use to promote yourself. Spend just a little bit of time on each to be sure your message is clear and concise.

Take 5 minutes right now and review your online presence. Does it paint the right picture of you? If not, fix it.

Can’t we all just get along?

Nothing is sure to sink a project more than fighting between the project team and all the other groups in the organization that it may impact. We have all seen this happen before, the project team needs something from infrastructure, security, or qa (although they should be on your project team…) and for whatever reason, they can’t or won’t help.

Now, I say “for whatever reason” to be inclusive but it is amazing to me how often we don’t take time to ask what the reason is. So it really turns into “for some reason they won’t concede to our demands….” Let me ask you a question, if an infrastructure team member came to you and started telling you how to write your app, would you listen? really? Yet for some reason as developers we tend to expect other teams to just do what we say or take our suggestions as gospel.

So, if you want to smooth the path with your neighbors, you need to do three things.

1) Get their input on your project early. Buy them donuts or coffee early in the project and tell them what you are doing and why you are doing it. Real reasons, not just that it is “the most important thing”

2) When they throw up a road block (and they will) take an honest interest in why they are doing it. Just because it is not important to you does not mean it is not important to them. Take the time to sit and understand their position. Not so you can convince them to change, but so you can find a solution that will work for everyone.

3) Make their life easier. Ask your project team what they can do to help ease the burden of these other teams. If qa is buried, can you do more pre testing? If infrastructure is busy, can you try automated deployments? Be creative.

Now, making their life easier only works if you took the time to understand their issues. Once you start treating these other groups like they are actual people with real issues and goals, you will be amazed how much easier it is to work with them.

tl;dr All the other people in your org are actual people, treat them like they are important and they know what they are doing…..

Don’t be “that” guy

OK, I know one thing for certain about whatever project you are working on right now. At some point, something will change. There is no doubt about it. You know it is true. Once the business owner or the user see something, they will want it be be different. Now, the question is, when that happens, what person are you going to be?

What do I mean by that? When something changes, there are generally 2 types of people that respond. There are helpful people who anticipate the change and work through what it means for the project. Or, there is “that” guy. “That” guy for whatever reason refuses to acknowledge that change is coming and when it does gets really mad about it. Generally the first response from “that” guy is “No! we can’t change it, why didn’t you plan?” or “It’s not possible to do that.”

Sometimes “that” guy takes the opposite stance. He will answer with something like “Sure we can change it, if you are willing to shut down everything and start over!” He will agree with a change with some overblown response in hopes that if he overstates what it will take the business side will back down.

These types of obstructionist people do nothing but add conflict to a project. So, don’t be “that” guy. But be careful, the pendulum can’t swing too far in the other direction. Some teams take whatever changes come there way and just go do them. Thats when you get into trouble with the business side not understanding why you keep missing the deadlines. They suggest changes, but are never told how that will impact their timeline.

So, what is the right way to handle this situation? You need to do three things with every change request.

  • Ask for time to review the change and estimate
  • Communicate as accurately as possible what it will take and how it will impact the project
  • Given an understanding of impact, ask what the priority is
  • Thats all there is to it. Every change, every time work these three steps. Following these steps in a helpful constructive way will add tons of credibility to you and the project team. It will amaze you how often a change is killed once the business side understands what a change will really take. It may also surprise you how many changes just are not that hard to do.

    tl;dr Things will change, be a voice of reason and calm in your organization. Don’t be the one who is looking to cause conflict.

    Don’t waste another year

    Ok, I know it is cliché and everyone knows they don’t work. But you know that you are making new years resolutions this year. If you are anything like me, you made a few last year along the lines of “Lose weight” or “Get Organized.” The jokes are already flowing about the gym the first week of January filled with new people who will disappear by the end of the month. And we all know, that is exactly what will happen.

    Ok, so here is the deal, New Years Resolutions don’t work! You know that already, but we continue to fool ourselves. The question is, why? Most of you are very intelligent, successful individuals. Why is it so hard to commit to a resolution?

    It’s all about the feedback loop. The reason year long resolutions don’t work is because if we are only measuring a year at a time, it is way to easy to fall into a trap of procrastination and eventually dropping it altogether.

    So, how do you fix it? Its way easier than you think. Start by shrinking the feedback loop. Make your yearlong resolutions. Think Big! Way bigger than any simple resolution you may have had in the past. But don’t stop there; Make a New Month Resolution for January that takes you in the right direction. But wait, there is more…. Make a New Week resolution that will take you in the direction of the month resolution. Ok, one more…. Every Day, make a new day resolution. What is something you can do today that will advance your goal? Measure your success by that one goal, every day. NO excuses, every day, measure how you did with your goal? At the end of the week, measure that, and make a new weekly goal for the next week.

    When you measure progress in small chunks with clear and precise objectives, you will be amazed at the massive feats you can accomplish over the course of a year.

    So, go ahead and make that new years resolution. Then break it up into small manageable, measurable objectives and get to work.

    Really. Right now. Why are you still here?

    The Elevator Pitch

    Could you clearly and concisely explain to someone what the project you are working on does? Not technically, but from a business perspective? Could you, if asked, explain what the main features are and why your project is a good alternative to the status quo? In other words, can you give a business justification for the project?

    If you can, fantastic. You are making good strides in setting your project up for success. If you said no however, you are unfortunately in the vast majority of development teams out there. As developers we tend to separate our teams into the “business units” and the “technical” groups. We figure that we can deal with the tech decisions and they can make the business decisions and everyone will be happy. Unfortunately for us, we forget that every decision we make, impacts the business. We are all on the business side of the project. As developers, we make hundreds of small decisions every day and it is very easy for us to get caught up in the tech, and lose sight of what the real purpose of the project is. In my Why are we here post, I talked about the importance of understanding why we are doing a project and to keep the customer in mind as we do it. The next logical step in that process is to formulate a clear and concise explanation of the “why” so we can both keep ourselves focused, but also to aid us as we engage our neighbors. I call this, “The Elevator Pitch”

    Now, this concept is not new. If you stepped onto an elevator with someone and you had to explain something to them before you got to your floor, could you? Some elevators are slower than others, and in my building I could read them a 30 page document by the time I hit the 3rd floor, but you get the basic idea… And besides that, you should be taking the stairs anyway… But I digress…

    In order to formulate an elevator pitch you need a few important pieces of information. If you are already working, you should have them. However, if you dont, call together the “A Team” (thats a different blog post) and the Product Owner ( Yet another post) and ask these simple questions.

      Who will be using this product?
      What is the basic thing they are trying to accomplish?
      What is the key benefit of this product?
      What is different between the current state and the new state?

    Ok, now that you have all of that, you need to put it together in a clear and concise format. This seems to work well for me.

    For [Customer]
    Who needs to [Need]
    The [Product Name]
    Is a [Category]
    That will [Key Benefit]
    Unlike [Primary Alternative]
    The new system will [Differentiator]

    So,

    For The Accounts Payable Team
    Who needs to effectively process invoices
    the paytastic 1000
    is an online payment system
    that will allow AP to process invoices quickly and efficiently.
    Unlike the current paper based system
    The New System will ensure that invoices are not lost and kept in proper workflow.

    Now, with that simple explanation, you can clearly explain to anyone what it is you are trying to do and what the most important things are.

    The Unemployed Generation

    I read an article recently about the supposedly unemployed or underemployed generation of students graduating college. The idea that there are students out there graduating with degrees and not being able to find jobs is certainly a cause for concern, but there is more to the story than just a lack of employment opportunities. I ran into this in person the other day at a checkout counter at Best Buy. Lee and I were checking out with all the prizes for KCDC and as you can imagine, that sparked some interest from the checkout guy. He indicated that he was trying to get into software development and he had a degree in computer science. The rest of the conversation went like this….

    Checkout Guy: How would I get into development?

    Me: The first question I would ask is, what are you doing with your Computer Science degree?

    Checkout Guy: Well, I am wearing a blue shirt at best buy….

    Me: That’s your job, but are you doing anything on the side? In your free time?

    Checkout Guy: I am doing some stuff with Netduino. I really like the device side.

    Me: Great answer! That exactly right. *handing him my card* Give me a call or shoot me an email. I would love to help you get started.

    Checkout Guy: Cool Thanks.

    As you can probably guess, I never heard from him. Had he called me, would I have helped him out? Absolutely. The struggle is that most young adults have no idea what it takes to get into this business. Its not that they are not willing to do the work, they just don’t know what that work is. And mostly, that work is picking up the phone and calling people and asking them for help, or advice, or a direction.

    As an entry level person, do you have a mentor? Do you have someone who you can ask for advice or a direction? Not a professor, or a counselor, but a person with feet on the ground doing the work you want to be doing?

    As a senior dev, are you mentoring anyone? Do you have someone you are there for, answering questions and providing advice? If not, find someone. Either from a random encounter, or something more intentional.

    So, how do you find these people? Simple, you ask… Find a user group, technical conference, or linked in group and start asking. Go to the people leading those things, and ask if they can recommend someone. The single most important thing you can do to get to where you want to be, is get out and meet people who are already there.

    iOS from Stanford, Python from MIT

    One of the coolest things about the internet is the immense amount of information that you can find. As a self professed academic, I stumbled across the mother load the other day. Open Culture has a list of over 700 college courses available for free on line. These are not courses from some random local college. These are classes from Yale, Stanford, MIT and Harvard to name a few. Full video lectures, handouts, and assignments, all available to you for no cost. Its crazy. If you have iTunes, check out the listings in iTunes-U. My oldest son (a freshman in high school) is currently working through a Python course taught by the department chair at MIT. I am doing a game theory class from Yale as well as an iOs class from Stanford.

    For all you developers or tech geeks out there. There is no excuse for letting your skills get stale. Go out and watch some lectures on a topic of your choice and put your brain to work.

    Why Are We Here?

    Back in the early 2000s, Toyota had a vision of building the number one best selling minivan in North America. Their current minivan, the Sienna, was small, underpowered, and badly needed help.  Yuji Yokoya was given the job of re-engineering the Sienna. There was just one problem, Yuji, lived in Japan. He did not know the people or places that he would be engineering for. Believe it or not, Japan is nothing like North America. So, what does a chief engineer do in a situation like that? He packed up his team and flew halfway around the world. He made a commitment to drive through every state in the US, every province in Canada, and Mexico. He met the people and drove the roads that the Sienna would be driving. And guess what, what he learned on that trip revolutionized the Sienna. The innovations he made, sent the Sienna to number one. Why? Because he knew who he was building his product for. He knew, why he was there.

    Let me ask you this, do you know why you are building what you are building? As a member of a product team, can you tell me how your product will be used in the real world? As you are writing code, building test plans, writing stories, or any of the other project tasks, can you picture the face of a person who will be using what you are building? All to often, the answer to those questions is, no. Why is it important? Because, every day, project team members make assumptions. Over a given project, it is safe to say project team members will make thousands of assumptions about what they are doing. And all to often, those assumptions are not quite right. Its not that they are not good at their job, its just that they don’t really know why they are there.

    So, what to do? First and foremost, stop doing what you are doing. Yes, really. Schedule some time to go visit the people who will be using your product. Don’t invite them to you, go to them. Watch them work. Interact with them. Ask them questions. Maybe even try it out yourself. This serves two purposes. One, It shows them that you care about them. They will be far more engaged in your project if they feel like you care. And nothing says you care more that spending some time. Second, it gives you the proper frame of reference for you work. It gives you something tangible to go back to as you are building your product. As you make the thousands of assumptions that you will make over the life of your project, it gives you something to see in your mind that makes it real to you.

    Ultimately, setting a proper frame of reference is critical to the overall success of a project. The funny thing is, it really does not even take that long. In most cases, a 2-3 hour session will give you most of what you need to get the right insight. For the project, it will be the best 2 hours you could spend. 

    TFS 2012–Work Disconnected

    One of the greatest frustrations of TFS up till now has been the complete inability to edit files while disconnected from the TFS server. The other is the inability to edit files outside of visual studio without some hackish steps to force TFS to recognize the change. In 2012, Microsoft has stepped up and introduced local workspaces that fix this issue.
    Read the rest here.