{"id":78,"date":"2015-09-11T11:05:48","date_gmt":"2015-09-11T09:05:48","guid":{"rendered":"http:\/\/www.3dgis.it\/?page_id=78"},"modified":"2015-10-15T17:15:20","modified_gmt":"2015-10-15T15:15:20","slug":"metodologia-di-lavoro","status":"publish","type":"page","link":"https:\/\/www.3dgis.it\/en\/metodologia-di-lavoro\/","title":{"rendered":"Development process"},"content":{"rendered":"<h1>Developing software<\/h1>\n<p>When developing a new software solution, no matter how complex it could be, a specific\u00a0sequence of steps should be taken in order to locate every critical aspect and to manage every glitch that will be showing during the project development.<\/p>\n<p>This path is called <strong>software development process<\/strong> and its aim is\u00a0to minimise the number of bugs and glitches in the final product. There are many kind of processes and the easiest method is to\u00a0move to the next activity only when the current one is done.<\/p>\n<p>This method is known as waterfall and it is composed by five steps:<\/p>\n<ol>\n<li>\n<p align=\"left\"><strong>Analysis and specification\u00a0drafting<\/strong><\/p>\n<\/li>\n<li>\n<p align=\"left\"><strong>Design<\/strong><\/p>\n<\/li>\n<li>\n<p align=\"left\"><b>Development<\/b><\/p>\n<\/li>\n<li>\n<p align=\"left\"><strong>Testing and\u00a0startup<\/strong><\/p>\n<\/li>\n<li>\n<p align=\"left\"><strong>Maintenance<\/strong><\/p>\n<\/li>\n<\/ol>\n<h1>Common pitfalls to avoid<\/h1>\n<p>The waterfall approach is very simple and it misses to address the most common pitfalls.<\/p>\n<h2>Analysis or specification errors<\/h2>\n<p>Analysis is the outcome of multiple\u00a0meetings between the customer and the analyst,\u00a0aimed to collect all the specific needs which the software should\u00a0address.<\/p>\n<p>Complex systems are, by definition, hard to study. Sometimes the analysis process may not\u00a0read every aspect of a system in the right way, so you have to take these changes in account with a further\u00a0step.<\/p>\n<p>These misunderstandings may require a certain amount of rework, increasing the workload and with the consequence of\u00a0missing shipment deadlines.<\/p>\n<h2>Missing design<\/h2>\n<p>Considering small and simple software tools, a typical error of unexperienced software developers is to skip the software design process.<\/p>\n<p>Sometimes, even smallest systems have hidden pitfalls which may be located only during the design phase. For instance you may need a not unforeseen input data, which is derived from many other components. Or more simply, the data amount\u00a0is bigger than the available memory so you need to switch paradigm and increase the system complexity, maybe introducing dynamic programming and parallel computing.<\/p>\n<p>No design implies more work to do and it makes expenses\u00a0grow faster.<\/p>\n<h2>Missing tests<\/h2>\n<p>When a software reaches the feature complete state, you may want it in production as soon as possible, especially if it is an important component of the system or it brings extraordinary improvements to the current version.<\/p>\n<p>When developing new software you should not be in a hurry. At the end of the development lifecycle, an extensive test session should be carried out, with actual\u00a0data and an\u00a0amount comparable to the one in production.<\/p>\n<p>Not doing tests means that you will find out bugs directly in production and a disaster may occur. Unfortunately, there is no software without any bug.<\/p>\n<h2>Requirements change<\/h2>\n<p>Sometimes you may discover you are missing a specific feature or that the actual one is not ok for your needs. Change is naturale and it&#8217;s awesome but bringing responsiveness to change into software may be hard, especially in a late stage of development.<\/p>\n<p>Requirements change has a great impact if the development process is managed using a waterfall approach, increasing costs and delaying releases. Agile techniques may be a solution for this as we will see.<\/p>\n<h1>3DGIS&#8217; software development process<\/h1>\n<p>The dilemma is: how to avoid pitfalls during software development? 3DGIS follows an interactive approach which is based on <strong>agile development techniques<\/strong>, which engages the customer in the process.<\/p>\n<p>Carrying out our projects we follow the &#8220;<strong>deliver early \/deliver often<\/strong>&#8221; concept, which explodes the projects in short phases with the purpose of minimising the pitfalls\u00a0we have seen before.<\/p>\n<p>A project is <strong>divided in sprints<\/strong> where features are collected and organised per period of time and by the value which is given by the customer. Every sprint is linked to a release and to a test session: in this way the customer is able to\u00a0follow the development process, to verify the specification compliance and to identify any potential issue with the project.<\/p>\n<p>This development method is carried out <strong>side by side with the customer<\/strong>, involving him into the decisional process and letting him verify every deliverable.<\/p>\n<p><em>The more active the customer, the better the software will be.<\/em><\/p>\n<h1>Source code version management<\/h1>\n<p>A software product is the result of source code compilation and assembly with the other application assets. Every software\u00a0has a lifecycle made up\u00a0of different versions, released for many\u00a0customers\u00a0in various dates which needs to be maintained along time in a errorless way.<\/p>\n<p>3DGIS adopts a <strong>control version system<\/strong>, aiming to:<\/p>\n<ul>\n<li>track project evolution and to let you go back in time<\/li>\n<li>allow collaboration between developers<\/li>\n<li>organise and simplify the project development, thanks to feature branching.<\/li>\n<\/ul>\n<p>We adopted GIT as versioning tool, which let us to have a decentralised management of source code and to share it with our customers.<\/p>\n<h1>Project and activity management<\/h1>\n<p>A project is made up of many different tasks, which are regulated by resources\u00a0availability, dependencies and deadlines.<\/p>\n<p>Keeping every aspect of a project under control, its phases and activities, is really challenging and you may want to rely on software tools designed to accomplish project\u00a0management.<\/p>\n<p>3DGIS has set up an arrangement of different tools which allows us to manage many project at the same time while respecting procedures and regulations required by our quality management system.<\/p>\n<p>In every moment we can know the <strong>exact progress of a specific project<\/strong>, what needs to be done before the next release and which issues need to be solved.<\/p>\n<h1>Continuous Integration<\/h1>\n<p>We use\u00a0<strong>continuous integration<\/strong> during development.<\/p>\n<p>Source code is managed by the versioning system, which is integrated with a software tool (the CI server) which runs <strong>integration and unit tests<\/strong> in order to verify correctness, both syntactical and functional.<\/p>\n<p>The source code is <strong>validated using many metrics<\/strong>, improving its overall quality and making bugs easier to find.<\/p>\n<p>Continuous integration also allows us to <strong>automate releases and deployment<\/strong>, improving efficiency and reducing time to market.<\/p>\n<h1>Trouble ticketing<\/h1>\n<p><strong>Complaints and advisories are fully tracked<\/strong>: they generate a trouble ticket , get a unique ID number and an assigned priority, depending on error classification and other parameters.<\/p>\n<p>Every day these tickets are assigned to a responsible which has to fix them as soon as possible, while promptly communicating updates to the customer.\u00a0<\/p>\n<p>Our customers may access to the <strong>customer portal<\/strong>, which has been designed to collect all customer data and actions. It contains current and past trouble tickets and incidents and customer documents and it allows the customer to communicate with us.<\/p>","protected":false},"excerpt":{"rendered":"<p>Delivering high quality software is not an easy thing. This is how we do it.<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-78","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.3dgis.it\/en\/wp-json\/wp\/v2\/pages\/78","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.3dgis.it\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.3dgis.it\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.3dgis.it\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.3dgis.it\/en\/wp-json\/wp\/v2\/comments?post=78"}],"version-history":[{"count":21,"href":"https:\/\/www.3dgis.it\/en\/wp-json\/wp\/v2\/pages\/78\/revisions"}],"predecessor-version":[{"id":953,"href":"https:\/\/www.3dgis.it\/en\/wp-json\/wp\/v2\/pages\/78\/revisions\/953"}],"wp:attachment":[{"href":"https:\/\/www.3dgis.it\/en\/wp-json\/wp\/v2\/media?parent=78"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}