John Brown was privately educated. Subsequently he was apprenticed to Sir John Coode and employed on the Portland breakwater. After serving temporarily as assistant engineer on the Bristol and Exeter Railway, Coode appointed him in charge of the improvement works at the mouth of the river Bann, Ireland, until the work was suspended in September 1872. He was elected an associate of the Institution of Civil Engineers in December 1873 and became a member in February 1882.
In November 1873, on Coode's recommendation, Brown was appointed as an assistant engineer in the Cape Government Railways. He was promoted to maintenance engineer for the Western System in 1882, resident engineer of the Western and Midlands System in 1884, served as acting engineer-in-chief from June to November 1885, was appointed chief resident engineer of the open lines from December 1890, and in October 1892 succeeded H.J. Pauling as engineer-in-chief, a position he retained to his retirement in 1904. In 1902 he was awarded the CMG (Companion of the Order of St. Michael and St. George) for his services during the Anglo-Boer War. During his brief retirement he lived in Rondebosch, Cape Town.
At the foundation meeting of the Cape Society of Civil Engineers on 14 January 1903, Brown was elected unanimously as its first president. He was not present at the meeting, but had indicated his intention to join it. His very brief inaugural address was read by A. Grant-Dalton* at the Society's meeting on 8 April, as Brown was again absent. In fact, he did not chair a single meeting during his term of office. When his term ended in 1904 he became one of the Society's vice-presidents, and was elected as its first honorary member. From April 1902 to April 1904 he represented South Africa on the council of the (British) Institution of Civil Engineers. In 1902 he became a foundation member of the South African Association for the Advancement of Science.