Showing posts with label software development. Show all posts
Showing posts with label software development. Show all posts

Monday, 15 December 2014

Making good estimates and ways to reduce delivery dates



Making good estimates is very important because it keeps the project goals, dates and budget in a healthy state. Sometimes we take the easy path and just throw numbers for the budget and the time that it takes to deliver the project, but that's a bad practice, we must review documentation, experiences and the people involved in order to give a good estimate and support our numbers. The best way to obtain support data is through old projects and similar situations, this information should be easy to obtain if we keep track of what was the real budget and the real dates of delivery of all the projects.

First I will talk about the required steps to have good time estimates:

  • Divide the project in tasks. This is the first thing you need to do. Each task should take around two through five hours to complete, some tasks might take more time or less time, for example, certain tasks are very important and they need to be isolated, or it could also happen that they need to be completed all at once. Something else to take into account when dividing tasks, is to keep them as self independent as possible, meaning that there's no dependency on another tasks. It's always easy to estimate the time required for small items than the one required for big items, this can keep you focused and find additional requirements/documentation/people that you will need to complete each task. This also helps when you're looking for similar situations in the past, it's easier to find a matching similar situation when tasks are divided properly. Another good thing about this is that it helps in understanding if some tasks should be made by another team, for example, in some cases, testing accounts can be provided by another department because they know better what are the things that they want to test.
  • Review old projects and find similar situations. This is the best way to know how much will it take to create a similar project. Take into account that if the new project is really similar, we may end up finishing it sooner than expected. This is because in most projects, there's a learning curve for items that needs discovery and reading documentation.
  • Poker game. When deciding the amount of time required for a task, it's a good idea to have the opinion of one or two experimented members of the team, they always see something that is missing for the other individuals, and that could be key to set the estimate for the task. Keep in mind that if the estimates provided are very different, is a smell of insufficient data to set the required time for completing a task.
  • Pre-steps, Post-steps. It's important to know if there are another things needed to start and to finish the task and add it to the estimate. For example, you might need to create a branch for working on the task, set up a new account for a system, wait for a testing environment, etc. Those are the pre-steps, but when you finish the action items of the task, there might also be another post-steps, like creating release notes, sending out an email to the business owners, deleting testing accounts, etc.
  • External factors. Network team is too busy to set up a testing environment? Working with the financial area in a time that they cannot provide information fast? Can you release the software project in the date you selected?. This and many other questions are important when creating an estimate and deciding on dates of delivery, if you have been in a similar situation before, it could be easy to know when some external factor will be affecting the date of delivery.

There are many things to take into consideration! but something to keep in mind is that you should stay as "optimistic" as possible, meaning that you cannot put as a support to your estimate, the fact that there could be an "Armageddon" tomorrow, and your project might not be completed on time.

There will be situations that can delay the delivery date of the project, but they should be addressed at the moment that they happen, and the project should be reorganized accordingly. Another thing that I would like to talk about is ways to deliver the project in less time, and with less effort:

  • Get all the team interested in the project involved. Software projects are not completely developed by the software team. If there are going to be changes to the some department systems, it's a good idea to have them involved as much as possible, and even assign some tasks to them (like finding testing accounts, providing data analysis, etc). The outcome of this will be early checking the requirements of the departments and based on that, planning the next steps, on the other hand, the departments can know how's the project going, what are the expectations, provide early feedback about features, and give relevant data for testing.
  • Buying systems. Many projects are similar to current systems in the market. If you can buy a system that has a decent trade-off between cost/value/quality, think about buying it and customizing according to your needs. You should buy a very known system in order to trust that it has been deeply tested and that can reduce the time required for delivery.
  • Request help from another company. If you have the budget, it can be useful to have another company help you, specially if they're experts on the system you want to develop, this can be cheaper than expected, because they have passed the learning curve and can save you a lot of time, and allow you to focus on another projects that can only be developed by your team.
