Category Archives: programming

Be DRY (Don’t Repeat Yourself) In All Things?

repeat

There is a well know principle in software development known as DRY, or Don’t Repeat Yourself. Here is the Wikipedia definition:

In software engineering, don’t repeat yourself (DRY) is a principle of software development, aimed at reducing repetition of information of all kinds, especially useful in multi-tier architectures.

I love being DRY when I code – unfortunately when I’m really going fast, sometimes I cheat and don’t follow the DRY principle. But it’s a very good principle to follow.

It’s basically a programming version of “don’t reinvent the wheel”. We coders are really good at leveraging: when we build stuff, in a lot of cases it’s really a bunch of stuff others have developed before us, all thrown together in a new way, with a bunch of new code thrown in to fill out the gaps. (Come to think about it, it’s a bit like patent and product development) Some coders out there don’t follow this model, but of the ones I know, myself included, if we find out that there already is some library out there which does what we want, we are overjoyed.

Might just mean that we are lazy, but lazy in a good way. Why rewrite something that works great? If it doesn’t, then likely we will rewrite it anyway, then hand it back to the community. We humans love to help.

For example, let’s say that you have an idea for an app, could be anything. Let’s say it’s a dating app. So if we break down the requirements for a dating app, you will see:

  • We need to track users of the app
  • We need to track profiles of the users
  • We need to match them up in some way

So you need users as the core dataset of the app. How do you create these users? Well, you could create a user database and make people sign up and log in. You’ll need to decide if you want to use a handle or an email address for login, have them confirm their email address in order to stop bots from creating fake users, have a “forgot password” mechanism. It’s a lot of work.

Or you could be DRY and say “Hmm. Where would most of my users already be?” Do most of them already have Twitter or Facebook accounts? Facebook? Perfect. Then be DRY and just leverage Facebook login. Use Facebook to log into your application. Done. They all you have to worry about is the rest of the app, like figuring out how to connect soulmates. Now that’s the tough part.

But the DRY principle can extend beyond software development. Think about where in your life you can leverage something you already have, or a combination of things, in order to create something new? Like applying Agile to all aspects of your life (try, iterate, and try again) how can you take things that you already have, and leverage them in new ways in order to reach your goals:

  • Are there people in your network who would benefit being connected to each other?
  • Are there things that you have in your possession that you can use to start a business?
  • Is there knowledge already in your head that you can use in order to make money?

We all have many things already. How do you take something you already have and create something new?  As using DRY is the quickest way to build new software, using DRY in life is the quickest way to reach your goals.

— image Thomas Hawk

The post Be DRY (Don’t Repeat Yourself) In All Things? appeared first on thinkfuture.

Agile Is Eating The World

yoga

A little while back, Marc Andressen (yep, the Marc Andressen from Netscape and Andreessen Horowitz) made a super famous statement I’m sure that you have probably heard a million times now:

Software is eating the world

Completely agree.

More and more major businesses and industries are being run on software and delivered as online services—from movies to agriculture to national defense. Many of the winners are Silicon Valley-style entrepreneurial technology companies that are invading and overturning established industry structures.

If you think about it – all content is now software – the blog you are reading is built on software, the computer I’m typing this post on wouldn’t run without software and you could argue (and I would) that some of the most successful business of today (and probably the next 5-10 years) will all be software. Look at Uber and AirBnB and their competitors – they are basically software companies with no real inventory – they simply connect those who need a service to those who can provide it. At their core, they are software. Algorithms.

If software is eating the world, then I have my own pithy quote:

Agile Is Eating The World

Although I’m sure that my quote won’t be as re-quoted as Marc’s was, but you never know. Let’s hope, right?

What do I mean?

If you have been involved with software development in any way shape or form, then you have probably heard of agile programming. Created in the 70s but not really popularized until the mid-90s, it promised a new way of developing software which for some things worked better than the old waterfall model.

If you’re not familiar with Agile, here is the short description from Wikipedia:

Agile software development is a group of software development methods in which requirements and solutions evolve through collaboration between self-organizing, cross-functional teams. It promotes adaptive planning, evolutionary development, early delivery, continuous improvement, and encourages rapid and flexible response to change

So instead of a linear, top down approach where you know exactly what you are going to build at the start by creating a super detailed spec, then handing it over to the developers to build, then they hand it back, usually late, over-budget, missing key features and probably no longer useful since the market has moved on, you all do everything together, in short little bursts.

Instead of the product owner dictating what they want to build, everyone involved in the project, the developers, the designers, the product owners, and yes, even the customers, all get into the same physical (ideally) space and map out what the product is going to do. Everyone brings their ideas to the table and everyone has a say. The coders start coding every and often, and there are regular checkpoints along the way to make sure things are on track, and if any changes need to be made, they can happen early and with the full knowledge of the team.

So far, most people think that this works great. And it usually does, IMHO because it kind of emulates life. Life is change. Change happens all the time, every day. And any methodology which doesn’t factor this constant change into the equation will suffer when put up against real life.

