Here is an outstanding article on web development philosophy that really got me thinking today, written by Terry Chay of Wordpress. It’s long, but well worth the read.
This really got me thinking, and I’ll probably work on a comment to it this week.
![]() |
|
Here is an outstanding article on web development philosophy that really got me thinking today, written by Terry Chay of Wordpress. It’s long, but well worth the read.
This really got me thinking, and I’ll probably work on a comment to it this week.
Subversion is a version control system. It can run as either it’s own server (svnserve), or as an Apache module (mod_dav_svn.so).
When using the mod_dav_svn module for Apache, and doing an svn copy operation on the repository itself can fail if the VirtualHost configuration for subversion is not correct. Put simply, if Apache itself and mod_dav_svn are serving content from the same path, then conflicts can occur. Apache can get confused if it attempts to serve a physical file instead of routing the request through mod_dav_svn.
“svn copy …” operations will fail, while “svn update …”, “svn commit …”, and “svn checkout …” operations work fine.
Detail of the problem, diagnosing the problem, and the fix are below.
I wasn’t always a software engineer…
Before I began developing software for a living, I used to be in chemical research & development as a biochemist. For some reason, I always found myself gravitating back towards software and informatics, so I eventually gave in and started a software company. But I’ve learned a lot of lessons during my time as a scientist.
“I am enough of an artist to draw freely upon my imagination. Imagination is more important than knowledge. Knowledge is limited. Imagination encircles the world.” – Albert Einstein
Just because you don’t know the answer right now, doesn’t mean that you can made headway and figure it out as you go. I’ve learned the most when I’ve tried things that haven’t worked, but figured out what went wrong and then tried again.
“Genius without education is like silver in the mine.” – Benjamin Franklin
Don’t be afraid of challenging yourself and learning new languages, technologies or skills. Each one of them expands your experience and perspective, and can give you an opportunity to take a look at the status quo. Unfortunately, self-motivated learners are in short supply but in constant demand because they can adapt to any situation.
“You can know the name of a bird in all the languages of the world, but when you’re finished, you’ll know absolutely nothing whatever about the bird… So let’s look at the bird and see what it’s doing — that’s what counts. I learned very early the difference between knowing the name of something and knowing something.” – Richard Feynman
Let’s face it… The likelihood that you’re going to “knock one out of the park” your first time up to bat is pretty low. Whether it’s business or baseball, the odds are against you. It takes grit, determination, exercising yourself both physically and mentally, and lots of disappointment as you fail again and again. But each day, train yourself a little more, a little harder, and each day you get a little stronger. It’s cumulative, and it takes a lot of time.
“If I have seen further it is by standing on the shoulders of Giants.” – Sir Isaac Newton
In science, recognition is incredibly important and one of the first lessons that you learn. When you’re making a presentation, writing an article, or doing your homework, you have to cite any sources of information that when into your work. This is partly because scientists are focusing on sharing knowledge, and in order for the community to work together, there has to be trust between researchers that their information will not be stolen by one-another.
Even more so, no inventions are made in complete isolation. They are incremental improvements based on our understanding of our world and everything that has come before. The iPhone wouldn’t exist without the much earlier inventions of silicon wafers, transistors, plastics, aluminum, and light. And the next wave of inventions will be no different.
Take advantage of the information and knowledge that we have, but show respect to the community that this knowledge came from. You probably will need more help from it in the future.
I’ve found that Scrum, and Agile methods in general, are incredibly valuable in single-man “teams” if done properly. In my experience though, there are some sticking points that need to be worked through with how you work with your clients and manage communications. These will have a significant impact on your projects and how successful Scrum can be for you.
Before I get too far, let me give a quick overview of Scrum:
Scrum development is a business process that seeks to speed up development, decrease bugs, and increase the quality of products that are delivered. It doesn’t have to be focused on software development, but that’s where it has the greatest pull right now, and the use that I am going to focus on.
Scrum, at least how we use it (mixed with Extreme Programming), uses several key components:
A typical Scrum team consists of:
Things get really interesting when you start looking at roles for Micro-Scrums. When you are running a Micro-Scrum (such as if you are a lone consultant), the scrum master, team members and product owner are consolidated to a single person (you). And when your client is a small business, your contact ends up filling multiple roles, so your actual Scrum roles look more like this:
Consolidating those roles makes things both easier and harder at the same time. It’s a bit easier because there are fewer people that you need to communicate with. It also makes things more difficult because I, as the Product Owner, now don’t just need to make sure that the product is developed and delivered. I also need to fill the roll of a Business Analyst, so I need to understand the business case, consolidate all the user’s needs and prioritize their importance.
I also have to avoid focusing on my own “pet features”, which developers can sometimes do, and instead have to focus on what will bring my client the greatest value in the shortest amount of time.
Now that I’ve mapped out the landscape and I’ve distilled all those roles down to 2-3 people, let’s get into some details…
Starting a small-business development project as a Micro-Scrum involves a lot of communication. In my experience, clear communication will make the greatest impact on the success or failure of a project. There needs to be a very clear understanding from both the client and the consultant on what is going to happen and how the product is going to be developed and delivered. If you are on the same page and can negotiate the priorities, things work well. When your client can’t understand the iterative mindset and he wants it all done right now without prioritizing, it’s a lot more difficult.
Here are some lessons that I’ve learned the hard way:
All too often, small Agile studios like mine are compared to freelancers or overseas developers on sites like Elance and Guru. The bottom line is that we cannot complete with their hourly cost, so we don’t even try. What we focus on is Quality, above all else. Unit-tested code, usability & acceptance tests, code reviews, security audits, and active communication with our clients throughout the entire process.
It has worked well for us, and we’ve kept our current clients for nearly 2 years at full workload. The past year has been our best year ever, despite the recession.
This goes along with the previous lesson. The up-front costs are usually higher, however the bug rate is much lower and the documentation is better. Also, the risk and time involved when refactoring and modifying the code is MUCH lower. Software changes are anticipated, so we develop with that in mind.
When working with non-tech-savy businesses, keep the sprints short. We like to do 2-3 day sprints at the beginning to get them accustomed to the process. Even if that means just delivering them a framework, some raw code, a library or sketches, it pays off dividends over the course of the project. It opens up communication and makes sure that our direction matches their vision.
In addition, you get to run through a deployment dry run each time. If you notice problems in the process, you can fix them early on rather than waiting until the end and being surprised that their server doesn’t support a dependency that you built into your software. (It may sound silly, but it happens.)
The risk with this rapid iteration is that if you don’t explain why you’re doing this, your client may feel like you just don’t understand what they want. And they’d be right. The entire purpose of these short sprints at the beginning is to learn what your client wants by giving them something tangible that they can critique and use as a reference. That tangible prototype can help you understand what they really want.
Feel free to post flame-comments below.
What I’ve run into many times is that clients don’t always know how to explain their vision and be clear with what they want. For about 1 full month back in 2008, I beat my head against a wall because one of my clients seemed to contradict their needs on a weekly basis with an accounting system I was developing for them.
I decided, out of desperation, to cut the requirements gathering short and push forward with what I had at that point. Amazingly, I was pretty much right. After Sprint 1, there were some modifications and changes, of course, but I was able to hit the target with only about 30% of the requirements being known up-front. In addition, it forced us to build a very flexible architecture so that we could easily adapt to the unknowns and changes when we hit them.
What we do now is start with a very quick Sprint 0, maybe a week at most, and build the user stories, initial specifications and product backlog. There will be lots of unknowns and changes later on. Managing and working around those is just part of software development, especially when you’re working with companies that don’t understand software development.
This may seem counter-intuitive, but failure is a good thing. It opens the lines of communication for constructive feedback.
Our goals with all our projects is to “fail fast.” What that means is that we deliver a product in an early iteration (ideally Sprint 1) that our client will see lots of problems with. Maybe the interface doesn’t meet their needs, or the work flow isn’t intuitive. Whatever it is, I actually want my client to come back to me and say “I don’t like this.” I then ask them “What specifically don’t you like?” Or my favorite: “Let’s do a screencast and you can show me what’s happening.”
Take each failure as an opportunity to open the lines of communication even further. Learn exactly what your client wants by watching him or her use your application. Developing a Micro-Scrum team takes time, and building the relationship and trust through open communication is essential.
I’m sure you’ve noticed that communication is a common theme in Micro-Scrum. Actually, it’s really the primary driver behind Scrum and any other Project Management methodology. In order to deliver what a client wants, you need to have clear communication to truly understand their needs. In my eyes, there is no other way to deliver a successful product.
Scrum formalizes the communications and works to get everyone, from the users and stakeholders to the developers, engaged in the success of the product. When you are Micro-Scrumming, this communication becomes even more vital since there are fewer people involved and more responsibility on each person. Harnessed wisely, it can lead to very successful projects that have good short-term value and outstanding long-term value.
If you’re in the Columbus, OH area and want to learn more about Agile Software Development, I highly suggest going to the Columbus Ohio Agile Alliance (COHAA) meetings and getting involved in TechLife Columbus meetup group.
A group of researchers from MIT, Stanford and Syracuse have developed a new program, named “Ardilla”, which can analyze PHP code for Cross-Site Scripting (XSS) and SQL injection attack vulnerabilities.
Rather than just static analysis, this program actually traces the data through the software to determine whether the threat is real. This decreases false-positives significantly, compared to simple static analysis.
Here’s the technical paper for all us serious geeks…
Here’s a question about geolocation-based online marketing I received today:
I use google analytics. The service I sell online is location specific. I am getting visits clustered around various locations.
Any creative ideas on how to target visitors from specific locations? Does this make any sense?
Something like: If you are from San Diego, click here for a special offer?
Thoughts? Ideas? Experience to share?
Geotargeting your advertising messages is INCREDIBLY beneficial in a lot of cases.
In an unfortunately incident, I discovered a problem caused by the bit.ly Preview Firefox plugin…
A friend of mine called me saying that his blog was down. It was coming up fine in every browser except for Internet Explorer 7. After spending a good hour or so looking into the problem, I discovered a very bizarre problem that was caused by the bit.ly Preview Firefox plugin…
(A Firefox plugin crashing IE7. Yeah, right… But let me show you…)
He had copied another page and pasted into his blog using Firefox. He had accidentally copied the bit.ly preview <script> code along with it.
Once the blog post was published, then it caused a very NASTY and hard-to-debug problem with Internet Explorer 7. Specifically, it forced IE7 to issue an “Operation Aborted” error, and then refuse to load the page at all.
Here’s an example of an offending page. Load it in both Firefox and IE7 to see what the issue is.
Powered by WordPress