That's it for now. I hope you enjoyed this entry. Let me know if you have any questions or if you would like me to talk about another topic. Many thanks readers!


Sunday, 9 November 2014

Introduction guide for successful websites (SEO, analytics, page rankings, popularity, code insights)

Popularity, visibility, traffic, are important characteristics that a web site must have in order to be successful. I will talk about things that you can do to improve your website. Please take into account that this is for general purpose and that in most cases they work, but depending on the context, you might find it useful to follow other paths.

A very helpful tool you can use to know who visits your website and give you important usage statistis is google analytics. You can follow the instructions on this page to have google analytics on your web site: https://support.google.com/analytics/answer/1086338?hl=en&ref_topic=1726910&rd=1

Now that you have this tool, I will present you two major aspects and the important recommendations you must follow during the Search Engine Optimization process:


1) Code


Search engines are indexing web sites. They work on understanding what's the page about, and then they can categorize and assign search keywords to decide when to show up the page. But remember that search engines are reading the html code, so if it's not structured in a good way, it will be very difficult for the search engine to index and categorize the pages. The starting advise on this is to set metakeywords and metadescription according to the page content, try to catch the big picture in a few words, this is a marketing endeavor, but devs should be aware of having this done for every important page on the website. Another recommendations are:

  • Having friendly URLs. The first thing used to index a web page is the URL. So it's important to keep them readable and understandable. For example it is much better to have foo.com/colors/grey, than to have foo.com?default.html?category=12&item=15.  Can you do some interesting indexing with the second url? Guess what, search engines cannot do it either. There are many tools that depend on the code / technology used for creating the page, that can help in having friendly urls. 
  • Title is important. I'm referring to the <title> html tag. This is the second thing that the search engines use for indexing the page. What does the title says about the content of the page? It is important to have this in mind when you're setting it.
  • Content should start in the first lines of the html. This means that the content specific of the page should be easy reachable by the search engines in the first lines of the html. If you put a lot of non content related code, search engines will fail to do a correct indexation of your page and it would be hard for your page to be reachable even if someone is searching for something specific to  your website.
  • Optimized static content. Images, css and javascript are static content that should be optimized, in the case of the images, this means, that they should have a decent size, a helpful  tool to accomplish this is yahoo image optimizer or irfan view, this last one has a way to do a batch compression of a set of images, this is very helpful, because you can reduce the size of a complete directory quickly. Talking about css, it is recommended to have all the css in one or two documents at most, it's not recommended to use inline css and in order for the browser to load the page quickly, it's a good idea to use a css minifier like css compressor, css should be somewhere in the <head> tag to make it easy to read for the browser. Talking about javascript, it's a good idea to have it in one separate file, it's not recommended to use inline javascript and it should be placed near the end of the html in order for the browser to load the page quickly.


2)  Marketing 


I will not give a full detail of why marketing is so important and the things you can do to improve it, because this blog is about software development and the technical -develoment- side of it. Anyway, there are some things that I would like to mention.

  • Be aware of the analytics concerns on the website. In order to obtain useful data from analytics, the marketing department should decide what things apply for the website. For example URLs need to provide useful data. For example, let's say that you're a company that sells hotel reservations and that you need to know how many reservations are made per month for each hotel company, and that you're not that interested in knowing the place. In this case, the url confirmation of the hotel reservations, can be created having this format: hotels.com/Confirmation/HotelCompany/Place/.. and then, in google analytics, you can see how many confirmations were made to an specific hotel company by checking the visits made to this url: hotels.com/Contirmation/HotelCompany. If you were to do it the other way around: hotels.com/Confirmation/Place/HotelCompany, it would be hard to obtain the decided data, you'll need to check all the visits made for each place to the hotel company you're looking for. Another important thing to define is when you want to track URL clicks from your website, this are concerns that the marketing team needs to establish and make them clear to the developers in order to get useful data from analytics. If you want to know more about URL structure, check this post.
  • Get insights from analytics. Once the website is launched, it's a good idea to keep track of the visited pages and the flow of the customers through your website, in this way, you can have useful statistics for knowing things like, which products are being successful, which sections of the website are used (for example, if you have a comment section, it is helpless if it's not in use), and so on, this can help you decide on future campaigns and see were you need to make investment.
  • Targeting more than one country. Some people doesn't know that having different websites (even in the same language) but that target different Countries, need some special considerations. For example, if you're using the same top level domain for both websites (for example storeforusa.com and storeforcanada.com) and you have pages with the almost the same content (for example the page of a product) then, when you search in google, you'll find results from both websites! this is because .com is considered "international" for google. You can change this behavior by using a different top level domain, it would be better to have something like: store.com.us and store.com.ca. And apply some configuration changes in google analytics. For further and more specific information, please visit this google documentation page.  

