-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
executable file
·1250 lines (944 loc) · 138 KB
/
Copy pathindex.html
File metadata and controls
executable file
·1250 lines (944 loc) · 138 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>The technology trends in web development and their effects on businesses</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body class="c8 c42">
<section id="cover">
<p class="c13"><span class="c18">Corvinus University of Budapest</span></p>
<p class="c13"><span class="c18">Faculty of Business Administration</span></p>
<p class="c28"><span class="c18">Department of Computer Science</span></p>
<p class="c6"><span class="c18"></span></p>
<p class="c4 title" id="h.gjdgxs"><span class="c18 c32"></span></p>
<p class="c4 title" id="h.30j0zll"><span class="c32 c18"></span></p>
<p class="c6"><span class="c18"></span></p>
<p class="c6"><span class="c18"></span></p>
<p class="c4 title" id="h.1fob9te"><span class="c32 c18"></span></p>
<p class="c25 title" id="h.3znysh7"><span class="c18">The technology trends in web development and their effects on businesses</span>
</p>
<p class="c6"><span class="c18"></span></p>
<p class="c6"><span class="c18"></span></p>
<p class="c6"><span class="c18"></span></p>
<p class="c6"><span class="c18"></span></p>
<p class="c6"><span class="c18"></span></p>
<p class="c6"><span class="c18"></span></p>
<p class="c6"><span class="c18"></span></p>
<p class="c6"><span class="c18"></span></p>
<p class="c13 c31"><span class="c18">Author: Dávid Naményi</span></p>
<p class="c13 c31"><span class="c18">BSc in Business Informatics</span></p>
<p class="c28 c31"><span class="c18">2016</span></p>
<p class="c28 c37" id="h.2et92p0"><span class="c18">Advisor: Blanka Láng, PhD</span></p>
<p class="c6 c16"><span class="c43"></span></p>
</section>
<hr class="section-break">
<p class="c28 c39"><span class="c29 c21 c36">Table of contents</span></p>
<ol class="c3 lst-kix_list_13-0 start" start="1">
<li class="c17"><span class="c0">Preface</span></li>
<li class="c17"><span class="c0">The evolution of the web</span>
</li>
<li class="c17"><span class="c0">The technology trends</span></li>
</ol>
<ol class="c3 lst-kix_list_13-1 start" start="1">
<li class="c2"><span class="c0">Cloud computing</span></li>
<li class="c2"><span class="c0">Programming languages and technologies</span>
</li>
</ol>
<ol class="c3 lst-kix_list_13-2 start" start="1">
<li class="c22 c24"><span class="c0">Front-end</span></li>
<li class="c22 c24"><span class="c0">Back-end</span></li>
<li class="c22 c24"><span class="c0">Databases</span></li>
</ol>
<ol class="c3 lst-kix_list_13-1" start="3">
<li class="c2"><span class="c0">Build your own or use an existing solution?</span>
</li>
</ol>
<ol class="c3 lst-kix_list_13-2 start" start="1">
<li class="c22 c24"><span class="c0">Frameworks</span></li>
<li class="c22 c24"><span
class="c0">Content management systems</span></li>
</ol>
<ol class="c3 lst-kix_list_13-1" start="4">
<li class="c2"><span class="c0">Version control</span></li>
<li class="c2"><span class="c0">Server environment</span></li>
</ol>
<ol class="c3 lst-kix_list_13-2 start" start="1">
<li class="c22 c24"><span class="c0">Containers</span></li>
<li class="c22 c24"><span class="c0">Operating systems and web servers</span>
</li>
</ol>
<ol class="c3 lst-kix_list_13-1" start="6">
<li class="c2"><span class="c0">Microservices</span></li>
<li class="c2"><span class="c0">The API world</span></li>
<li class="c2"><span class="c0">Software testing</span></li>
<li class="c2"><span class="c0">Continuous Integration and Deployment</span>
</li>
</ol>
<ol class="c3 lst-kix_list_13-2 start" start="1">
<li class="c22 c24"><span class="c0">Continuous Integration</span>
</li>
<li class="c22 c24"><span class="c0">Continuous Deployment</span>
</li>
</ol>
<ol class="c3 lst-kix_list_13-1" start="10">
<li class="c2"><span class="c0">DevOps culture</span></li>
</ol>
<ol class="c3 lst-kix_list_13-0" start="4">
<li class="c17"><span class="c0">The business perspective</span>
</li>
</ol>
<ol class="c3 lst-kix_list_13-1 start" start="1">
<li class="c2"><span class="c0">Scalability</span></li>
<li class="c2"><span class="c0">Costs</span></li>
<li class="c2"><span class="c0">Quality</span></li>
<li class="c2"><span class="c0">Internal processes</span></li>
</ol>
<ol class="c3 lst-kix_list_13-2 start" start="1">
<li class="c22 c24"><span class="c0">Metrics</span></li>
<li class="c22 c24"><span
class="c0">Flexibility and velocity</span></li>
<li class="c22 c24"><span class="c0">People as Single Points of Failure</span>
</li>
<li class="c22 c24"><span class="c0">Employer branding</span></li>
</ol>
<ol class="c3 lst-kix_list_13-0" start="5">
<li class="c17"><span class="c0">Summary</span></li>
<li class="c17"><span class="c0">List of figures</span></li>
<li class="c17"><span class="c0">References</span></li>
</ol>
<hr style="page-break-before:always;display:none;">
<p class="c6" id="h.3dy6vkm"><span class="c21 c18 c29"></span></p>
<hr class="section-break">
<ol class="c3 lst-kix_list_5-0 start" start="1">
<li class="c23"><span class="c10">Preface</span></li>
</ol>
<p class="c7"><span class="c0">In this paper my goal is to </span><span class="c0 c8">demonstrate</span><span
class="c0"> the evolution and the current situation and challenges of web development, showcase a modern day web developer’s set of tools and </span><span
class="c0 c8">scrutinize</span><span class="c0"> the technology shifts’
effects on businesses. </span></p>
<p class="c7"><span class="c0">Thanks to the rapid growth in its economic significance, the web has grown into a massive industry with plenty of areas and different aspects that you need to take into consideration when talking about web projects. For instance there is product development, project management, information architecture, user experience design, user interface design, system operation and software development too, not to mention the human factors and the general business areas that also apply (e.g. finance, accounting, marketing, sales, branding, </span><span
class="c0 c8">HR</span><span class="c0">, etc.). </span></p>
<p class="c7"><span class="c0">This paper is far from being exhaustive and focuses mainly on the technical side, i.e. development and operations. These are still very broad terms and cover </span><span
class="c0 c8">numerous</span><span class="c0"> different areas, each of which would deserve a book on its own due to the complexity and depth of the questions and challenges. This is why I decided to give only a bird's eye view of a few subjectively selected areas within the field of web development. </span>
</p>
<p class="c7"><span class="c0">I aim to </span><span class="c0 c8">demonstrate</span><span class="c0"> briefly what the most important technologies, tools and practices are nowadays and how the recent advancements are changing the landscape from the business perspective. Hopefully I will also be able to shed some light on the direction in which the industry is moving.</span>
</p>
<p class="c7"><span class="c0">Some of the things I write about can be discussed in general and apply to all fields of software development, but web development is somewhat different and unique in a number of aspects. I myself have only gained experience in the field of web development, so everything I write about refers to the web development environment. </span>
</p>
<p class="c7"><span class="c0">Although I </span><span class="c0 c8">discuss</span><span class="c0"> the trends and technologies mostly in general, I write about some personal experiences and opinions too which I have gained through the web development projects I have been involved in at JóSzaki (the biggest Hungarian handyman finder service), at Divide By Zero Australia (a technology and branding agency in Sydney) and at the Digital Team of The CyberInstitute (Brisbane, Australia).</span>
<hr style="page-break-before:always;display:none;">
</p>
<ol class="c3 lst-kix_list_5-0" start="2">
<li class="c23" id="h.1t3h5sf"><span class="c10">The evolution of the web</span></li>
</ol>
<p class="c7"><span class="c0">I am not going to go into the specific details of the web’s history, but I am going to mention a few important concepts and will show how closely tied its advancement is to the advancement of the internet itself.</span>
</p>
<p class="c7"><span class="c0">So first, let’s clarify what the difference is between the internet and the web. We often use these terms interchangeably, but actually they mean different things. To make it simple, the internet is the actual computer network that connects billions of digital devices together globally, allowing them to transfer information with each other via certain protocols. The web is just one of the many ways of accessing information on the internet. It uses the HTTP protocol to allow communication and transmission of data between applications. Using browsers is the most common way of accessing web documents (web pages) over the internet. In this paper I’m focusing on the software development environment in which the web pages (websites) are built and operated. When discussing the web’s evolution, however, I need to talk about the web and the internet at the same time because they cannot be easily separated from each other in this context.</span>
</p>
<p class="c7"><span class="c0">It is very interesting to know and see that the internet started as a limited network of interconnected computers used primarily for military and scientific purposes and then evolved into something way larger, the open World Wide Web, and through countless changes and shifts finally became an essential part of our everyday lives. I must also note that the word ‘finally’
might be misleading in this context, because the rapid advancement of internet technology is far from reaching its peak. It appears to be conquering new territories and revealing new ways to utilize the technology.</span>
</p>
<p class="c7"><span class="c0">Kim Morrow in her 2014 UX Booth article writes that “the internet has become an integrated, seamless, and often invisible part of our everyday lives. (...) The only thing that seems certain is that the Internet is changing rapidly”. I think she makes a really good point here, because it articulates not only the ever-changing nature of the internet, but also the extent to which we have embraced it and have built our lives upon it.</span>
</p>
<p class="c7"><span class="c0">A good way of demonstrating how the level of embracement is changing is to take a look at the different generations’
lives. Based on Harry Wallop’s article published in 2014 in The Telegraph, Generation X people were born between the early 1960s and the early 1980s, Generation Y people were born between the early 1980s and the mid-1990s and the members of Generation Z are those who were born like after 1996 or so. Now, how a friend of mine explained it, Generation X know exactly when they are using the internet and what for, Generation Y cannot distinguish between using the internet and not using the internet, because it is such an integrated and invisible part of their lives, and Generation Z does not even understand the question.</span>
</p>
<p class="c7"><span class="c0">This process was and is being further enhanced by the fast spread of smartphones and the rise of Internet of Things (IoT) devices, alongside with the emergence of big data technologies and artificial intelligence solutions.</span>
</p>
<p class="c7"><span class="c0">The web itself started off as simple, static HTML pages referencing each other (Web 1.0) and then evolved into the Web 2.0 era which brought dynamic, complex websites, extended social networks and lots of user generated content, all fostering collaboration, communication and sharing. The definition of the third generation (Web 3.0) is way less clear, some even argue whether it has already started or we are still in the time of Web 2.0. </span>
</p>
<p class="c7"><span class="c0">Based on Nova Spivack’s research at the Lifeboat Foundation, the technologies and concepts that build up the foundation of Web 3.0 are “semantic web, microformats, natural language search, data-mining, machine learning, recommendation agents, and artificial intelligence technologies —
which emphasize machine-facilitated understanding of information in order to provide a more productive and intuitive user experience.”
This generation is often referred to as ‘the Semantic Web’ and ‘the intelligent Web’. Spivack also uses a diagram to illustrate the direction of advancement in terms of ‘Semantics of Social Connections’
and ‘Semantics of Information Connections’:</span></p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 368.00px;"><img
alt="social-connections.png" src="images/image03.png"
style="width: 624.00px; height: 368.00px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span class="c9">Figure 1. ‘Semantics of Social Connections’ and ‘Semantics of Information Connections’. Source: Spivack (2016)</span>
</p>
<p class="c7"><span class="c0">In 2008 Mills Davis conducted a profound, 720-page study on the evolution of the web, and in his short executive summary there is a great diagram that aims to capture the essence of the web generations. The horizontal axis shows the extent of social connectivity and the vertical axis shows the extent of knowledge connectivity and reasoning. The Web (1.0) connected information, The Social Web (2.0) connects people, The Semantic Web (3.0) connects knowledge and The Ubiquitous Web (4.0) is going to connect intelligence.</span>
</p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 613.97px; height: 403.21px;"><img
alt="what-is-the-evolution-of-the-internet-to-2020.jpg" src="images/image05.jpg"
style="width: 635.35px; height: 403.21px; margin-left: -21.38px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span class="c9">Figure 2. What is the Evolution of the Internet to 2020? Source: Davis (2008)</span>
</p>
<p class="c7"><span class="c0">According to the statistics of www.internetlivestats.com, as of 17 April 2016 there are approximately 3 350 500 000 internet users in the world which means that around 40% of the world population has an internet connection today and the total number of websites in the world is around 1 015 600 000. In Hungary the internet penetration is estimated to be around 80.2% (in 2000 it was only 7%), while one of the most popular Hungarian news & media website (index.hu) has about 40.6 million visits a month (</span><span
class="c5 c1 c33"><a class="c11"
href="https://www.google.com/url?q=http://www.similarweb.com&sa=D&ust=1464111705679000&usg=AFQjCNFQkUmMQ74ea-xKoX2nQYNvtBB7og">www.similarweb.com</a></span><span
class="c0"> estimate, March 2016).</span></p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 429.33px;"><img
alt="Screenshot from 2016-04-17 13:24:00.png" src="images/image04.png"
style="width: 624.00px; height: 429.33px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span
class="c9">Figure 3. Total Number of Websites. Source: NetCraft and Internet Live Stats (2016)</span></p>
<p class="c7"><span class="c0">"Website" means unique hostname (a name which can be resolved, using a name server, into an IP Address). It must be noted that around 75% of websites today are not active, but parked domains or similar. Periodic drops in the total count can depend on various factors, including an improvement in NetCraft's handling of wildcard hostnames.</span>
</p>
<p class="c7"><span class="c0">Personally I think that responsive web design techniques (which make many companies choose a mobile-friendly web UI over a native smartphone application) and cloud computing (which moved lots of the traditionally desktop-based applications to the web) are certainly among the many drivers of the leap in the number of websites.</span>
</p>
<p class="c7"><span class="c0">This overview of the trends sort of explains why web development has become so vital in today’s economy. Through this huge transformation the whole web industry has boomed - both the demand and supply sides are getting stronger and stronger. On the one hand, almost all existing companies need either a simple online presence or advanced web based systems and there are countless new start-ups and businesses that are formed specifically to exploit the opportunities that the web provides. On the other hand, many companies deliver web development service, so in order to stay ahead of the competitors, they need to adjust their skillset, technology and efficiency to the increased needs (both in terms of speed of delivery and quality of implementation).</span>
</p>
<p class="c7"><span class="c0">Due to the increasing expectations regarding the speed of delivery and the quality of implementation, developers also face new challenges. Complex problems usually call for complex solutions, and developers need new approaches, skills and tools to maintain speed and quality. </span>
</p>
<p class="c7"><span class="c0">In the following chapter I am going to showcase a slice of the recent trends, technologies and best-practices that are shaping the modern web development environment and then later on I will also write about how they affect the business.</span>
</p>
<hr style="page-break-before:always;display:none;">
<p class="c6"><span class="c18"></span></p>
<ol class="c3 lst-kix_list_5-0" start="3">
<li class="c23" id="h.4d34og8"><span class="c10">The technology trends</span></li>
</ol>
<p class="c7"><span class="c0">In this chapter I am going to elaborate on a number of important aspects that are necessary to consider when someone wants to run successful and high quality web development projects. I aim to give an overview on a broad spectrum of tools and techniques which all contribute to an effective and efficient environment. I will focus on the concepts and advantages of each of these, rather than on the exact details of the implementation.</span>
</p>
<ol class="c3 lst-kix_list_6-1 start" start="1">
<li class="c15" id="h.2s8eyo1"><span class="c26 c21 c18">Cloud computing</span></li>
</ol>
<p class="c7"><span class="c0">Since the move to cloud computing is such an apparent phenomenon in the IT world and I am going to mention cloud solutions many times in this paper, I find it important to clarify and define the cloud right at the beginning.</span>
</p>
<p class="c7"><span class="c0">“In the simplest terms, cloud computing means storing and accessing data and programs over the Internet instead of your computer's hard drive.”
(Griffith, 2015) To be a bit more specific and in-detail, here is the definition of cloud computing that we can find in the book called Cloud Computing Bible (Sosinsky, 2011): “Cloud computing refers to applications and services that run on a distributed network using virtualized resources and accessed by common Internet protocols and networking standards. It is distinguished by the notion that resources are virtual and limitless and that details of the physical systems on which software runs are abstracted from the user. (...) Cloud computing makes the long-held dream of utility computing possible with a pay-as-you-go, infinitely scalable, universally available system. With cloud computing, you can start very small and become big very fast. That's why cloud computing is revolutionary, even if the technology it is built on is evolutionary.”</span>
</p>
<p class="c7"><span class="c0">Cloud has become mainstream in the field of web development too - almost every major website and web service utilizes the cloud in one way or another. Taking a look at the analysis of the RightScale report published by Ben Kepes (2015), we can see that Amazon Web Services (AWS) continues to dominate in public cloud by 57% adoption, followed by Microsoft Azure, Rackspace and Google.</span>
</p>
<p class="c7"><span class="c0">Throughout the paper I am going to demonstrate several cloud services and their benefits from both the IT and the business perspective.</span>
</p>
<ol class="c3 lst-kix_list_6-1" start="2">
<li class="c15" id="h.17dp8vu"><span class="c26 c21 c18">Programming languages and technologies</span></li>
</ol>
<p class="c7"><span class="c0">A good number of different languages and technologies are used for web development nowadays. I am not going to detail them or compare them, especially because such comparisons and disputes usually result in senseless flame wars without actually finding a winner, because obviously they all have advantages and disadvantages, similarities and differences which make it impossible to simply benchmark them. The goal of this section is just to give an overview of the most commonly used ones.</span>
</p>
<p class="c14" id="h.3rdcrjn"><span class="c20 c18">3.2.1. Front-end</span></p>
<p class="c7"><span class="c0">In front-end development (also called the client side - which is responsible for the presentation layer, the user interfaces) the situation is quite simple in terms of programming languages. Since XHTML and Flash are mostly out of business, there are only 3 major languages used, each in its own domain: HTML is used as the markup language to describe the content and structure of the website, CSS is used as the presentation language to describe the look of the website through style sheets, and Javascript is used as the programming language to make the interfaces interactive and provide ways for asynchronous communication with the server. Even though the map of front-end development languages seems to be clear and simple at first glance, the ever-growing number of libraries, extensions, tools and frameworks have made it quite messy and complex. </span>
</p>
<p class="c7"><span class="c0">In the CSS world, the situation is still relatively easy to understand: on the one hand, there are numerous CSS frameworks and standards to make naming and usage conventions standardized and thus the CSS code sustainable, reliable and scalable. On the other hand, the interpreted scripting languages that can be compiled to pure CSS, like SASS and LESS are becoming widespread. These extend CSS by providing mechanisms available in more traditional programming languages, like variables, functions (called mixins), logical nesting, loops and inheritance.</span>
</p>
<p class="c7"><span class="c0">In the field of Javascript development, there are a lot of libraries and frameworks that are widely used. Each has its advantage and use case. They offer things like easier handling of the DOM, dynamic views, quicker implementation of user interfaces, advanced animations, enhanced event handling, versatility, extensibility and the list goes on. There are also some which provide their own syntax and can be compiled into Javascript. To mention a few, the most popular ones include jQuery, AngularJS, React, Babel, Coffeescript, TypeScript, ExtJS, Impress.js, Backbone.js and D3.</span>
</p>
<p class="c7"><span class="c0">When a huge set of Javascript tools and libraries are used for a project, managing these external libraries and dependencies becomes a major headache for developers. RequireJS and Browserify have gained ground because they can effectively make it less of a hassle by their file and module loader solutions.</span>
</p>
<p class="c7"><span class="c0">Frameworks that give both CSS and Javascript solutions and components are also mainstream. Bootstrap and Foundation are the two dominant players in the market. They are constantly developed to enable developers use out-of-the-box, easy-to-use solutions to the real world challenges.</span>
</p>
<p class="c7"><span class="c0">Regarding HTML, templates engines are often taken advantage of in order to reduce code duplication and have a more maintainable HTML code base. The most popular template engines operate on the server side (e.g. Smarty, Twig, Blade) but there are also some client side templating systems, like Mustache.js and Handlebars.js.</span>
</p>
<p class="c7"><span class="c0">As the last discussed piece of the front-end development technologies, it’s worth mentioning Grunt and Gulp, which are task managers that are responsible for a lot of the compilation and compression tasks and play a crucial part in the build processes. They can compile SASS and LESS into CSS along with many extra functionalities (like adding browser prefixes and compressing the resulting CSS files) and are also used to validate, compile, concatenate and compress Javascript files.</span>
</p>
<p class="c14" id="h.26in1rg"><span class="c20 c18">3.2.2. Back-end</span></p>
<p class="c7"><span class="c0">In back-end development (also called the server side - which is responsible for the data manipulation and business logic) the selection of widely used programming languages is a lot larger. PHP, Javascript (mainly NodeJS on the server side), Ruby, Python, Perl, Java, C#, Scala and Go are all examples of popular languages that can be used for web development.</span>
</p>
<p class="c7"><span class="c0">Gathering reliable data on their respective popularity is extremely hard, because most of the surveys are not representative and also quite a few of the languages are used for multiple purposes, which makes measuring the actual usage for web development impossible. Still I would like to show some statistics that demonstrate the situation broadly.</span>
</p>
<p class="c7"><span class="c0">Stack Overflow, the huge question and answer site for programmers has been conducting an extensive developer survey each year since 2013. These surveys reveal a lot about the technology trends. This year (2016) more than 56.000 coders in 173 countries answered their questions, and the collected data shows that JavaScript is by far the most popular programming language, but since its main domain is still the client side, it does not say much about its ranking among the back-end technologies. The following graph shows the results:</span>
</p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 444.00px;"><img
alt="Screenshot from 2016-04-23 19:54:20.png" src="images/image07.png"
style="width: 624.00px; height: 444.00px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span
class="c9">Figure 4. The most popular programming languages. Source: Stack Overflow (2016)</span></p>
<p class="c7"><span class="c0">This data is actually not very precise regarding web development, because as I have already mentioned, the first ranked Javascript mostly covers front-end development, SQL is for databases, Java and C# are extensively used outside the web development area, while C++, C and Objective-C are never or rarely used for web development. Still, it gives a notion of the prevalence of the languages.</span>
</p>
<p class="c7"><span class="c0">Taking a look at previous year’s data, the biggest change regarding the web development languages is that PHP’s 34.8% result in 2013 shrinked to 25.9% by 2016 in favor of emerging languages.</span>
</p>
<p class="c7"><span class="c0">Gerard Millares in an article published in 2015 writes that “more than 75% of the top websites use PHP as their server side programming language”. The source of the data is not clear so we should have reservations about this information, but it’s interesting to see it along with his following statement: “even though PHP is the by a far margin, the most used server side programming language, it is amusing that when it comes to websites that attract high traffic, Java and Javascript are the clear winners. While around 82% of websites with Java as their server side language attract high traffic, the value drops to below 15% for websites having PHP as their server side language”. You can see more information about this on his diagram:</span>
</p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 357.33px;"><img
alt="blog4...jpg" src="images/image06.jpg"
style="width: 624.00px; height: 357.33px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span
class="c9">Figure 5. Programming Language vs High Traffic Websites. Source: Millares (2015)</span></p>
<p class="c7"><span class="c0">In addition to the presented facts that PHP is gradually losing ground and is mainly used for low-traffic sites, in my personal opinion PHP is also a language that is generally perceived as a not “trendy”, not “sexy”
programming language. This notion might have been somewhat improved by the new versions of the language that introduced very important new features and language constructs and also addressed the performance issues and made PHP programs run way faster.</span>
</p>
<p class="c7"><span class="c0">Those topics in my paper that are programming language specific assume that PHP is used for the back-end because that’s what I am most familiar with.</span>
</p>
<p class="c7"><span class="c0">Unlike in the previous front-end development section, I am not going to write about frameworks and tools here, because they are going to be discussed later on, for instance in Section 3.3.1.</span>
</p>
<p class="c14" id="h.lnxbz9"><span class="c18 c20">3.2.3. Databases</span></p>
<p class="c7"><span class="c0">There is a breadth of options when it comes to databases, and most of the key players have been around for long and keep their positions in the market. However, as I see it, there are some major trends happening there that are reshaping the landscape. I am going to reveal some statistics first and then elaborate on these trends.</span>
</p>
<p class="c7"><span class="c0">The Vienna-based SolidIT Consulting & Software Development GmbH has developed an advanced algorithm, called DB-Engines Ranking, that measures the popularity of the database systems based on publicly accessible data by using a combination of metrics. Here is their latest data from April 2016:</span>
</p>
<p class="c22 c41"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 609.50px; height: 447.99px;"><img
alt="Screenshot from 2016-04-23 23:45:16.png" src="images/image09.png"
style="width: 639.21px; height: 447.99px; margin-left: -14.34px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span class="c9">Figure 6. DB-Engines Ranking. Source: SolidIT (2016)</span></p>
<p class="c7"><span class="c0">The traditional relational database managements systems (RDMS) enjoy clear dominance and will most probably remain strong, because they are a perfect choice in many cases and what is more, most developers are used to working with them. The 3 top SQL-based databases currently are Oracle, MySQL and MS-SQL based on the DB-Engines Ranking, but personally I think that specifically for web development purposes MySQL and PostgreSQL are the two winners.</span>
</p>
<p class="c7"><span class="c0">The first major trend we can see though is the rise of alternative database technologies. In the past few years, NoSQL (also called nonrelational) databases became very popular and widely used. But what exactly does the term mean? In the preface of NoSQL Distilled (2012), Sadalage and Fowler explains it this way: “The term ‘NoSQL’
is very ill-defined. It’s generally applied to a number of recent nonrelational databases (...) They embrace schemaless data, run on clusters, and have the ability to trade off traditional consistency for other useful properties. Advocates of NoSQL databases claim that they can build systems that are more performant, scale much better, and are easier to program with.”
MongoDB, Cassandra, Redis, Riak, Neo4j, CouchDB, HBase / Hadoop, Google Cloud Bigtable and Amazon DynamoDB are all examples of NoSQL databases, even though they employ a number of different logical models. A lot of, mainly large-scale, web development projects have decided to utilize the advantages of NoSQL technologies.</span>
</p>
<p class="c7"><span class="c0">Although three years ago there was only one NoSQL database in the top 10 of the aforementioned list, now there are three (all of which is “schema-less”) which shows that they’re gaining momentum. This graph, based on the same DB-Engines Ranking data, captures the trends quite well:</span>
</p>
<p class="c22"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 628.01px; height: 390.22px;"><img
alt="Screenshot from 2016-04-23 23:52:20.png" src="images/image08.png"
style="width: 641.38px; height: 390.22px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span class="c9">Figure 7. DB-Engines Ranking. Source: SolidIT (2016)</span></p>
<p class="c7"><span class="c0">It is worth noting about these statistics that the calculation takes into account metrics like search volume in Google or mentions in forums and social media. This can lead to distorted results, because just that something is searched for or talked about does not mean that it is actually loved and used. For example, people probably talk a lot more about the issues of a particular system than about the happy moments, or maybe the topic is the struggle to migrate to another, better database. Nonetheless, these figures give a glimpse of the database market and are good enough estimations, especially because it is virtually impossible to gain data about the number of active installations or other relevant metrics.</span>
</p>
<p class="c7"><span class="c0">The second major trend is pointed out very clearly by Pramod J. Sadalage in an article published in 2014: “There is also movement away from using databases as integration points in favor of encapsulating databases with applications and integrating using services”. Instead of many applications relying on the same enormous database to share information, the big systems are often broken down into smaller web services with their own smaller databases, and the information sharing happens through the services’
communication. It is very closely tied to microservices (about which I am going to write later in Section 3.6) and also to the so-called Polyglot Persistence concept, which is a very important result of the rise of NoSQL databases.</span>
</p>
<p class="c7"><span class="c0">Polyglot Persistence means that “it is best to use multiple data storage technologies, chosen based upon the way data is being used by individual applications or components of a single application. Different kinds of data are best dealt with different data stores.”
(Serra, 2015) To explain both Polyglot Persistence and the encapsulation of the database with services, I am referencing NoSQL Distilled again, because the authors created a really good set of charts to demonstrate the process of moving from a large relational database that is responsible for all the data (Step 1) to using different database engines for different purposes (Step 2) and then finally wrapping those datastores into services (Step 3):</span>
</p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 301.33px;"><img
alt="Screenshot from 2016-04-25 15:27:12.png" src="images/image11.png"
style="width: 624.00px; height: 301.33px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span class="c9">Figure 8. Step 1: Use of RDBMS for every aspect of storage for the application. Source: Sadalage - Fowler (2012)</span>
</p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 289.33px;"><img
alt="Screenshot from 2016-04-25 15:27:56.png" src="images/image10.png"
style="width: 624.00px; height: 289.33px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span class="c9">Figure 9. Step 2: Example implementation of polyglot persistence. Source: Sadalage - Fowler (2012)</span>
</p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 290.67px;"><img
alt="Screenshot from 2016-04-25 15:28:07.png" src="images/image14.png"
style="width: 624.00px; height: 290.67px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span class="c9">Figure 10. Step 3: Using services instead of talking to databases. Source: Sadalage - Fowler (2012)</span>
</p>
<p class="c7"><span class="c0">The third trend that I would like to mention is that of moving databases to the cloud. There is no big surprise here, it is just a part of the whole cloud trend, but beyond simple database hosting, companies like Amazon and Google provide cheap fully-managed cloud database servers that take a lot of burden off the shoulders of web developers and operation people. To see its benefits it is enough to mention a few of them, e.g. automated backups, automatic failure detection and recovery, software patching, security and access control, scalability, high availability and speed.</span>
</p>
<p class="c7"><span class="c0">Having seen this impressive list of benefits we can say that these services are an ideal choice for both traditional relational and nonrelational databases. This is true and they are widely used for lots of web development projects indeed - I also have experience with these and I am absolutely satisfied with them so far. </span>
</p>
<p class="c7"><span class="c0">However, I must note that relational and nonrelational databases have one very important difference at this point. While a relational database is typically supposed to run on a single machine and thus can only be scaled vertically, most of the NoSQL databases are designed to run on a cluster of machines which makes it easy to scale them horizontally (I am going to provide more information about the types of scaling later in Section 4.1). It means that the cloud database services can provide an even bigger advantage for distributed NoSQL databases by making it possible to automatically spin up or terminate nodes based on the load.</span>
</p>
<ol class="c3 lst-kix_list_6-1" start="3">
<li class="c15" id="h.35nkun2"><span class="c26 c21 c18">Build your own or use an existing solution?</span></li>
</ol>
<p class="c7"><span class="c0">This is a very important question, and the answer is, of course: it depends. I’ll start with discussing the most common case and then I’ll also mention the case when it can make sense to act differently.</span>
</p>
<p class="c7"><span class="c0">In my opinion, it is essential to be familiar with and know how to use third-party services, libraries and tools, because we need to provide a large set of functionality while maintaining fast and agile development. Nowadays web products need to satisfy a broad spectrum of needs, and most of the time there is just not nearly enough time and know-how to develop all those features.</span>
</p>
<p class="c7"><span class="c0">Usually developers would rather build everything from scratch, but implementing your own solutions to common problems takes a whole lot of time. And it’s not just the time it takes to write the actual code, but also the great amount of time that you need to invest in gaining the domain specific knowledge that you need for that particular piece of software. What’s more, you can never perform as thorough testing and refinement as widely used software packages have already got, because they have a broader user and developer base that they can rely on.</span>
</p>
<p class="c7"><span class="c0">As the saying goes: </span><span
class="c0 c35">“Don’t reinvent the wheel!”</span></p>
<p class="c7"><span class="c0">Package managers (for instance: Composer, Npm, Bower, Rubygems) enjoy outstanding popularity nowadays, because they have made it easy to download, install and update packages from external sources, and they enhanced the trend to move in this direction. What you need to consider is whether you always want to get the latest version of the code automatically or you want more predictability by making sure that the underlying codebase does not change between releases. It depends on the situation, but I think that in most cases the best way to go is manually updating the external packages regularly to get the bug fixes and improvements and having tests that ensure that the new version behaves the same way the previous version did.</span>
</p>
<p class="c7"><span class="c0">There are many cloud services available out there that you can integrate to your workflow by connecting to it through an API. If you need to have full control over the service, in many cases you can choose to install it on your own server instance instead of using the cloud version. By hosting it, you take over some of the pain of operations but it can be necessary for some network security and availability concerns.</span>
</p>
<p class="c7"><span class="c0">It is strongly recommended to use only properly tested, reliable, well-documented third party libraries, tools, services and APIs. I have had some bad experiences with services that were in an early stage and had not been used and tested out in the wild yet. It means that we wasted lots of time and money both on the integration (poorly documented endpoints, a good number of emerging issues), on the bug fixing and on moving on to a more stable service and doing a major clean-up and refactor in our code.</span>
</p>
<p class="c7"><span class="c0">Choosing a good library or service in and of itself will not necessarily take you ahead of the curve because many others use them. Utilizing these in the right combination, however, might give you a competitive advantage. It is important to understand what each of these tools are designed for, what their strengths and weaknesses are, how they integrate with the packages that are already in use and how you can tailor them to your specific needs.</span>
</p>
<p class="c7"><span class="c0">Above a certain size and complexity, it might make sense to build our own version of the third party libraries and tools to make it a perfect fit for our needs and decrease dependency on others. I have seen it happening at bigger projects, that in the beginning they decided to use a third-party solution for something, but then later on, as the project grew and they wanted to be more independent and wanted to have even better performance, they started building their own tools. Obviously, it can only happen when you can afford it both in terms of financials and know-how.</span>
</p>
<p class="c14" id="h.1ksv4uv"><span class="c20 c18">3.3.1. Frameworks</span></p>
<p class="c7"><span class="c0">This topic is also part of the “Build your own or use an existing solution?”
question. Just as libraries, modules, tools and external services, nowadays frameworks are also widespread and play a substantial role in web development projects. How do they contribute to the success of a project?</span>
</p>
<p class="c7"><span class="c0">“Frameworks are about efficiency and effectiveness. They save you time. By forcing common conventions, a framework helps solve common issues like view rendering, asset generation, security, application configurations -- things that happen in every web application. This is good. It brings consistency to decisions. Instead of implementing a feature by writing a number of custom modules, all we have to do is implement it the way the framework wants us to. This saves us time and headaches, and makes the development process easier.”
(Megyesi, 2012) And this list of benefits is far from being exhaustive, it could go on with numerous challenges and problems that they provide built-in solutions for. There is also another important factor which I will write about in the People as Single Points of Failure section (Section 4.4.3).</span>
</p>
<p class="c7"><span class="c0">Megyesi mentions an interesting disadvantage too that is worth bearing in mind: “because frameworks are so good at making decisions for us, we get lazy. Instead of thinking hard about how to build a clean system with crisp abstractions, we think about what the framework would want us to do, regardless of whether the resulting code is clean.”</span>
</p>
<p class="c7"><span class="c0">Talking about web development frameworks, the MVC pattern (Model - View - Controller) is a crucial concept as it has been mainstream for a long time and lies under a very big chunk of the world’s websites. When used properly, it can simplify the development and increase the quality and maintainability of the code base. Krzysztof Rakowski in a 2011 Smashing Magazine article explains the pattern briefly by saying that “MVC is a software architecture that allows for the separation of business logic from the user interface. In this architecture, the user sees and interacts with the view that, in the case of Web applications, is generated HTML code (along with JavaScript, CSS, images, etc.) User actions are passed (as HTTP requests, GET or POST methods) to the controller. The controller is a piece of code that handles and processes user input and then reads and makes necessary changes to the model, which is responsible for the storage and modification of data. (In simple terms, the model consists of the database structure and contents, and the code used to access it.) Then, the controller generates the proper view that will be sent and displayed to user. “</span>
</p>
<p class="c30 c12"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 459.00px; height: 241.00px;"><img
alt="mvc-02.jpg" src="images/image12.jpg"
style="width: 459.00px; height: 241.00px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span class="c9">Figure 11. MVC pattern (Model - View - Controller). Source: Moock.org (2016)</span>
</p>
<p class="c7"><span class="c0">Regarding PHP, there are a couple of very strong competitors in the field of frameworks. Obviously, just the same way as for all the other topics in this paper, it is practically impossible to gather reliable data on the actual usage and popularity of the key players, but I have found two sets of data that are worth presenting. The first is the result of the 2015 edition of the annual SitePoint framework popularity survey which Bruno Skvorc published at the end of March 2015:</span>
</p>
<p class="c22"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 605.13px; height: 408.42px;"><img
alt="1427547421php_framework_popularity_at_work_-_sitepoint2c_2015.png" src="images/image13.png"
style="width: 668.32px; height: 408.42px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span class="c9">Figure 12. PHP Framework Popularity at Work. Source: Skvorc (2015)</span></p>
<p class="c7"><span class="c0">The impressive ranking of Nette and PHPixie is a bit surprising and might be down to the relatively small sample size and the attention of their communities at that given time which might have led them to active participation in the survey. The order of Laravel, Symfony2, CodeIgniter and Yii 2 appears to be a more realistic result.</span>
</p>
<p class="c7"><span class="c0">I also collected data using Google Trends and visualized the results. The graph simply shows the web search interest over time for the given keywords between 1 January 2006 and 23 April 2016:</span>
</p>
<p class="c12 c37 c40"><span
class="c9">Figure 13. Web search interest over time for PHP frameworks. (My own work, 2016)</span><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 645.00px; height: 351.00px;"><img
alt="" src="images/image15.png"
style="width: 645.00px; height: 351.00px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c7"><span class="c0">This chart does not take the different versions of these frameworks into consideration, but still shows the major trends in the market: Symfony and CodeIgniter have been strong for a quite long time while Laravel appeared from nowhere and took the lead by an extremely fast increase in popularity. Yii, CakePHP and Zend Framework, on the contrary, are gradually losing ground in favor of others.</span>
</p>
<p class="c14" id="h.44sinio"><span class="c20 c18">3.3.2. Content management systems</span></p>
<p class="c7"><span class="c0">As the last point in this section, I would like to show the current landscape in a crowded niche market: the content management systems (CMSs), which are widely used for various purposes. Even though web developers who prefer crafting bespoke software tend to despise the common content management systems, it is clear that both the demand and the supply remains strong in the CMS market and they mean a perfect solution for lots and lots of projects.</span>
</p>
<p class="c7"><span class="c0">As usual, there is no precise usage data available due to the complexity of measurement, but the statistics are good enough to point out the key players in the market. The data collected by W3Techs.com shows that as of April 2016 Wordpress has approximately 59.4% market share and interestingly it powers over 26% of all the websites in the world.</span>
</p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 214.67px;"><img
alt="Screenshot from 2016-04-25 23:54:43.png" src="images/image16.png"
style="width: 624.00px; height: 214.67px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span
class="c9">Figure 14. Most popular content management systems. Source: W3Techs.com (2016) </span></p>
<p class="c7"><span class="c0">The global OpenSource CMS information provided by the Wappalyzer browser add-on which covers roughly 1% of the entire web leads to the same conclusion that, as of April 2016, Wordpress, Joomla and Drupal are the major competitors, and Wordpress is enjoying significant dominance.</span>
</p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 396.00px;"><img
alt="Screenshot from 2016-04-25 23:45:55.png" src="images/image17.png"
style="width: 624.00px; height: 396.00px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span class="c9">Figure 15. Market share of CMS systems. Source: OpenSource CMS (2016)</span></p>
<ol class="c3 lst-kix_list_6-1" start="4">
<li class="c15" id="h.2jxsxqh"><span class="c26 c21 c18">Version control</span></li>
</ol>
<p class="c7"><span class="c0">Version control and Git are common buzzwords in the developer scene. I don’t think many would argue with saying that nowadays version control is an absolute must for every web development project, and fortunately even amateur developers and developers of small-scale projects tend to use it as a foundation for the code base. But what does version control mean?</span>
</p>
<p class="c7"><span class="c0">"Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later. For the examples (...) software source code as the files being version controlled, though in reality you can do this with nearly any type of file on a computer. (...) It allows you to revert files back to a previous state, revert the entire project back to a previous state, compare changes over time, see who last modified something that might be causing a problem, who introduced an issue and when, and more. Using a VCS (Version Control System) also generally means that if you screw things up or lose files, you can easily recover. In addition, you get all this for very little overhead.”
(Chacon - Straub, 2014)</span></p>
<p class="c7"><span class="c0">There are centralized (e.g. CVS, Perforce, SVN) and distributed (e.g. Git, Mercurial) VCSs. “The main difference between the two classes is that Centralized VCSs keep the history of changes on a central server from which everyone requests the latest version of the work and pushes the latest changes to. On the other hand, on a Distributed VCS, everyone has a local copy of the entire work’s history. This means that it is not necessary to be online to change revisions or add changes to the work.”
(Vergara, 2012). </span></p>
<p class="c7"><span class="c0">I personally prefer using Distributed VCS, Git to be specific, and as I see, the trends are all going in this direction, especially because the majority of the open-source projects use Git.</span>
</p>
<p class="c7"><span class="c0">Git is the actual command line tool that we can use locally to version control our files. We can also set it up on a server and use it as a remote repository where we can push our changes or, not surprisingly, we can also use a cloud repository as the remote.</span>
</p>
<p class="c7"><span class="c0">What makes the well-known cloud repository services (e.g. Github, Gitlab, Bitbucket) particularly interesting is that not only do they provide a repository hosting service but they also provide an extensive service package built around the Git technology. Most of them have collaboration and communication features, wikis and issue tracking capabilities, plugins for integration with other software products, continuous integration tools and even free or cheap hosting of websites. What’s more, Github has managed to build a huge and active community that contributes to the success of lots of open-source projects.</span>
</p>
<ol class="c3 lst-kix_list_6-1" start="5">
<li class="c15" id="h.z337ya"><span class="c26 c21 c18">Server environment</span></li>
</ol>
<p class="c7"><span class="c0">Having discussed how cloud is gaining ground in the industry, it is no surprise that in the past few years the biggest part of the server infrastructure that is behind the majority of the websites in the world has moved to the cloud too. Hosting a website on a cloud server has numerous advantages over traditional solutions and thus has become mainstream.</span>
</p>
<p class="c7"><span class="c0">There are many popular providers that make a broad variety of of Software as a Service (SaaS), Platform as a Service (PaaS) and Infrastructure as a Service (IaaS) services available to developers. I am not going to elaborate on all these different kinds of services and providers, but I would like to mention Amazon Web Services (AWS), Microsoft Azure, Rackspace, Google Cloud Platform, Heroku, DigitalOcean and OpenShift to name a few of the most popular providers.</span>
</p>
<p class="c7"><span class="c0">To illustrate the wide range of solutions briefly, I am going to write a few examples about what is possible with Amazon Web Services. I am sure that these things can also be achieved by other providers, but AWS is the one that I personally have experience with.</span>
</p>
<p class="c7"><span class="c0">Instead of buying and maintaining your own server, you can use the virtual private servers available in the AWS Elastic Compute Cloud (EC2) service. You can spin up new instances in minutes and can also tailor them to your specific needs (e.g. configuration of memory, CPU, instance storage and boot partition size). You have full control over the virtual server instances and can configure custom security groups and access levels. What is more, the Amazon EC2 Service Level Agreement ensures 99.95% availability which would be quite hard and expensive to achieve on your own server. You are not even bound to a single physical location because you can launch instances in quite a few different locations (so-called regions) around the globe. Domain name and DNS management is not a problem either thanks to the AWS Route 53 service.</span>
</p>
<p class="c7"><span class="c0">AWS also makes it easy to scale up and down the performance of our instances and even to launch or terminate instances automatically based on a set of rules. They also have a great load balancing service as well as monitoring and reporting services. Scalable content storage and content delivery network are also available in the set, as well as an email sending service (which takes a burden of installing a mail server off your shoulders), notification service, queue service, continuous deployment, container, database and cache services.</span>
</p>
<p class="c7"><span class="c0">Even without going into details we can get a glimpse of how the various challenges can be solved with relative ease and low costs in a modern web development environment.</span>
</p>
<p class="c14" id="h.3j2qqm3"><span class="c20 c18">3.5.1. Containers</span></p>
<p class="c7"><span class="c0">Beyond the virtualization and cloud dominance, containerization is also a very prominent trend nowadays. This technology is not new at all, but it wasn’t very widely used before 2013 when Docker, Inc announced, launched and open-sourced its container engine. </span>
</p>
<p class="c7"><span class="c0">“Container virtualization is often called operating system-level virtualization. Container technology allows multiple isolated user space instances to be run on a single host. (...) Docker is an open-source engine that automates the deployment of applications into containers. (...) So what is special about Docker? Docker adds an application deployment engine on top of a virtualized container execution environment. It is designed to provide a lightweight and fast environment in which to run your code as well as an efficient workflow to get that code from your laptop to your test environment and then into production. (...) Docker aims to reduce the cycle time between code being written and code being tested, deployed, and used. It aims to make your applications portable, easy to build, and easy to collaborate on.”
(Turnbull, 2014)</span></p>
<p class="c7"><span class="c0">Since it is a great and useful technology, companies started adopting it rapidly and within less than 3 years it has become extremely popular.</span>
</p>
<p class="c14" id="h.1y810tw"><span class="c20 c18">3.5.2. Operating systems and web servers</span></p>
<p class="c7"><span class="c0">Finally, let us take a look at what operating systems run typically on servers used for web development and which web servers are in use. </span>
</p>
<p class="c7"><span class="c0">According to the data collected by W3Techs, as of 30 April 2016 67.8% of the websites using Unix-based operating systems (among which Linux is said to be the most popular), 32.2% of the websites use Windows and Apple’s OS X is used by less than 0.1% of the websites.</span>
</p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 578.00px; height: 172.00px;"><img
alt="Screenshot from 2016-04-30 13:28:39.png" src="images/image18.png"
style="width: 578.00px; height: 172.00px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span class="c9">Figure 16. Usage of operating systems for websites. Source: W3Techs (2016)</span>
</p>
<p class="c7"><span class="c0">From Netcraft’s March 2016 Web Server Survey we can see that 32.4% percent of all the websites in the world were running on Apache webserver, not much ahead of Microsoft IIS. Nginx and Google Web Server (GWS) are also in the top 4.</span>
</p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 300.00px;"><img
alt="Screenshot from 2016-04-30 13:46:16.png" src="images/image19.png"
style="width: 624.00px; height: 300.00px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c12 c19"><span
class="c9">Figure 17. Web server developers: Market share of all sites. Source: NetCraft (2016)</span></p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 182.67px;"><img
alt="Screenshot from 2016-04-30 13:49:34.png" src="images/image20.png"
style="width: 624.00px; height: 182.67px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span
class="c9">Figure 18. Web server developers: Market share of all sites. Source: NetCraft (2016)</span></p>
<p class="c7"><span class="c0">What is interesting is that these results are significantly different for the top million busiest websites:</span>
</p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 298.67px;"><img
alt="Screenshot from 2016-04-30 13:50:05.png" src="images/image21.png"
style="width: 624.00px; height: 298.67px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span class="c9">Figure 19. Web server developers: Market share of the top million busiest sites. Source: NetCraft (2016)</span>
</p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 176.00px;"><img
alt="Screenshot from 2016-04-30 13:49:52.png" src="images/image22.png"
style="width: 624.00px; height: 176.00px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span class="c9">Figure 20. Web server developers: Market share of the top million busiest sites. Source: NetCraft (2016)</span>
</p>
<p class="c7"><span class="c0">The chart also shows that nginx’s market share is massively increasing among the top performers of the industry.</span>
</p>
<ol class="c3 lst-kix_list_6-1" start="6">
<li class="c15" id="h.4i7ojhp"><span class="c26 c21 c18">Microservices</span></li>
</ol>
<p class="c7"><span class="c0">The term microservices is the latest buzzword in web development that you hear about every day multiple times and there is no conference or meetup event where it is not mentioned or talked about. However, just that the term is overused, does not mean that it has lost its power - in fact, countless development teams are considering or are actively working on moving to a microservice-based architecture, not to mention the companies that had already embraced the idea years ago.</span>
</p>
<p class="c7"><span class="c0">The concept is very much the same as what I have already written about in the Databases section (Section 3.2.3) in relation with Polyglot Persistence. The main idea is splitting the big monolith systems into smaller, independent modules (services) that communicate with each other (typically via RESTful interfaces).</span>
</p>
<p class="c7"><span class="c0">“Microservices are an approach to distributed systems that promote the use of finely grained services with their own lifecycles, which collaborate together. Because microservices are primarily modeled around business domains, they avoid the problems of traditional tiered architectures. Microservices also integrate new technologies and techniques that have emerged over the last decade, which helps them avoid the pitfalls of many service-oriented architecture implementations. (...) Microservices are small, autonomous services that work together.”
(Newman, 2015)</span></p>
<p class="c7"><span class="c0">Benjamin Wootton in a 2016 article writes about various benefits of microservices. For example, “in a Microservice architecture, you should be able to deliver new functionality and iterate on the system faster than you would be able to on a more monolithic architecture. (...) We can modify just one system component, test it, and then push it to production outside of any centrally mandated release cycle. This is a much faster and more agile way to ship new software features”. In addition to the polyglot persistence, “because of the isolation and independence of the Microservices, individual services can be polyglot in terms of programming language [too], giving us the ability to use ‘the right tool for the job’”. He goes on saying that “in a Microservice world we can be much more flexible and scale individual services up and down as necessary, giving the system a much more dynamic property that is well suited to an elastic cloud environment”. Last but not the least, “both the Microservice architecture and the way it is usually approached typically gives us a high degree of resilience as a property of the system”. </span>
</p>
<p class="c7"><span class="c0">Needless to say that the rise of microservices brings about a breadth of new problems and challenges too, for instance network and operational complexity, data consistency and distribution issues and monitoring and debugging difficulties. Obviously these also drive the growth of new services and tools aiming to ease the pains of the developers and operation people.</span>
</p>
<ol class="c3 lst-kix_list_6-1" start="7">
<li class="c15" id="h.2xcytpi"><span class="c26 c21 c18">The API world</span></li>
</ol>
<p class="c7"><span class="c0">When discussing the most important aspects of modern-day web development, the term API surely needs to be mentioned. APIs are ubiquitous and power so many of the websites and services that we use daily. And not only are they present on the web but in fact, “APIs aren’t at all new; whenever you use a desktop or laptop, APIs are what make it possible to move information between programs”. (Proffitt, 2013)</span>
</p>
<p class="c7"><span class="c0">“API stands for application programming interface. (...) An API is a way for two computer applications to talk to each other over a network (predominantly the Internet) using a common language that they both understand. (...) There are APIs that are open to any developer, APIs that are open only to partners, and APIs that are used internally to help run the business better and facilitate collaboration between teams. An API, then, is essentially a contract. Once such a contract is in place, developers are enticed to use the API because they know they can rely on it. The contract increases confidence, which increases use. The contract also makes the connection between provider and consumer much more efficient since the interfaces are documented, consistent, and predictable.”
(Jacobson - Brail - Woods, 2012)</span></p>
<p class="c7"><span class="c0">It probably helps understand a bit more what I wrote about in the ‘Build your own or use an existing solution?’
and ‘Microservices’ chapters. Developers can incorporate the extra knowledge or features provided by external services by sending requests to and receiving responses from their APIs and microservices also communicate with each other through APIs.</span>
</p>
<p class="c7"><span class="c0">Today the web is an ever-growingly dense network of interconnected applications that rely on one another for pieces of information that they themselves do not possess. To name a few, some widely used examples include the APIs of Google, Facebook, Twitter and Dropbox or the wealth of integrations available in the major project management, communication, customer relationship management, ERP, online payment, billing and continuous deployment software products.</span>
</p>
<p class="c7"><span class="c0">Regarding the means to access a web service, there are two main approaches: SOAP (Simple Object Access Protocol) and REST (Representational State Transfer). As I see it, REST has overtaken and left SOAP behind by miles and is used far more often nowadays. Steve Francia in a 2010 article wrote that “the general rule of thumb I’ve always heard is ‘Unless you have a definitive reason to use SOAP use REST’. (...) RESTs sweet spot is when you are exposing a public API over the internet to handle CRUD operations on data. REST is focused on accessing named resources through a single consistent interface. SOAP brings its own protocol and focuses on exposing pieces of application logic (not data) as services. SOAP exposes operations. SOAP is focused on accessing named operations, each implement some business logic through different interfaces. (...) Since REST uses standard HTTP it is much simpler in just about every way. Creating clients, developing APIs, the documentation is much easier to understand and there aren’t very many things that REST doesn’t do easier/better than SOAP.”</span>
</p>
<p class="c7"><span class="c0">He also notes that “REST permits many different data formats whereas SOAP only permits XML. (...) JSON usually is a better fit for data and parses much faster. REST allows better support for browser clients due to its support for JSON”. What is more, “REST has better performance and scalability. REST reads can be cached, SOAP based reads cannot be cached”.</span>
</p>
<p class="c7"><span class="c0">One of the trends that I have personally seen in the PHP world is that microframeworks optimized specifically for APIs (e.g. Lumen, Slim, Silex) get more and more exposure due to the increasing demand for APIs. </span>
</p>
<p class="c7"><span class="c0">The other one is that at some projects, beyond the MVC pattern’s separation of concerns, there is a complete separation of the front-end and the back-end. How it works is that the back-end system knows nothing about view rendering or anything of that kind, it just simply provides a RESTful API. This way the front-end can be completely independent, developed by a different team and even located elsewhere. In a common case it would consist of a Javascript framework (e.g. Angular) that communicates with the back-end API.</span>
</p>
<ol class="c3 lst-kix_list_6-1" start="8">
<li class="c15" id="h.1ci93xb"><span class="c26 c21 c18">Software testing</span></li>
</ol>
<p class="c7"><span class="c0">Back in 2008, Paul Ammann and Jeff Offutt in the book called ‘Introduction to Software Testing’
wrote that “not very long ago, software development companies could afford to employ programmers who could not test and testers who could not program. (...) Software testing in industry historically has been a nontechnical activity. Industry viewed testing primarily from the managerial and process perspective and had limited expectations of practitioners’
technical training. As the software engineering profession matures, and as software becomes more pervasive in everyday life, there are increasingly stringent requirements for software reliability, maintainability, and security. Industry must respond to these changes by, among other things, improving the way software is tested”.</span>
</p>
<p class="c7"><span class="c0">This improved way of testing prefers automated, scripted testing over manual testing (although manual testing is still present and necessary in many cases) and also moves the responsibility of writing the testing code from a tester to the developer.</span>
</p>
<p class="c7"><span class="c0">Software testing has gradually become more and more prominent in the web development scene too. Fortunately in the past few years the idea and practice of testing became mainstream and today we can say that the majority of professional web developers, especially the ones working on big projects write tests every day, as an integral part of their job. What is more, the test-driven development (TDD) approach, which means that first you must write a test that fails before you write the actual code, gets significant attention and popularity in web development too.</span>
</p>
<p class="c7"><span class="c0">Profound software testing is crucial everywhere for quality assurance, but in my opinion automated testing is particularly important in the field of web development, because unlike other kinds of software products that ship their new versions in certain, relatively rare intervals, the deployment of code changes should be continuous in a web environment. I am going to write more about continuous deployment later on, but it is important to note that without proper automated testing, it would mean an incredibly high risk to roll out new versions not having some extent of confidence that every part works as it should. If our test suites cover the whole application (in an ideal world) and all the tests passed then we can be fairly sure that there no major drama is about to happen.</span>
</p>
<p class="c7"><span class="c0">Writing tests takes up a big chunk of a developer’s time and can seem tedious sometimes, but actually it saves a lot of time, effort and stress when it comes to altering complex parts or performing refactoring, not to mention the confidence and peace of mind during releasing code changes and the decrease in the number of bugs.</span>
</p>
<p class="c7"><span class="c0">There are several testing frameworks available for PHP which make testing easier and more effective. The best-known solutions include PHPUnit, Codeception, Behat, PHPSpec and Selenium. There are also some great cloud services which make automated cross-browser website testing possible.</span>
</p>
<ol class="c3 lst-kix_list_6-1" start="9">
<li class="c15" id="h.3whwml4"><span class="c26 c21 c18">Continuous Integration and Deployment</span></li>
</ol>
<p class="c7"><span class="c0">Continuous Integration and Continuous Deployment are key terms in today’s web development environment. The concepts do not mean the same thing but they are very closely related to each other and usually go together.</span>
</p>
<p class="c14" id="h.2bn6wsx"><span class="c20 c18">3.9.1. Continuous Integration</span></p>
<p class="c7"><span
class="c0">The great minds at ThoughtWorks explained Continuous Integration (CI) in an article as “a development practice that requires developers to integrate code into a shared repository several times a day. Each check-in is then verified by an automated build, allowing teams to detect problems early”. Martin Fowler, Chief Scientist at ThoughtWorks adds that “Continuous Integration doesn’t get rid of bugs, but it does make them dramatically easier to find and remove”.</span>
</p>
<p class="c7"><span class="c0">At first glance setting up and maintaining a process like that might seem like an overhead, but in reality, it can save a lot of time, energy and headache. I have learnt it the hard way through countless occasions of spending hours resolving conflicts that emerged during merging long-lived Git branches back to the main branch. Now, at JóSzaki, we push most of the commits right into the common develop branch and even if we need to create a separate branch for some reason, we keep it up-to-date and merge it back as soon as possible. Also whenever a new commit is pushed to the repository, the build and the tests are executed automatically and we can see straightaway if something goes wrong (we even get notifications to a Slack channel).</span>
</p>
<p class="c7"><span class="c0">I love how the authors of the previously mentioned article put it into words: “Continuous Integration is cheap. Not continuously integrating is costly. If you don’t follow a continuous approach, you’ll have longer periods between integrations. This makes it exponentially more difficult to find and fix problems. Such integration problems can easily knock a project off-schedule, or cause it to fail altogether.”</span>
</p>
<p class="c7"><span class="c0">Martin Fowler in his 2011 article uses a funny but self-explanatory chart to demonstrate how the frequency of integrations reduces the difficulty of each integration:</span>
</p>
<p class="c12 c30"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 450.25px; height: 302.21px;"><img
alt="pain.png" src="images/image00.png"
style="width: 450.25px; height: 302.21px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c12 c34"><span class="c9">Figure 21. Frequency Reduces Difficulty. Source: Fowler (2011)</span></p>
<p class="c7"><span class="c0">“If you have this kind of exponential relationship, then if you do it more frequently, you can drastically reduce the pain. And this is what happens with Continuous Integration - by integrating every day, the pain of integration almost vanishes. It did hurt, so you did it more often, and now it no longer hurts”. (Fowler, 2011)</span>
</p>
<p class="c14" id="h.qsh70q"><span class="c20 c18">3.9.2. Continuous Deployment</span></p>
<p class="c7"><span class="c0">Continuous Deployment (CD) is only about taking one more step in the same direction: it basically means that every commit pushed into the shared repository that passes the automated tests and produces a successful build gets automatically and instantly released (deployed) into the production environment. Here is a bit more in-depth explanation that reveals the background and significance of such an automated process:</span>
</p>
<p class="c7"><span class="c0">“Most modern applications of any size are complex to deploy, involving many moving parts. Many organizations release software manually. By this we mean that the steps required to deploy such an application are treated as separate and atomic, each performed by an individual or team. Judgments must be made within these steps, leaving them prone to human error. Even if this is not the case, differences in the ordering and timing of these steps can lead to different outcomes. These differences are rarely good. (...) Over time, deployments should tend towards being fully automated. There should be two tasks for a human being to perform to deploy software into a development, test, or production environment: to pick the version and environment and to press the “deploy”
button. (...) The automated deployment process must be used by everybody, and it should be the only way in which the software is ever deployed. This discipline ensures that the deployment script will work when it is needed. One of the principles that we describe in this book is to use the same script to deploy to every environment. If you use the same script to deploy to every environment, then the deployment-to-production path will have been tested hundreds or even thousands of times before it is needed on release day. If any problems occur upon release, you can be certain they are problems with environment-specific configuration, not your scripts.”
(Humble - Farley, 2010)</span></p>
<p class="c7"><span class="c0">One of the reasons why I really like this approach is that the quick fixes, minor improvements and small features that used to wait in the queue for days or weeks can now be deployed almost immediately and beyond its positive implications for quality, in some way it even gives the developers a sense of progress and impact - they can see the result and consequences of their work right away in production. On the one hand, it eases the pressure to get everything perfect because you can make very short iterations and these “not-yet-perfect”
versions give you instant feedback and reveal the accidental mistakes. On the other hand, developers are urged to ensure consistent quality and releasable code at all times, because poorly written code fragments are likely going to bring about issues straightaway.</span>
</p>
<p class="c7"><span class="c0">There are quite a few popular continuous integration tools available that make it very easy to setup a highly automated process. Most of these tools can observe certain events in our cloud Git repository and respond with custom actions like running the test cases or starting the deployment process, access our cloud server instances and perform changes necessary for deployment and even communicate with a number of external services (e.g.: send the new version number to Sentry, update tickets in the project management systems, send notifications to a Slack channel, etc…). Some of the most popular continuous deployment software are Jenkins, Travis CI, Codeship, CircleCI and GitLab CI.</span>
</p>
<p class="c7 c27"><span></span></p>
<p class="c7"><span class="c0">We can see that this topic brought together many previously discussed things, for instance the cloud technologies, server infrastructure, version control, APIs and software testing. These can all come together very nicely and can thus result in a modern and highly efficient environment. The key question is how you can integrate these tools and services in order to get a powerful combination of them. It is all about synergy, when the sum of the power of the parts is less significant than the actual power they produce when they all come together. This positive synergy is also called the 2 + 2 = 5 effect (Reference for Business, Encyclopedia of Management). This means that it is not sufficient to choose good tools and services, but we also need to understand what they are designed for and how they will cooperate with all the other things that are in use in our project. The ultimate goal is to achieve an environment that enables web developers and web developer teams to maximize their potential.</span>
</p>
<ol class="c3 lst-kix_list_6-1" start="10">
<li class="c15" id="h.3as4poj"><span class="c26 c21 c18">DevOps culture</span></li>
</ol>
<p class="c7"><span class="c0">Now, at the end of the ‘The technology trends’ chapter, I would like to mention a phenomenon that is less of a technical and more of a cultural and organizational matter by nature.</span>
</p>
<p class="c7"><span class="c0">The evolution of the so-called DevOps culture has a significant effect on a web developer’s life and daily tasks. Traditionally development used to be somewhat separated from operations, maintenance and deployment activities, but this situation is being transformed into a new set-up where either there is a strong and active collaboration between development and operations or developers even take over a part of or all of these tasks.</span>
</p>
<p class="c7"><span class="c0">“An attitude of shared responsibility is an aspect of DevOps culture that encourages closer collaboration. It’s easy for a development team to become disinterested in the operation and maintenance of a system if it is handed over to another team to look after. If a development team shares the responsibility of looking after a system over the course of its lifetime, they are able to share the operations staff’s pain and so identify ways to simplify deployment and maintenance (e.g. by automating deployments and improving logging). They may also gain additional observed requirements from monitoring the system in production. (...) DevOps culture blurs the line between the roles of developer and operations staff and may eventually eliminate the distinction.”
(Wilsenach, 2015)</span></p>
<hr style="page-break-before:always;display:none;">
<p class="c6" id="h.1pxezwc"><span class="c29 c21 c18"></span></p>
<ol class="c3 lst-kix_list_5-0" start="4">
<li class="c23"><span class="c10">The business perspective</span></li>
</ol>
<p class="c7"><span class="c0">So far I’ve been writing mostly about what technology is available, what it looks like and what it is capable of doing. Although these solutions can be really exciting from a developer’s point of view, we must also see that even if an ideal, perfect software and server environment existed, in and of itself it wouldn’t be worth much without delivering value to the business. This is why I find it important to take a close look at what the main factors are from a business perspective and what the business can gain and benefit from the technology shifts.</span>
</p>
<ol class="c3 lst-kix_list_9-1 start" start="1">
<li class="c15" id="h.49x2ik5"><span class="c26 c21 c18">Scalability</span></li>
</ol>
<p class="c7"><span class="c0">Scaling has been mentioned many times in this paper already, and it is a very important topic indeed. In this context scaling up basically means keeping the behavior of a website or web service unchanged despite the increasing load (which usually means the number of users). It comes into play either when the traffic is growing over time or when unusually high traffic hits the web server, for example thanks to a marketing campaign or some other event that causes a swift increase in interest. In most cases, increasing the computing capacity of the server (e.g. CPU, memory) solves the problem. Scaling down, on the other hand, means lowering the performance of the system when less computing power is enough.</span>
</p>
<p class="c7"><span class="c0">There are two distinctively different types of scaling: vertical scaling (also called scaling up) and horizontal scaling (also called scaling out). A 2014 David Beaumont article explains it this way: “Vertical scaling can essentially resize your server with no change to your code. It is the ability to increase the capacity of existing hardware or software by adding resources. Vertical scaling is limited by the fact that you can only get as big as the size of the server. Horizontal scaling affords the ability to scale wider to deal with traffic. It is the ability to connect multiple hardware or software entities, such as servers, so that they work as a single logical unit. This kind of scale cannot be implemented at a moment’s notice.”</span>
</p>
<p class="c7"><span class="c0">I drew a chart to illustrate the difference:</span></p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 350.67px;"><img
alt="Untitled drawing.png" src="images/image01.png"
style="width: 624.00px; height: 350.67px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span class="c9">Figure 22. Vertical and Horizontal Scaling. (My own work, 2016)</span></p>
<p class="c7"><span class="c0">According to Amir Shevat (2008), for “small scale application scaling up [vertical scaling] might be cheaper and faster to develop and implement”
but “it is a costly and not an infinite solution, (...) there is a physical limitation to the computing power and memory you can have in a single computer”. For large applications horizontal scaling is better, because it “offers infinite scalability, when you need to support more users you just add more low cost computers to your server farms. On the other hand, this is not a straightforward solution. You need to design, architect, and develop your application to be ready to scale out”.</span>
</p>
<p class="c7"><span class="c0">The great news here from a business perspective is that on a cloud server infrastructure (that I described in Section 3.5) horizontal scaling can be achieved easily (even automatically) and most importantly, cost efficiently, instead of spending a large sum on scaling up the application vertically. If the application is built on a microservice infrastructure, it is enough to launch new nodes of the services which are performance bottlenecks, as opposed to scaling up the entirety of a monolithic application. The performance, resources and costs can be tailored to the actual demand and needs. For example, during marketing campaigns or in times of the year when we expect higher traffic we can scale up the application while in less busy periods we can scale it down.</span>
</p>
<p class="c7"><span class="c0">It makes it easy to introduce new services or features or to expand the service to new areas or even to new countries or continents. In case of a geographic expansion a great solution could be to spin up new instances in another availability zone which is closer to the newly targeted areas to provide their users with low latency.</span>
</p>
<ol class="c3 lst-kix_list_9-1" start="2">
<li class="c15" id="h.2p2csry"><span class="c26 c21 c18">Costs</span></li>
</ol>
<p class="c7"><span class="c0">For businesses, operational costs are always of very high importance, so I find it worthwhile to take a look at how the costs are affected and changed by the direction in which web development is moving.</span>
</p>
<p class="c7"><span class="c0">Very much the same way as in other industries, we can say that automation in general frees up human resources and thus saves money. It is worth the effort to provide the developers with an environment where they can effectively and efficiently collaborate with each other and can create outstanding value. This can be achieved by enabling the developers to focus on the things that they truly care about and that they are best at –
instead of spending their expensive and valuable time on tedious, repetitive tasks that could be automated or outsourced.</span>
</p>
<p class="c7"><span class="c0">The wave of cloud servers and other cloud services has managed to diminish the maintenance costs by making in-house servers, devices, tools, network and data storage unnecessary. By that I do not only mean the actual cost of the hardware but also the cost of the needed software and the cost of the workforce who is responsible for configuring and maintaining the infrastructure.</span>
</p>
<p class="c7"><span class="c0">“Cloud-based services can help you save money on many fronts, including server maintenance, power and cooling costs, and software licensing and upgrade expenses. (...) Rather than spending money to maintain hardware that often goes unused, subscribing to software and services for a low monthly fee can help small businesses stretch their budgets further.”
(American Express Company, 2011)</span></p>
<p class="c7"><span class="c0">On top of the changes in cost efficiency, the cost structure has also changed. Some of the typical fixed costs have turned into variable cost due to the rise of ‘pay as you go’
cloud services. To clarify: “fixed costs [are] not tied to production [while] variable costs fluctuate according to how much you produce”. (Thompson, 2015) What it means for web development projects is that a significant portion of the total costs depend on the traffic and performance of the application. If your website or web services generates money for you also on a per user or per performance basis, then in very simple terms we can say that you pay less when you have less income and you pay more when you have higher income. Its advantage is that the barrier to entry goes down in the industry and new players can start building their projects with relatively low costs and they only need to pay more when their projects turn out to be successful.</span>
</p>
<p class="c7"><span class="c0">Cloud computing and the use of third-party tools and services is ideal for companies big and small because they save cost and give extra convenience and allow you to focus on what you do best. Where I personally see a distinction though is the use of proper automated testing, code quality assurance, reporting and monitoring tools and automated deployment solutions. I feel that in the field of web development teams developing their own products used to be more likely to incorporate these practices because for them the long-term effects are more important and therefore they were willing to invest time, money and learning into these to reach better quality and efficiency. On the contrary, teams working on client projects tended to have the “get it done as quickly as possible”
attitude due to the deadlines and the lack of emotional attachment to the projects. In my opinion thanks to the rapid growth and advancement in the field, these practices are no longer considered to be a luxury and more and more companies in diverse fields can afford to have them and realize that the investment breeds actual competitive advantage. What I am trying to say is that the necessary investment both in terms of money and knowledge has dropped and now practically anyone has access to these services either for free or at a low price and it has become so easy to start using them that even novice developers can utilize them.</span>
</p>
<ol class="c3 lst-kix_list_9-1" start="3">
<li class="c15" id="h.147n2zr"><span class="c26 c21 c18">Quality</span></li>
</ol>
<p class="c7"><span class="c0">Even though price, speed of delivery and other factors often get higher priority than quality, I still insist that quality is very valuable to the right customers and high quality is a great value that the business can sell. This is why it is important for the business that the web developers create a quality product that in return creates value for the customer and thus to the business.</span>
</p>
<p class="c7"><span class="c0">I have already written about how automated tests reduce the number of times when something unexpected happens and makes it easier to spot faulty parts, how using third-party software that is widely used, tried and tested can decrease the number of bugs and leaks and how we can achieve more consistency by automating complex processes are extremely prone to human error. These all help the business to have a strong value proposition based on quality that appeals to the customer.</span>
</p>
<p class="c7"><span class="c0">Sommerville collected a number of software quality attributes in the ninth edition of the Software Engineering book (2011), and these apply to web development and web products too:</span>
</p>
<p class="c7"><span
style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 201.33px;"><img
alt="Software quality attributes.png" src="images/image02.png"
style="width: 624.00px; height: 201.33px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c19 c12"><span class="c9">Figure 23. Software quality attributes. (Sommerville, 2011)</span></p>
<p class="c7"><span class="c0">We can see that many of these attributes, like robustness, reliability, testability, resilience, security, modularity, portability, reusability and efficiency are addressed and improved by the technology shifts discussed earlier in this paper.</span>
</p>
<ol class="c3 lst-kix_list_9-1" start="4">
<li class="c15" id="h.3o7alnk"><span class="c21 c18 c26">Internal processes</span></li>
</ol>
<p class="c14" id="h.23ckvvd"><span class="c20 c18">4.4.1. Metrics</span></p>
<p class="c7"><span class="c0">The new set of tools and services that I demonstrated in the technology trends chapter make it possible to monitor, measure, track and analyze systems and processes a lot more accurately. This is an important factor because in order to understand the actual performance of a system, team or company, you need good and reliable metrics. In recent years many companies have started consciously sticking to data-driven decisions, and obviously they apply this approach to the web development teams and projects too.</span>
</p>
<p class="c7"><span class="c0">A commonly practiced way of setting goals and measuring results is defining KPIs (Key Performance Indicators). With these advanced tools and services a lot of data is available automatically and thus gathering data for the metrics is not a big burden any longer. To name a few examples, deployment speed, deployment success rate, deployment frequency, rollback / regression frequency, test coverage, number of tests, test execution time, code duplication rate, availability, average response time, number of reported bugs, number of runtime exceptions and development velocity (based on story points) can all be used as KPI of the web development team and the figures can easily be retrieved from the various continuous integration, monitoring and analytics tools.</span>
</p>
<p class="c7"><span class="c0">We use several of these metrics at JóSzaki and they provide us with a really good base for comparison both to our previous results and to other teams, and they serve as indicators on our development speed and quality. Knowing our velocity, for instance, helps us with resource planning and also helps us draw conclusions about the efficiency of our methods and processes. What is more, we define team goals based on these metrics and seeing how we are improving adds an extra incentive and motivation to our daily work.</span>
</p>
<p class="c7"><span class="c0">One last aspect I would like to mention in this topic is that web service providers can commit themselves to more realistic availability and performance criteria when they have reliable metrics about every part of their systems. Not only does it help when defining an SLA (Service Level Agreement) but it also helps to spot the bottlenecks and weakest links that need immediate attention.</span>
</p>
<p class="c14" id="h.ihv636"><span class="c20 c18">4.4.2. Flexibility and velocity</span></p>
<p class="c7"><span class="c0">Automation, cloud technologies and third-party solutions have all contributed to an increase in speed of development (velocity), and the flexibility is also improved by things like continuous integration and deployment. This increased agility is important for the business because it can mean shorter release cycles, flexible release options, the ability to satisfy urgent business needs almost instantly and the ability to fix business critical bugs and issues quickly. </span>
</p>
<p class="c7"><span class="c0">In today’s constantly changing and volatile environment it is essential to have the ability to run quick and short experiments and iterate easily on new features and improvements. The business and product development teams can come up with new ideas and can rapidly go through the “build - measure - learn”
methodology introduced by the book called The Lean Startup (Ries, 2011). They can get their experiments to production in a minimum amount of time and can change their minds based on the results and can rollback or modify things.</span>
</p>
<p class="c7"><span class="c0">On top of these advantages, the short cycles and frequent deployments also reduce the risks of a change. What is more, these often expose hidden inefficiencies and costs which can then be addressed and fixed.</span>
</p>
<p class="c14" id="h.32hioqz"><span class="c20 c18">4.4.3. People as Single Points of Failure</span></p>
<p class="c7"><span class="c0">In the IT world the ‘single point of failure’ term is often used to refer to an “element or part of a system for which no backup (redundancy) exists and the failure of which will disable the entire system.”
(Business Dictionary, 2016) Obviously a single point of failure is a thing to be avoided because it threatens the security and stability of the whole systems. </span>
</p>
<p class="c7"><span class="c0">Where is becomes interesting is that it does not only apply to computer systems but to organizations too. A person can easily be a single point of failure if their absence or departure would paralyze the organization or the actual computer system.</span>
</p>
<p class="c7"><span class="c0">In 2013 Tomas Kucera wrote that “your responsibility as a leader is to identify key people and plan for their unexpected demise. The goal is not to have key people at all.”</span>
</p>
<p class="c7"><span class="c0">As I see it, many web development projects have transitioned from a state of using completely custom and unique, complex and unclean code bases to a state of using well-known frameworks even for bespoke software, relying on properly documented and widely used libraries and cloud services, adapting common principles and coding conventions, having extensive test suites and automated deployment processes. These somewhat standardized, documented and industry standard processes and tools result in an environment where workforce is a little bit easier to replace and dependency on a particular developer is reduced.</span>
</p>
<p class="c7"><span class="c0">It is important to note that I do not think developers should be perceived and treated as cogs in a machine that can easily be replaced anytime, because they carry an incredible wealth of experience, knowledge and relationships specific to the organization. I like how Amy Rees Anderson in a 2013 article wrote that “great employees are not replaceable (...) it is great people that make a great company”. I totally agree with it but I also know that what she writes later on is also true: “there will be some life events that take great employees away from a company, which cannot be stopped”. This thought and all the cases when a developer is absent for a shorter or longer time amplify the need for an environment where people are less likely to be single points of failure.</span>
</p>
<p class="c14" id="h.1hmsyys"><span class="c20 c18">4.4.4. Employer branding</span></p>
<p class="c7"><span class="c0">I think this is a really important aspect but the meaning of the term might not be clear at first sight. This is how a recruitment guide on Realstaffing.com defines it: “An employer brand refers to the perceptions key stakeholders, and more specifically current and potential employees, have of your organisation. It is about how they view the company; from how you conduct yourselves in the market, through to what they think it would be like to work for your organisation. An effective employer brand presents your organisation as a good employer and a great place to work and can, as a result, help with recruitment, retention and generally affect market perception of your company.”
(Realstaffing.com, 2016)</span></p>
<p class="c7"><span class="c0">I believe that having a great environment can make the company more appealing and attractive to developers. What I mean by great environment in this case is that the developers can use advanced, cutting-edge technologies and tools, they are encouraged and supported to follow the trends and keep learning and experimenting, and their mundane tasks are automated so that they can spend their time with exciting challenges.</span>
</p>
<p class="c7"><span class="c0">As a consequence, it will be easier to attract and hire talent and retain existing employees. It is of particularly high importance nowadays as companies are faced with scarcity of quality workforce in the field of web development. As far as I know this is happening all over the world in the whole IT industry, but what I am sure about is that this is the case in Hungary.</span>
</p>
<p class="c7"><span class="c0">According to an index.hu article published in March 2016 the Hungarian companies could employ 22.000 more people in IT positions while in the European Union there is a need for an additional 600.000 - 700.000 software developers. I haven’t found any data about the web developers in particular, but based on my own experiences, the situation is just about the same and companies find it difficult to hire good developers.</span>
</p>
<p class="c7 c27"><span></span></p>
<p class="c7" id="h.41mghml"><span class="c0">This is the end of ‘The business perspective’ chapter. We can see that not only does the technology change rapidly but businesses are also strongly affected by the wind of change. New opportunities and advantages emerge while businesses need to face new challenges and difficulties as well, such as privacy, security, responsibility and dependency concerns.</span>
<hr style="page-break-before:always;display:none;">
</p>
<ol class="c3 lst-kix_list_5-0" start="5">
<li class="c23"><span class="c10">Summary</span></li>
</ol>
<p class="c7"><span class="c0">The few selected areas that I covered in this paper gave an overview the current state of web development and also gave a glimpse into what is in the toolbox of a modern day web developer. The rapid improvement and transformation of the technologies, best practices and tools make web development both a challenging and an exciting occupation.</span>
</p>
<p class="c7"><span class="c0">As I see it, the main threads of the advancement are automation, cloud computing, distributed and scalable systems, and last but not least open-source software and extensive collaboration that joins forces, connects knowledge and experience and creates ambitious, far-reaching and valuable products and services.</span>
</p>
<p class="c7"><span class="c0">We could also see that the technology shifts that we are experiencing have affected businesses too in numerous ways. Those who can adapt to this ever-changing environment and can take advantage of the opportunities have a great chance of success as there is still a wealth of unleashed potential on the web. This is where this paper can help –
by becoming familiar with the trends and becoming well-versed with the available technology, both individuals and businesses can gain a deeper understanding of the web development environment and will be able to spot and exploit opportunities. </span>
</p>
<p class="c7"><span class="c0">Since I did not go into the specific software engineering details, the technology overview is suitable even for non-developer participants of web development projects. Knowing how today’s technology works and how the different areas relate to each other can help them identify with the challenges and struggles of developers and can also help them originate innovative ideas.</span>
</p>
<p class="c7"><span class="c0">I am fairly sure that the presented evolution of the web is going to continue. We are just about to go deeper into the era of the Semantic Web (Web 3.0) which connects knowledge and then over time we are going to get closer to the Web 4.0 era, the era of The Ubiquitous Web (4.0) which is forecasted to connect intelligence to an extent that is yet unknown.</span>
</p>
<p class="c7" id="h.2grqrue"><span class="c0">I also expect that Artificial Intelligence (AI) solutions are going to become even more common and useful and will be present in almost every segment of the web development landscape. Two examples of its manifestation are communication and integration bots (which are already apparent in many web application, like Slack and Facebook Messenger) and intelligent software robots that are likely to replace human workforce in trivial, repetitive web development tasks.</span>
<hr style="page-break-before:always;display:none;">
</p>
<hr class="section-break">
<section id="list-of-figures">
<ol class="c3 lst-kix_list_5-0" start="6">
<li class="c23"><span class="c10">List of figures</span></li>
</ol>
<p class="c12"><span class="c1 c21">Figure 1.</span><span class="c1"> ‘Semantics of Social Connections’
and ‘Semantics of Information Connections’. Source: Spivack (2016)</span></p>
<p class="c12"><span class="c1 c21">Figure 2. </span><span class="c1">What is the Evolution of the Internet to 2020? Source: Davis (2008)</span>
</p>
<p class="c12"><span class="c1 c21">Figure 3.</span><span class="c1"> Total Number of Websites. Source: NetCraft and Internet Live Stats (2016)</span>
</p>
<p class="c12"><span class="c1 c21">Figure 4. </span><span class="c1">The most popular programming languages. Source: Stack Overflow (2016)</span>
</p>
<p class="c12"><span class="c1 c21">Figure 5.</span><span class="c1"> Programming Language vs High Traffic Websites. Source: Millares (2015)</span>
</p>
<p class="c12"><span class="c1 c21">Figure 6.</span><span class="c1"> DB-Engines Ranking. Source: SolidIT (2016)</span>
</p>
<p class="c12"><span class="c1 c21">Figure 7. </span><span
class="c1">DB-Engines Ranking. Source: SolidIT (2016)</span></p>
<p class="c12"><span class="c1 c21">Figure 8.</span><span class="c1"> Step 1: Use of RDBMS for every aspect of storage for the application. Source: Sadalage - Fowler (2012)</span>
</p>
<p class="c12"><span class="c1 c21">Figure 9.</span><span class="c1"> Step 2: Example implementation of polyglot persistence. Source: Sadalage - Fowler (2012)</span>
</p>
<p class="c12"><span class="c1 c21">Figure 10.</span><span class="c1"> Step 3: Using services instead of talking to databases. Source: Sadalage - Fowler (2012)</span>
</p>
<p class="c12"><span class="c1 c21">Figure 11. </span><span class="c1">MVC pattern (Model - View - Controller). Source: Moock.org (2016)</span>
</p>
<p class="c12"><span class="c1 c21">Figure 12.</span><span class="c1"> PHP Framework Popularity at Work. Source: Skvorc (2015)</span>
</p>
<p class="c12"><span class="c1 c21">Figure 13.</span><span class="c1"> Web search interest over time for PHP frameworks. (My own work, 2016)</span>
</p>
<p class="c12"><span class="c1 c21">Figure 14.</span><span class="c1"> Most popular content management systems. Source: W3Techs.com (2016)</span>
</p>
<p class="c12"><span class="c1 c21">Figure 15. </span><span class="c1">Market share of CMS systems. Source: OpenSource CMS (2016)</span>
</p>
<p class="c12"><span class="c1 c21">Figure 16.</span><span class="c1"> Usage of operating systems for websites. Source: W3Techs (2016)</span>
</p>
<p class="c12"><span class="c1 c21">Figure 17. </span><span class="c1">Web server developers: Market share of all sites. Source: NetCraft (2016)</span>
</p>
<p class="c12"><span class="c1 c21">Figure 18.</span><span class="c1"> Web server developers: Market share of all sites. Source: NetCraft (2016)</span>