So if Agile is so great for software projects – why can’t it apply to life in general? I’ve been thinking about this for a while : if agile programming works so well for software because it deals with change – why can’t we use agile programming methods to deal with life? All of the tools of agile, like the daily stand-up, could they not be used to live life better?

Why not use agile programming to reconnect with your family in a daily stand-up? Why not use it to help your kids? Why not use it outside of work to help you through life? If software is eating the world, and agile is eating software, doesn’t agile eat the world?

I just listened to a TED talk where a gentleman (Bruce Feiler) talked about using Agile (and SCRUM, an agile technique) in order to help manage his family better. As I was listening I thought – he’s right. Agile is much more powerful than just a programming methodology – it could be a way of life.

As such, here is my version of the Agile Manifesto, edited for life:

  1. Deliver useful things rapidly
  2. Embrace change, no matter when it happens
  3. Talk to people about how you are doing and where you are going often
  4. Don’t be a lone wolf – co-operate with others
  5. Trust people to do things
  6. Talk to people face to face
  7. Create
  8. Keep moving forward
  9. Do the best you possible can
  10. Keep it as simple as possible
  11. Adults (and even some kids) can manage themselves
  12. Be nimble

Not bad rules to live by, don’t you think?

The post Agile Is Eating The World appeared first on thinkfuture.

Agile Is Eating The World

yoga

A little while back, Marc Andressen (yep, the Marc Andressen from Netscape and Andreessen Horowitz) made a super famous statement I’m sure that you have probably heard a million times now:

Software is eating the world

Completely agree.

More and more major businesses and industries are being run on software and delivered as online services—from movies to agriculture to national defense. Many of the winners are Silicon Valley-style entrepreneurial technology companies that are invading and overturning established industry structures.

If you think about it – all content is now software – the blog you are reading is built on software, the computer I’m typing this post on wouldn’t run without software and you could argue (and I would) that some of the most successful business of today (and probably the next 5-10 years) will all be software. Look at Uber and AirBnB and their competitors – they are basically software companies with no real inventory – they simply connect those who need a service to those who can provide it. At their core, they are software. Algorithms.

If software is eating the world, then I have my own pithy quote:

Agile Is Eating The World

Although I’m sure that my quote won’t be as re-quoted as Marc’s was, but you never know. Let’s hope, right?

What do I mean?

If you have been involved with software development in any way shape or form, then you have probably heard of agile programming. Created in the 70s but not really popularized until the mid-90s, it promised a new way of developing software which for some things worked better than the old waterfall model.

If you’re not familiar with Agile, here is the short description from Wikipedia:

Agile software development is a group of software development methods in which requirements and solutions evolve through collaboration between self-organizing, cross-functional teams. It promotes adaptive planning, evolutionary development, early delivery, continuous improvement, and encourages rapid and flexible response to change

So instead of a linear, top down approach where you know exactly what you are going to build at the start by creating a super detailed spec, then handing it over to the developers to build, then they hand it back, usually late, over-budget, missing key features and probably no longer useful since the market has moved on, you all do everything together, in short little bursts.

Instead of the product owner dictating what they want to build, everyone involved in the project, the developers, the designers, the product owners, and yes, even the customers, all get into the same physical (ideally) space and map out what the product is going to do. Everyone brings their ideas to the table and everyone has a say. The coders start coding every and often, and there are regular checkpoints along the way to make sure things are on track, and if any changes need to be made, they can happen early and with the full knowledge of the team.

So far, most people think that this works great. And it usually does, IMHO because it kind of emulates life. Life is change. Change happens all the time, every day. And any methodology which doesn’t factor this constant change into the equation will suffer when put up against real life.

So if Agile is so great for software projects – why can’t it apply to life in general? I’ve been thinking about this for a while : if agile programming works so well for software because it deals with change – why can’t we use agile programming methods to deal with life? All of the tools of agile, like the daily stand-up, could they not be used to live life better?

Why not use agile programming to reconnect with your family in a daily stand-up? Why not use it to help your kids? Why not use it outside of work to help you through life? If software is eating the world, and agile is eating software, doesn’t agile eat the world?

I just listened to a TED talk where a gentleman (Bruce Feiler) talked about using Agile (and SCRUM, an agile technique) in order to help manage his family better. As I was listening I thought – he’s right. Agile is much more powerful than just a programming methodology – it could be a way of life.

As such, here is my version of the Agile Manifesto, edited for life:

  1. Deliver useful things rapidly
  2. Embrace change, no matter when it happens
  3. Talk to people about how you are doing and where you are going often
  4. Don’t be a lone wolf – co-operate with others
  5. Trust people to do things
  6. Talk to people face to face
  7. Create
  8. Keep moving forward
  9. Do the best you possible can
  10. Keep it as simple as possible
  11. Adults (and even some kids) can manage themselves
  12. Be nimble

Not bad rules to live by, don’t you think?

The post Agile Is Eating The World appeared first on thinkfuture.