A final advise is to use tools that can help you know which aspects of the code can be improved. I find them very helpful, you can read the results and take action to improve the code, they give information about loading time, css, image improvents and so on:


There are many benefits of having a well optimized website. If you want to check them, please follow this link. I hope you enjoyed this entry! 




Sunday, 26 October 2014

Soft skills - An overview of major software aspects

The "darkest" required aspect of sofware development! (or at least I believe so). But in the end it is a very important aspect -just like the others- because it relates to communication, and the ability to obtain the required information at the right time.


These are some important soft skills for software development:

  • Communication abilities. Needless to say how important it is! developers must find a way to effectively communicate with the team and vice versa. Something I always suggest, is to write what we want to communicate, it is usually easier, and then start a discussion with the team.  Communication abilities, include the effective way to answer emails, which can led to a complete entry, but the thing is to always focus on the key questions of the email, and answer then, once that that happens, then you can continue with less important topics like "personal" questions. For example, let's suppose that you arrive late one day and you receive an email asking about why a component is not working properly and the reason for you to be late. You should start answering the reason why the component is not working properly, and then at the very end of the email, the reason for you to be late at the job.
  • Team work. You'll usually find yourself working in conjunction with other members of your team, so it's important to know how to be a good team player. Be polite, be respectful, keep focus on what you're doing, be assertive, be on time, and be inspirational to the other members. Put your personal feelings on one side and be professional, try to understand your team-mates. Some concrete advise for example, is to be very communicative, for example, if you're taking a day off, you're probably telling your boss about this, but you should also tell this to the members you're working on, so they can get organized. Take an active part when you're being asked about code conventions -or any  convention: arriving late, taking day offs, changing lunch time, etc-. That is the only way to keep a team happy and effective.
  • Negotiation. When you're in charge of a piece of the system, sometimes you can be asked to do stuff that is very complicated and that cannot be delivered on time. In this cases, you must communicate this, and id possible, analyse what you are being asked to do, and come up with another option. This apply usually to developers, but also for project managers, when they're being asked to include a lot of features, they should find a way to balance the due dates vs the work that has been developed.
  • Education. Unfortunately -or fortunately?- education has a lot to do with soft skills. Usually your parents are the first ones to teach you how to handle situations. Of course, having a "bad" education is not the end of your career, you must also read books related to this topics to get a full understanding on how to be an excellent developer. And another thing to keep in mind is to use common sense. If you're in a complicated situation, what can you do to improve it? is it your fault? what options do we have? And keep yourself positive, don't let other people bitterness change the person you are. Think always on a polite way to handle situations, if you receive a rude email or someone is acting awfully, you shouldn't do the same, keep focus on the goal of the project and find a polite answer to the request they're making.
  • Ownership of your tasks. You should always take full responsibility of your tasks, this means that you should find a way to get all the things you need to complete the task. A good example is scaling communication ways. If you're in need of some information, and you send an email, if you're not receiving an answer in a reasonable time, you should then try chatting, if that doesn't work, then try calling, and finally, if that also doesn't works, you should talk directly your request. This is why daily scrum meetings are important. If you get stuck on something, you'll find a way by letting everybody knows about your need. There are many other things like, checking your own progress, and see if you're not going to deliver on time, make everybody knows the reason. Don't forget to do on-line research whenever is needed and try to find interesting ways to solve the problem.

