The following article is an article that I wrote duing my studies for a bachelor degree in Software Engineering. Minor changes might have been made to make it more suitable on this website.
Both my experience and writing style has changed since I wrote this article, but I still want to share my thoughts from 4 years ago.
Let me know in the comments below what your most common project startup difficulties have been!
There are a lot of usual suspects in the terms of risks, problems and other aspects of failure that you need to take in mind, worry less about the customer and more about the communication. This is highly important for success; you must find your way of communicating.
Be prepared; There will be problems
In the writing moment of 2009 I am currently in a development project of which I have the benefits of being System Architect. Having this position in a project is not something that is totally new to me; in 2008 I had the same benefit.
This experience of mine will be used as a reference point, so keep in mind that my points of view is not strictly from a developers eyes. Being the System Architect you have a lot of responsibility such as keeping track of each developers work process, extending each person’s views of the project and being a leader which never falls apart.
Starting a project, not just development projects but generally speaking you face a lot of common problems; team-work issues, financial issues, third-parties, customer issues and many more. I will not focus on the financial issues because the project we current work on is strictly, as they would say in the world of lawyers, pro bono; which is what we mortals would call free.
So not having to worry about the financial problems, we can focus more on the other areas, which in my eyes actually does cause problems and have as it does in many cases, caused problems in our project. Problems don’t always mean that the project fails or that everything falls apart, it just means that we have something to handle. We also have problems that are planned or more likely anticipated more than planned; a planned problem would be fixed before it became an issue.
The usual suspects
As mentioned in the previous part there are a couple of problems that you might anticipate in your project. There is no common solution that’s widely used on all projects. As a lot of other things in this world; things are different depending on the situation. This is the case of projects as well. I will merely give an overview of what could be expected and how I would like them to be handled.
Reflect over the following; is there anything like perfect team-work? I once said: Team-work comes from willing to cooperate it is not something that can be forced. It doesn’t matter how different you are; as far as we know, everyone is different. I would like to say something like: just work together, what is the problem?
However that statement is bold and doesn’t apply to reality. As mentioned earlier I work in a project, the project consists of 9 other developers where 7 of them are security experts and two of them are, just as me, software engineers. If you look closely enough you can see that there are a couple of things on both sides that resemble a similarity. The security experts have one way of solving problems and the engineers have another, what we need to achieve here is a common ground of both problem solving and the way of communicating.
Our project started out great, there were no direct flaws in the team-work, all parties liked to work together and we solved communication and other future problems very fast. However, as the project has evolved so has the teamwork, but has it evolved enough? As there is no direct answer to that, I can only speculate on the different outcome of today’s progress if we would’ve evolved more with the project.
As of the beginning, there were no issues with the team-work, we did not even argue about small things which can be a big problem in many projects. However as everything evolved and third-party problems came in place, we did come to the stage where we had to raise voices and stand ground.
Not all projects start out with a nearly perfect chemistry between its participants. And maybe it would be for the better to argue it all out in the beginning, finding all these communicational problems from the start and work from there? The outcome from our project is that you start to take things for granted, which is a dangerous path to take.
Customer related issues
The first thing that really comes in mind when I write “Customer related issues” is a direct link to money. No matter how you bend on in, when it comes to the customer, it’s always a matter of money. As for our project, this is somewhat a problem as well. Now, you might recall that this project is what we call it “pro bono”; free; gratis. So, what could possible be customer related that has to do with money? Well in our case the customer buys hardware for us, which they want to be further developed, this hardware is in a development stage and therefore not well documented. This means that we need to contact the producer of the product to get information. However, the producer being one of the world’s biggest companies; they do know when to ask for money.
Now this gives us a big problem, since the project doesn’t have any revenue we can’t afford this, so we need to ask our customer to pay for this. This results in a great problem;
- The customer places an order
- The customer expects everything to be done according to plan
- The customer is expecting everything free of charge
Now, the last two stated points above in the work-flow is where our problem is. Is there a solution to this? The project could be delayed, we could be put up in a workpool for other projects to gather resources from meanwhile the producer evolves the product and set up a proper documentation for it. However, we don’t have that time, so what has to be done is either brute-forcing the system gathering all information possible to solve it, or we ask the customer to pay for the education needed by the producer.
In our case the customer actually paid for this education, because this product is very important and scheduled to be delivered and sold after the summer 2009.
There are however a lot of problems not related directly to money, you can see these other problems a lot in the IT Consulting business where I usually work;
- Non-cooperative customers
- The all-knowing customer
- The non-paying customer
- The customer who says one thing and the customer who wants something else
I’m going to state something that many would disagree on; never trust the customer. You might get a surprised face when reading that, but in fact you should trust anyone than yourself; if you can even do that.
Now this is becoming fairly abstract but stay with me on this. If you really think about it, if you start trusting people you suddenly start relying on others to do what they say, always assume people are going to be late and if the customer says “How long will x take to develop?”; The first ting you need to think about is, does it take T hours? Does it take T – 100 hours? What’s the most accurate time? Before you say that, add a factor of 2. So, why add the factor of 2? Because you always over-estimate your skills, you might think that it takes 10 hours, but it takes 20 hours or even thirty hours. If you over-estimated and said for instance 50 hours, and it took only 25, your customer will be very satisfied. But if I take 100 hours and you said 50, you will have a big customer problem.
Managing the Team to avoid these problems
A great leader is one that makes the workers think they are doing everything that will benefit themselves. In my eyes a project manager is, or should be, very much like a great dictator; A great leader. If you were to revise the book The Deadline3 you would see how they speak of their mangers and what really makes a good project manager. Some of the points that you would consider is:
- The co-workers speaks well of you
- You are considerably good at understanding people
- Not scared of taking chances
- Risk your job every day
As a project manager you might need to risk your job every day, this meaning that you must do things that will benefit the group or the project in longer terms but might not be so good for yourself in the current situation. Managing a software project is just a game of risk management, if you were to find all casual risks and manage them, what else would there be to worry about?
Vote on HN
Welcome to this week’s Friday with Filip!
During the Fridays with Filip we’ve looked at how to ensure that certain parts of your project conforms to a high standard. I’m talking about the following:
There are so much more things (even small things) that matter when you want a successful high quality project/solution. You can’t rely on a decent testing strategy, security awareness and rapid development to get high quality. There’s still a lot of other aspects in your project that you need to take into consideration.
When I studied for my Software Engineering degree there was a lot of talk about requirements documentation, design documents and all other kinds of documents that you had to write in order to get a good overview of the project. But there were actually less talk about how to retrieve this information.
One of the first things you’ll learn when talking about domain driven design is: use a language that both you and your customer understands. In order to get all requirements or the system design onto paper, you need to understand each other. Do you see where I’m getting at? We need to step back to the basics, to things that was important even before computers and software projects; we need to be able to talk to each other so that everyone understands!
Previously this week I asked something a bit weird on twitter as you can see in the image below.
At a glance, this might be a very weird question. Why would you explain something that is so far away from their reality? Someone responded and said that they would just not do it because they would probably be killed for knowing too much.
Technology is amazing and as a Software Engineer with a burning heart for programming I tend to try (almost) everything new that arrives to the market but not everyone do and this is very important not to forget. Since not everyone is so used to technology, we need to work on the way that we communicate with each other. A couple of years back I built a website that had to do with cars and the people that wanted the website had no idea how the process of building a website looked. So I had to use analogies they understood, I had to talk in car terms.
Therefore it’s very important to actually step back and find a common ground between you and your customer. Otherwise it will be near to impossible to deliver high quality; you’ll never get the right requirements!
As I said in the start of this there’s not one or even 5 things that will ensure you deliver high quality, you need to work on all different aspects. Here are some concrete suggestions (that might seem obvious):
- Find a common ground between you and your customer so that you speak the same language
- Design the architecture in a way that you could talk about objects and structure in the application which the customer understands
- Use the right person for the right job!
- Write lots of documentation before, during and after the delivery
- Have small iterations in the beginning where you continuously deliver parts of the system for reviewing
- Do code reviews, swap people around and let everyone review everyone
- Don’t be afraid to ask your customer questions if you don’t understand
- Don’t be afraid to ask you colleges for help if you’re stuck!
- Don’t get used to putting work off by writing TODO’s in the code
- Take a couple of seconds to write a comment about a method or a complex code block
- Remember that we’re all human, everyone can make mistakes; help each other out and solve them together
- Stay on top of new/old technology and use what is best for the project/customer. If a newer framework or tool means more job, maybe it’s the wrong tooling for this job; even if you want to play with the latest toys
This list can go on and on, frankly there have been books heavier than my laptop written about each point in the list.
What’s your pro tip to increase quality in the code, project and customer communication?
Vote on HN
Organize your thoughts
Do you get a lot of ideas when you go to bed, that you forget in the morning?
I sure do and I know that this is very common. The reason that I’ve got explained to me is that because when we go to bed, we relax our entire body & mind. When doing so we also start reflecting upon the day or even week that has passed so far; subconsciously.
At least for me, seconds before I actually fall asleep (last thing that I can remember) I get the best ideas but often I lack things around me to get these thoughts on permanent record.
As I live, love and work with code this is where most of my ideas orbit. But occasionally I get other ideas as well, things like where I want to travel, what I want to see and what kind of changes I like to do in our home.
Last year, I attended NDC (Norwegian Developer Conference) and I somehow got to join the speaker/staff cruise. At this party, I met a lot of very interesting people and one of them gave me a very good insight into how he captures the moment; he always has a pen and some paper in his pocket. On these papers he writes all kinds of interesting ideas, suggestions and anything else that you can imagine.
As I hate “analog” writing, I didn’t really like the idea of carrying pen and paper with me everywhere, but the idea was great; I just had to find something that worked for me. I’m still in the process of finding exactly what works best for me!
Finding the right tools
There is something that is always by my side, everywhere I go and it would be awesome if this accessory could have an easy way to log thoughts on. Of course, I would want to be able to access these thoughts anywhere, even if I drop the accessory.
I’m of course talking about my smartphone and storing the content in the cloud!
As for just writing down my thoughts, taking photos and storing smaller portions of information; I tend to fall back to evernote. This is by far the best application that I’ve used for rapidly store notes in the cloud!
Here are some reasons to why I use Evernote:
- It’s easy to rapidly create new notes/images
- There’s a free version!
- It works on all devices (PC, Mac, Android, iOS, Windows Phone)
Since I always have my phone with me, no matter where I am; I can instantly add a note with my most recent ideas. Then it’s of course up to myself to actually follow up and checking my own notes now and then.
This is what the PC version of Evernote looks like:
One very cool feature is that you can actually search inside both your notes and your images! If there’s text in images, Evernote will be able to find that!
Mapping your mind with a mind map!
Up until recently I felt it was difficult keeping track of all my thoughts that I had in meetings together with all the feedback from customers and co-workers. This is because either I put everything in a text document using Notepad or an Excel spreadsheet. Neither of these two alternatives have been very fun to work with. Another problem is also that it’s not quite so fun sharing just plain text with your co-workers or customers. So I wanted to find something else that was fast and that gave me great possibilities at the same time.
I actually stumbled upon a software called XMind, which is a tool for creating all sorts of diagrams. Best of all, there’s a free version! It doesn’t include all the fancy export possibilities or some of the more interesting modes; but the free version sure does the job well enough!
XMind can be used to create the following diagrams (more can be downloaded):
- Project Plan
- Project Status Report
- Project Dashboard
- Organization chart
- Short meeting
- Meeting Manager
- SWOT Analysis
- Cause & Effect
- Make a Decision
- Weekly Plan
As you can see by the image below, there are a lot of very nice diagrams that can be created.
When I just want to brainstorm and get my thoughts organized, I create a Blank document and just start adding nodes. By pressing Enter/Tab you create a child to the current node. So if you double click the first big blue box in the middle and name it, press Enter and then Tab, it will create a child to that.
You can see on this image below that I’ve created a map over what I have and want to write about and then added sub-sections to each topic to make it easier for me to remember what I want to write about.
The alternative that I used before is not as nice and does not provide as good of a overview. This could as mentioned above have been doing it in a notepad document, spreadsheet or even the built in Sticky Notes application in Windows.
I think it is very important that we find good ways, especially ways that we are personally comfortable with, to keep track of our thoughts and ideas. It might feel a bit unusual to start, but stepping out of one’s comfort zone can lead to something very good.
It’s a great feeling being able to enter a meeting, taking notes and directly after the meeting not be ashamed of sending your mind map to your co-workers.
How do you normally organize your ideas and thoughts and what tools do you recommend for taking notes during a meeting?
Vote on HN
Let’s assume that you run a company, no matter if the company is big or small. Just imagine having to build a project where you know that your current staff either doesn’t have the right knowledge to solve this problem or the number of staff members is not sufficient. This is where your company will face a problem, either you hire some new personnel or you consider Outsourcing your project. In this text, we will talk only about outsourcing when it comes to information technology projects not any other work fields such as call centers etc.
So when browsing Wikipedia¹ we see that the following description is given “Outsourcing involves the transfer of the management and/or day-to-day execution of an entire business function to an external service provider”. This means that we can transfer our activities on our project to another country and have others take the work load. If we think closely on this, for how long has really outsourcing been available, when did it become easy to Communicate with countries far away? The answer is fairly easy, assume we had no internet and no computers, how would we then communicate with ie India? It would be impossible to this without our technology we have today. So considering a good interaction with computers is both a requirement and in today’s work spaces something that we can assume exists.
Outsourcing your project has in the last couple of years become a bigger and bigger way of solving company problems, these problems being Cultural, communicational and other areas of inconvenience as discussed by Sofie Alriksson².
This gives a good overview of what exactly Outsourcing is and how it’s adapted, now let’s continue discussing benefits and how technical problems might affect our work.
As roughly mentioned above the benefits of outsourcing in general is to take the work load of your staff or to gather new personnel. As mentioned by Sofie Alriksson², adapting Outsourcing is mainly because you want to work on your core activity and let others focus on the outmost parts of the project, having companies’ overseas working on your modules while you are focusing on the main frame.
When having a computer project the price today is often very high, especially the production const, personnel in ex Sweden is very high this will of course give a result that the project will either be rushed or that the company will not afford having the project running for long. By outsourcing your project this scenario might change dramatically meaning that the cost for personnel is much less and this giving more money to more personnel having the project released faster.
Adapting Outsourcing to your project
Handling work load over seas
One of the first things you might consider when starting a project is to have all the documentation ready, this means that having UML-documentation, project plans, time tables and other planning papers ready when outsourcing, because being over-prepared doesn’t exist in the world of outsourcing.
Another thing to consider is; how will the outsourced company handle regular deliveries? What project models do we need to follow? These are some key points to consider, which again takes us to the most important part of all, the computer interaction. We can’t have fairly good English speaking personnel overseas calling us in the middle of the night giving us a project status report. A lot of the countries where outsourcing is cheap, is in another time zone that where the staff is actually expensive.
So how would report on a daily basis work? E-mails might not be as secure as you’d like, because the service itself is not encrypted, meanwhile there are of course solutions for this, but not to take this too much off topic, I’d say that using a closed project platform such as Sharepoint or any other project organization software out there. You can probably find a lot on the open source community which you could customize for your needs.
However, let’s not talk more about the software to be used but rather how we use the selected way of reporting. This is something that we really need to point out to the outsourced company, how we want them to report. As mentioned before, being to clear on what you need, how you need it and when you need it, is never a bad thing.
Outsourcing might sound very good and sure can be a good solution for your situation. However, there are always downsides with solution that presents them as being this perfect. These problems are taken up by both Sofie Alriksson² and Jeff Atwood³, besides from the obvious that your project might be shipped to India where you will have no visual perspective over the work, you might find troubles such as the ones Jeff Atwood³ states here “They get cancelled. Or the consultant who bid on the work never delivered, or delivered poor results. Or the client has unreasonable expectations, or doesn’t actually know what he wants.” What actually does happened if you bid too low and the consultant or outsourced company realizes this and in the middle of the process decides to quit? There’s no good solution for that problem, being repetitive is the best learning process, so here goes again, never ever give to little information.
The above problems isn’t the only issues when adapting outsourcing, you might as well find that the cultural difference it way to big and this problem is clearly talked about in Sofie Alrikssons² paper, she also presents a possible solution which in this case was to inform the company where you outsource of your culture and how you like your work to be handled. It’s also very important that the hiring company has knowledge about the other culture, understanding is very important from both parties.
How does the cultural problem affect the computer interaction? For instance imagine outsourcing your project to India where they have totally different believes than we have here up north, this means that they might have different rituals than we do such as preying on a regular basis and on a specific time. If the hiring company does not have knowledge about this, what happens when we try to call them at this time, or when we assume to have something delivered? As you can see, this is not really a computer interaction problem, but rather a religious misunderstanding. But a cultural problem that actually will affect the interaction is the Technical perspective. Sweden per say is one of the countries in the world with the best technology, meaning that we might actually have different assumptions regarding technology and how we use computers, than the company in the outsourcing country. The reason for this might be a lot of different ones but for instance that the country is in general poor and can’t afford to take in new technology and adapt to the new standards. This is a very important point when viewing and discussing human computer interaction.
Some of the technical problems are talked about in the previous topic but there are another perspective than the “cultural technology perspective”, the upcoming issue is however a result of that problem. If you imagine the scenario where a company in Sweden needs a new application to be developed for the new mobile technology. If this was a couple of years ago, let’s say 2004 when 3G was fairly new in Sweden and the company 3 was the only ones having this. What if the company 3 would want to develop a new mobile application using the 3G technology, but the application is so advanced and needs a huge amount of staff members to complete. This is simply too expensive for a new company like this to invest in.
However outsourcing this will help and make it more cost effective. But outsourcing this to a country like India which might not yet have this technology, will cause an inconvenience. This problem will therefore make the project cost much more, since the customer needs to set up a test area and development area for this to be developed and from a strictly computer interaction perspective, who says that the people adapting this technology in India, will follow the same principles as we do here?
We need to keep in mind that different people think different and that different cultures are very different meaning; Applications created by an outsourced company might not be as you would’ve made it yourself. Keep in mind that we are talking about software and / or general computer development and research. With this in mind, how differently would you think that an outsourced company documents, programs and do other tasks differently from how you or your staff would?
This question brings up a huge problem when outsourcing, the technology and the way of adapting it, will cause issues between the parties and as Jeff Atwood³ said “For example, people asking for a clone of ebay for under $500”
A new company in Sweden that might not have any experience working with software development might think that it’s just typing as Jeff Atwood4 talked about. But this is in fact wrong, it’s complicated being a software developer and having to do with a software project might not always be so easy. Thus the applications that developers, managers and other involved staff members use has a quality requirement, they need to be top notch. Using such software and styles might not be widely known, a company might have its own developed software which they do not care to share with other companies. These are also aspects to take in mind when taking on a project which needs outsourcing.
Having discussed the benefits of using outsourcing and the downsides with the applications, culture and other aspects, we need to take a look at a final point on the downside this being, the result of the software product. We can assume that people from ex India are smarter and have another mindset than other countries such as Sweden, they work for less, they know they can easily be replaced, which leads to a harder work style. Now what can possible have to do with Human Computer Interaction and the “samrtness” of a population? Having a usage base that is generally smarter and thinks on a completely different basis will result in your application being made for this crowd. This directly affects the computer interaction, on the visual basis that is, because the hired personnel might interpret how to solve something graphically in a way you would never imagine.
Outsourcing and Open source what makes them similar
Open solutions, the advantage
Open Source is a very broad topic and will not be discussed thoroughly here. But the main purpose of an open application is that the community, being either developers or users can easily get the software and / or its source code; Source code being the logic for how everything behaves.
You could say that all software projects share a specific way of working and this is mainly the structure and documentation of the project. Some projects require this more than others; such as an open source project and an outsourced project. An open source application is often free of use, but there are of course applications that do cost money but are still open source. Either way, the most important part is to help the contributors understanding your business logic and the graphical user interface programming.
This is done by having good documentation and well commented code where you explain all the steps, of course you should never make code unreadable by adding to much comments, then the interaction with the code will just back draft.
When you create an open source project, you force this structured work way from the beginning, there’s no space for spaghetti code or ugly solutions. These parts will be replaced immediately and the programmer will probably not be welcome on this project further on.
This is a big advantage, letting the community contribute to your project and giving you a lot of feedback on it. However, what happens when you want to go global and have a paid for application? The contributors will then require some kind of assets for their work.
The feedback from the community is worth very much on a big project and might help you in long terms; the community is often willing to help out with the most outrageous projects just for fun or for experience. On an outsourced project however, you might not feel that you have the same commitment, however this is because you actually pay for something getting done, and you need to rely on the programmers to do their work. In an open source development you can’t force anyone to do your work.
Marketing and new technology, community help
Let’s play out the scenario where you somehow come up with an idea of a technology or a software that isn’t on the market, but you know that this will help the community a lot in many ways. A project of this sort might be an electric car or a car driven on water, however that has nothing to do with software projects so let’s not talk more about cars.
When you have this kind of idea you either want to make a lot of money or you want to help the public community, but who ever says that money isn’t equal to motivation lies. The main purpose of a project is, in most cases, about making money. So you stand before a dilemma, either you publish your diagrams, project description and other project plans on a public community forum or create a website where you explain your situation. Which then might actually lead to someone else stealing your ideas and benefiting from this which results in them being rich and you being back to square one.
But planning the project well and having good license agreements can help you on the way, you might state that if anyone works on the project they are entitled to their name being written in the EULA or somewhat like that. Keep in mind that an open source project might not be a completely usable alternative for an outsourcing solution but it’s a good point to take when we talk about computer interaction because both type of work requires some common work ways which are good to think about.
Having an open source project which grows big might not only help you development wise but also marketing wise, because having a lot of programmers sharing their thoughts and interface suggestions and so forth will attract a crowd.
And think about it, when having an outsourced project you need to have the following aspects top notch:
· Project plan
· Commenting templates
· Documentation templates
· Bug reporting system
· Source control system
These are just the aspects that really need to be perfectly planned no matter if it’s an open source project and outsource project or a local project on your company. For human computer interaction purposes these need to be top of the line.
Can you yet see another similarity between open source and outsourcing? If not, let’s present it; People around the world contributing to software development. See that as a headline of both Open Source and Outsourcing and the two latter names as an “implementation” of this expression. When having an open source project you never know what culture a contributor comes from or which time it is in his country. This forces an adaptation to new technology and a generic culture understanding.
1. Wikipedia. Outsourcing. Wikipedia. [Online] 12 08, 2008. [Cited: 12 08, 2008.] http://en.wikipedia.org/wiki/Outsourcing.
2. Alriksson, Sofie. Communication problems by using outsourcing international . Communication problems by using outsourcing international . Halmstad, Halmstad, Sweden : Halmstad Högskola, 12 08, 2008.
3. Atwood, Jeff. Coding Horror. Can You Really Rent a Coder? [Online] 11 23, 2008. [Cited: 12 10, 2008.] http://www.codinghorror.com/blog/archives/001190.html.
4. —. Coding Horror. We Are Typists First, Programmers Second. [Online] 11 17, 2008. [Cited: 12 10, 2008.] http://www.codinghorror.com/blog/archives/001188.html.
5. David Axlund, VD Mailopages Sweden AB. VD. Karlskrona, 11 20, 2008.
6. Ekberg, Filip. The Art of Teaching. 05 : 12, 2008.
7. Masses, Development for the. Development for the Masses. Communication problems in outsourcing. [Online] 2008. [Cited: 12 10, 2008.] http://www.dev4masses.com/a_communication_problems/.
By Filip Ekberg and Göran Petersson
Vote on HN