These are some consequences when the team doesn't have soft skills:
  • Critical errors because of a bad communication of issues
  • Loosing a lot of time in questions that were not addressed at the right time
  • Big differences between: what is really needed, what it's being done, the project specification and what the customer requests
This are questions that can save a project:
  • Do we really, really need all the features for the first release?
  • Is there an existing software that can help us in developing the project?
  • Is everybody in agreement with the project specification
  • Is it possible to divide in more releases the project?

And that's it folks, this series is coming to an end! I hope you enjoyed it. Let me know if you have questions or if you want me to talk about something in particular for future entries.

Administrative goodies - An overview of major software aspects

I wanted to dedicate an entry to the administrative aspect of sofware projects, because sometimes the project can have a very good architecture, excellent code and marvellous performance and yet it fails the expectations because it has a very poor administration. I will not get very deep into this topic, because it is the least technical aspect (at least for developers and IT persons).

Basically these are the major administrative aspects:

  • Licensing. How are you going to license the project? is it a free social project? are you going to sell add ons? how much will each license cost. These are some questions that must be answered when creating a software project, because in the end you need to find a way to pay for the development of the project. You must also make sure that you're following the rules of your country, otherwise you'll have problems when trying to commercialize the project.
  • Marketing. You have to know very well your target market to do marketing. It's important to reach your people and to make them use your software. Here you must think about stuff like: is there any other similar software? how can I reach more people? what are the strengths of the system? How can I communicate the features of the system to the target users?
  • Brand creation. It doesn't matter if the project is going to be free. if you're targeting a wide market of people, you must create your brand and make everybody recognize the project with the logo or slogan of it. Think about a small and easy to understand slogan that describes your system. Have you seen this before? of course! for giving you an example, all apple products have a very small slogan that makes all the world know why are they created and the usage that each product has.
  • Payment methods. If you're going to commercialize your project, keep in mind the payment methods, and analyse the options that you can offer to your target market.
  • Contracts. If you're selling the software to another company,  don't forget to have a very good and specific contract! The documentation made for the test can be helpful, because it describes the features covered and the expectations, so you can use it for the contract with your customer.

Short entry, I know! but I hope you like it. Leave comments at the end of the section and let me know if you want me to talk about a particular topic.




Clean code - An overview of major software aspects

Let's start by defining what's clean code?. This definition can get very particular and specific depending on the language you're using for developing and the assumptions of the system. But basically, I would say that clean code is code that is easy to understand and easy to use for the environment that it was created for. Just like Robert C. Martin stated in his book:  Clean Code: A Handbook of Agile Software Craftsmanship: , “Clean code is code that has been taken care of. Someone has taken the time to keep it simple and orderly. They have paid appropriate attention to details. They have cared.”

Sound pretty straight forward isn't ? But truth is that it takes time and effort to have clean code, and another important thing to notice, is that code is really the core of any system, and that it almost always is reused by other developers, so it's important to keep it clean, besides, having bad code lead to terrible outcomes that will be explained later. Extending a little the defition, this is what I mean with code easy to understand:


  • Relationships between projects are easy to understand
  • The methods are easy to understand and they don't need a lot of additional comments more than their name and the context to  make sense of the usage
  • The flow of the system is easy to understand and you can guess it by reading the code
  • The names of the variables make sense and it can give you context of where they belong and their usage  
On the other hand, this is what it means to have a code that is easy to use:
  • Classes and methods are small and they're in charge of only one thing
  • There are API for projects and that's the only way to communicate between other sub-systems
  • Testing is easy and there are interfaces for important classes
  • At least 80% of the code has unit tests, and there are integration tests for all the features
  • There is no need to have a big set of documentation for the project. The methods, classes and structure of the projects, make it easy to understand

Something to really keep in mind are names of the classes and methods. They are very important because business people also talk about them, so you are very likely to have smart conversations using names of variables / classes / projects. Besides, new developers might be re factoring or adding new features to the code, and they will have a big "?" on their minds if the names are "encoded" in a weird language. You don't want to look like him, right? 




The cost of not taking care of the code is really high. We're talking about:
  • Productivity
  • Efficiency
  • Assertiveness 
You cannot have a good estimate of time for new features when you're working on a system that has bade code. You will never know how many new bugs you can create when you're adding features or how the flow of the system is affected as well as how many areas you need to do regression testing.


Another entry comes to an end. I hope you're enjoying the series, let me know if you want me to talk about some particular subject on software development, I will be happy to do so. By the way, I really recommend to read Robert C. Martin book:   Clean Code: A Handbook of Agile Software Craftsmanship . I'm sure that it will help you in creating better code.

  





Tuesday, 16 September 2014

Front end Performance - An overview of major software aspects

In this post I'll be writing about Front end performance focusing on web applications, but many things apply to desktop and mobile systems. You'll need some background on web development to understand the story behind the scenes, I also recommend reading the introduction post of the series to know all the topics of this series and the focus I'm having. The purpose of this post is to understand the importance of front end performance and things that you can do to keep it fast.

Let's start with a list of things that matter when developing web applications, then I will give you some tools that will help you in having things in order:

  • CDN For static elements. Using a Content Delivery Network for static content like images, javascript, files, etc, helps in maintaining a low bandwidth usage and it's a must when you've a web site with a lot of traffic because this content is usually the bigger part of your web page, and if you have a lot of visits, you'll probably have trouble in serving all the requests from your hosting server. You can analyse this by downloading your web page and see how much space does this type of content represents in comparison with dynamic content.
  • Image optimization. If you have a web site that uses a lot of images, let's say that they represent 80% of the weight of your site, and if we take into consideration that not optimized images can weight more than 3x the size of their optimized version, if you have a web site using unoptimized images can result in a web site 240% heavier (80% x 3 = 240%). What this will mean is that your web site is going to be slow, it will take at least... yeah, you got that right, 240% more time in loading than what it should be.
  • Data cache. Most web servers nowadays have a cache system for pages. This works by setting up pages and their expire time. This can help in slowing the resources needed to load your web site, this also helps with the page speed.
  • Optimizing CSS, Javascript, HTML. This is a big topic, I will dedicate an entry for it, but what I can say now, is that it really matters when you want to have a fast web site and it's also easier for the search engines to index your web page.
  • Friendly URLs. This means to have urls that when you read them, you can tell the story in that page. for example, it's much easier to read: www.maps.com/Mexico, than to read: www.maps.com/default.html?Country=Mexico.  And guess what? for search engines it's easier to index, because the first thing they use to categorize the page is the url. This can also help when using google analytics, I will dedicate one post to this, but in summary, with friendly urls you're able to have a better understanding of what pages are being visited, and this can give insight on what you should be working and improving.
  • SEO. Another big topic, I will create a separate entry for it. It's important because if you have good meta tags, meta keywords, friendly urls, and the HTML as it should be, then your web site is going to be "friendly" for the search engines and more people will reach it when searching for related topics. There are many, many things related to SEO, for example: is your web site for a particular Country? Are you hiding it for some others? are you using the right domain (.us, .com. org) ?
  • User friendly interface. A web site must be easy to use, you should be able to understand the content easily and the navigation needs to be friendly, this will help people and will make them return to your web site.
  • Optimized for mobile. If you've a web site targeting mobiles, you'll need to have an optimized version for it. Usually with lightweight content, and the interface with some adaptations to make it easy to navigate.

Now, let's talk about some tools that can help us to keep things in order:

And what could happen if you don't care about this concerns? Our example is going to answer that question:

Example: unoptimized web site and hosting prices

  • Let's suppose that we've a web site in which most web pages weight 6mb. 
  • The web doesn't require a lot of processor speed, because most content is static.
  • Let's imagine that we've been investing a lot in marketing and that our page is reaching 100,000 visits per day.
  • How much bandwidth do we need per month? We will need: 30 * 6 * 100,000 = 18,000,000 mb each month.

Now, I will calculate the cost of not having an optimized web site. For keeping things simple, I will use approximate values. The prices are based on a true hosting vendor: each month your hosting plan includes 5 TB of bandwidth, we're using 17.5 TB, that means that we're exceeding our consumption by: 12.5TB. The price for each extra TB is: $42 US, this means that you'll be paying: 12.5 * 42 = 525 extra dollars each month. That's a lot! That could be used for campaigns, or for other stuff. And you'll probably have more visitors if you have an optimized web site, and something I must also say is that optimizing bandwidth usage is not complicated, so there's no real reason for paying that extra dollars.

Ok guys! that's it for now,  hope you're enjoying the series. Let me know if you want me to talk about a topic in the upcoming entries :)






Sunday, 14 September 2014

Back end Performance - An overview of major software aspects


I decided to start with back end performance, because I believe it's the most technical side of software development, and it's a topic that every software developer must know about. I will start with some definitions, that I'm going to use in the post to make it easy to understand, keep in mind that we're in the context of computer sciences and systems, you will need to have some background in algorithms, and data structures:
  • System Performance. In a few words, how effective your system is in the desired scenario. There are two scenarios, one is how much time does your system requires to execute a task, the other one is how much memory are we using for executing a process.
  • Computer speed. How many operations a computer can execute in a unit of time. Usually this depends on the task, and the type of operation. For the examples, we will suppose that a computer can execute N number of operations in a minute. 
  • Data structure. Is a particular way of organizing data (information).  
  • Algorithm. It's a finite, optimal, complete, accurate, precise, step by step definition for solving a problem. Some people doesn't include finite or efficient as part of the definition, but I want to include them because if it's not, then it's not useful, an algorithm is expected to be fast and intelligent.
  • Complexity. How efficient an algorithm is in a field. In the case of speed, it's measured in the number of atomic operations required for the algorithm to return the data we will call this speed complexity. The memory is measured in the amount of memory used for the algorithm to return the data we will use memory complexity when referring to this field. Both complexities are set against the size of the entry. For example, if the parameter for the algorithm is an array of size N,  then, the speed complexity is how many operations do we have to do against that array  to obtain the desired result (N, log(N), etc). For the memory is the same history, how much memory do we need to execute the algorithm apart from the array passed as parameter. Because memory is growing faster than processor speed, we prefer to use more memory and less processor when we can.
  • NP (complexity class). It's a class of problems that cannot be solved in polynomial time.
  • Heuristic: It's a step by step definition for solving a problem, the difference with algorithms is that it doesn't have one or more of the characteristics of the algorithms: finite, optimal, complete, accurate or precision. It's an approximate solution that speeds the process. For example, organizing a list of tasks in a way that they will be solved as fast as possible, these problem falls in the NP complexity class, and is faster to use an heuristic to solve it.
This aspect is very important, because even with all the improvements to the memory and processor speed, having an effective algorithm for solving a problem is the only way to keep things fast. Have you ever notice how much does the processor speed increases every year? Whatever the answer is, the truth is that you'll see that if the old speed was X, the new speed is expressed as NX, i.e. the speed was increased by a linear factor. What will happen if we use algorithms that have a speed complexity beyond that linear factor? We'll answer that in this example:

Example: Comparing binary search against linear search

Execution information:
  • We will suppose that we've two computer:
    • Computer A. Speed: 100 operations per second. It will use linear search.
    • Computer B. Speed: 1000 operations per second. It will use binary search.
  • We will execute 100 search operations.
  • The data structure is going to be an array containing 20,000 elements sorted alphabetically. 
  • We will suppose that for each binary search we will need 9 operations and for linear search we will need 10,000 operations. I'm suggesting this, in order to have a way to compare the execution times of the algorithms. Worst case for binary search with that size is  15  and for linear search is 20,000.

Execution time in seconds for each computer:
  • Computer A: We will search for 1000 elements, and for each one, we're supposing that the binary search algorithm will require 9 operations, so the total number of operations is (1000 * 9 = 9000. We will require 9000 operations to complete or test, and this computer can execute a total number of 100 operations per second, so it will take 9000 / 100 = 90 seconds to complete the task. 
  • Computer B: Using what we already explained for computer A, the execution time in seconds is: (1000 * 10000) / 1000 = 10000.
Are you surprised? Computer B can execute 10 times more operations per second in comparison with Computer A. But as you can see, if we use a slow algorithm, the execution times are really high for Computer B! this is the reason to optimize algorithms and keep things fast. 

Can you think about another reasons to keep things fast? check this list:
  • Hosting prices. If you have a web system that is using bad algorithms, then it's very likely that you'll need to have more a better processor and more memory to cover the demand of your web system. This is traduced in more money each pay period!
  • Compatible devices. If your app needs more processing speed, then your app is not going to be compatible with all devices, this means that your market is going to be reduced and some people will use other app that can be executed by low-end devices. And also, remember that memory in small devices is a constraint. If your app needs a lot of memory, only top end devices are likely to run your app.
  • Better graphics. The faster your algorithm is, the more beautiful the graphics are going to be, because you'll use more processor and memory for displaying them.
  • Battery life in mobile devices. Slow algorithms use more processor, and the processor is one of the thing that uses more battery! so try to keep things fast when developing a mobile app!

Something to keep in mind is that this is just the tip of the iceberg. In order to have great performance, the context of your application is also very important, for example:
  • If your have a process that takes much time to return a set of data, but you know that it only changes every day, you can have a cache of data and query it when a search is taking place. 
  • If it's more important to bring data faster than accurately, you can use a flag to set the required quality of the data returned or you can retrieve some data while you process the best result and then return it. 
  • If your algorithm can be a multi-theaded algorithm, then do it, most devices nowadays have more than one core processor.
  • Do you need the user to wait until the process is finished? for example, let's say that your app is sending a request that needs to be verified in some other systems, that could take up to 5 minutes to complete. In this cases, is better to send the required data, and let the process work, and tell the user something like: "your request is in process" and close that dialog and let the user work with the app. When the process is finished, then you've to send a message with the results.
  • Always keep an eye on the end user's opinion, requirements, and needs. It's worth nothing a system that does some features faster than another if the user is using more the slow features.
Ok, that's it! those are the reasons to always keep an eye on the performance of your system. This is the first entry of the series, I hope you enjoy it. If you want me to write about some particular subject or topic, please let me know! I'll be happy to do that.

Btw, this is the index blog post, here you can see all the posts of the series and some background on what to expect:

http://codeauthorityandmanagement.blogspot.mx/2014/09/index-overview-of-major-software-aspects.html








Introduction - An overview of major software aspects

It's time to start a series of posts related to major software aspects. Every topic is too big for itself to be covered completely with just one post, so the purpose of these series is:
  • Have an overview of every aspect in a language that everyone with some knowledge about software development can understand and find it useful. 
  • Understand why software development is so important nowadays and also why it's so complex

These is the index of the topics that I will cover:

Keep in mind that the affirmations in the post are valid for web applications and mobile apps. This is because most systems nowadays fall in one of this categories.

I you want me to talk about a particular subject, just let me know in the comments. Enjoy the series!